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');

}

};

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容