Indexed Database

Indexed Database,也可简称为 IndexedDB(以前被称作 WebSimpleDB),同样是一个 Web 客户端存储结构化数据的规范,在 2009 年由 Oracle 提出。

如果说 Web SQL Databae 在客户端实现了 传统的 SQL 数据库操作,那么 Indexed Database 更类似于 NoSQL 的形式来操作数据库 , 其中最重要的是 Indexed Database 不使用 SQL 作为查询语言。

其数据存储可以不需要固定的表格模式,也经常会避免使用 SQL 的 JOIN 操作,并且一般具有水平可扩展性。

目前 W3C 官方也把焦点 投到对 Indexed Database 规范的制定当中来,而 Microsoft 和 Mozilla 是对这个规范重要的两个推动者,Firefox 4 以上已经部分实现了 Indexed DB API,并且 IE 10 中也将实现 Indexed DB API。由于在手机等移动设备的浏览器中都没有实现 Indexed DB API,所以其还有一定的局限性,但这并不妨碍它作为未来的 HTML5 的焦点而存在。

request = indexedDB.open("DataModel");

request.onupgradeneeded = function() {

db = request.result;

var store = db.createObjectStore("meters", {keyPath: "id"});

store.createIndex("by_tag", "tag", {unique: true});

store.createIndex("by_name", "name");

};

request.onsuccess = function() {

db = request.result;

};

function save(dataModel){

var tx = db.transaction("meters", "readwrite");

var store = tx.objectStore("meters");

dataModel.each(function(data){

store.put({

id: data.getId(),

tag: data.getTag(),

name: data.getName(),

meterValue: data.a('meter.value'),

meterAngle: data.a('meter.angle'),

p3: data.p3(),

r3: data.r3(),

s3: data.s3()

});

});

tx.oncomplete = function() {

console.log(dataModel.size() + ' datas are saved');

};

return dataModel.serialize();

}

function restore(dataModel){

var tx = db.transaction("meters", "readonly");

var store = tx.objectStore("meters");

var req = store.openCursor();

var nodes = [];

req.onsuccess = function() {

var res = req.result;

if(res){

var value = res.value;

var node = createNode();

node.setId(value.id);

node.setTag(value.tag);

node.setName(value.name);

node.a({

'meter.value': value.meterValue,

'meter.angle': value.meterAngle

});

node.p3(value.p3);

node.r3(value.r3);

node.s3(value.s3);

nodes.push(node);

res.continue();

}else{

if(nodes.length){

dataModel.clear();

nodes.forEach(function(node){

dataModel.add(node);

});

console.log(dataModel.size() + ' datas are restored');

}

}

};

return '';

}

function clear(){

var tx = db.transaction("meters", "readwrite");

var store = tx.objectStore("meters");

var req = store.openCursor();

var count = 0;

req.onsuccess = function(event) {

var res = event.target.result;

if(res){

store.delete(res.value.id);

res.continue();

count++;

}else{

console.log(count + ' datas are cleared');

}

};

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值