Indexed Database

Indexed Database,也可簡稱為 IndexedDB(以前被稱作 WebSimpleDB),同樣是一個 Web 客戶端存儲結(jié)構(gòu)化數(shù)據(jù)的規(guī)范,在 2009 年由 Oracle 提出。

如果說 Web SQL Databae 在客戶端實(shí)現(xiàn)了 傳統(tǒng)的 SQL 數(shù)據(jù)庫操作,那么 Indexed Database 更類似于 NoSQL 的形式來操作數(shù)據(jù)庫 , 其中最重要的是 Indexed Database 不使用 SQL 作為查詢語言。

其數(shù)據(jù)存儲可以不需要固定的表格模式,也經(jīng)常會避免使用 SQL 的 JOIN 操作,并且一般具有水平可擴(kuò)展性。

目前 W3C 官方也把焦點(diǎn) 投到對 Indexed Database 規(guī)范的制定當(dāng)中來,而 Microsoft 和 Mozilla 是對這個規(guī)范重要的兩個推動者,F(xiàn)irefox 4 以上已經(jīng)部分實(shí)現(xiàn)了 Indexed DB API,并且 IE 10 中也將實(shí)現(xiàn) Indexed DB API。由于在手機(jī)等移動設(shè)備的瀏覽器中都沒有實(shí)現(xiàn) Indexed DB API,所以其還有一定的局限性,但這并不妨礙它作為未來的 HTML5 的焦點(diǎn)而存在。

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

}

};

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容