html5 indexeddb 排序,HTML5 IndexedDB,Web SQL数据库和浏览器大战
根據您在iOS上對Safari的要求,除了WebSQL之外別無選擇 . 其他移動瀏覽器(如Opera和Opera)支持WebSQL黑莓 . 即使他們有IndexedDB,我也不認為他們會刪除WebSQL支持 . 不知何故,他們是互補的 .
另一方面,在瀏覽器存儲戰爭中,IndexedDB獲勝 . IE和FF只有IndexedDB . 諷刺的是,FF在Sqlite之上實現了IndexedDB .
我想說的是IndexedDB不僅僅是關鍵值存儲 . 它有索引和交易 . 這些只有兩個幾乎構成SQL查詢的所有功能,包括連接,條件和排序 . 起初并不明顯,因為它的異步API .
IndexedDB的性能優于WebSQL . 它更安全 . 它對javascript用例更靈活 . 最后它更容易使用 .
為了說明這種情況,我將使用my library中的sudo代碼,但您可以直接使用IndexedDB API:
'people'商店有索引字段'name'和list indexed字段'hobby' . 在JSON中,
people = {
name: 'Foo Bar',
email: 'foo@bar.com'
hobby: ['camping', 'swimming']};
從“愛好者”露營的“人”中檢索姓名 .
var req = db.keys('people', 'hobby', IDBKeyRange.only('camping'));
req.done(function(campers) {
db.keys('people', campers, 'name').done(function(names) {
console.log(names);
});
});
關于這段代碼的有趣之處在于沒有涉及序列化 . 因此它非???.
以下示例說明了友誼圖查詢 . friendship 對象庫只有一個列出的索引字段 friend_list . 它使用人物對象存儲鍵作為外線主鍵 . people 對象庫有很多屬性,其中有 location 字段 . 該查詢是查找知道 me 和 other_guy 且位于'Singapore'的朋友列表 .
var q1 = new ydn.db.Iterator('friendship', 'friend_list', IDBKeyRange.only(me));
var q2 = new dn.db.Iterator('friendship', 'friend_list', IDBKeyRange.only(other_guy));
// if location is not indexed, a filtered value query is used.
var q3 = new ydn.db.Iterator('people', new ydn.db.Expression(['"location"', "'Singapore'", '=']));
// if location is indexed, an index query is used.
// var q3 = new ydn.db.Iterator('people', 'location', IDBKeyRange.only('Singapore'));
var current_loop = 2; // start from inner loop
var join_algo = function(keys, index_keys) {
var advancement = [];
advancement[keys.length - 1] = null;
var has_adv = false;
for (var i = 0; i < keys.length; i++) {
if (!goog.isDef(keys[i])) {
// completed iterator
if (i != 0) {
advancement[i] = false; // request to restart the iteration
advancement[i - 1] = true; // advance outer iterator
current_loop = i - 1;
} // i == 0 means we are done.
has_adv = true;
break;
}
}
if (!has_adv) {
// continue looping current
advancement[current_loop] = true;
}
return advancement;
}
var result = db.scan([q3, q1, q2], join_algo);
result.done(function(keys, index_keys, values) {
console.log(values); // should get desire list of friends
});
此連接查詢再次只是鍵掃描,因此非???. 默認情況下 scan 使用sorted-merge算法來查找匹配的鍵,但這里顯示了樸素的嵌套循環連接算法 . 因此表連接是可能的,但您必須編寫連接算法 . 但是像Zigzag merge這樣的新算法比使用Sqlite更快,因為所有輸入都是排序的,游標可以很好地進步,更重要的是加入過程可以利用不在數據庫中的外部知識 . 使用SQL,連接操作是不透明的 .
除了IndexedDB之外,還可以使用流式傳輸和map / reduce處理等技術 .
總結
以上是生活随笔為你收集整理的html5 indexeddb 排序,HTML5 IndexedDB,Web SQL数据库和浏览器大战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html文字跳转备注,界面跳转备注.ht
- 下一篇: asp页面怎么转html页面,将asp页