【问题标题】:How to represent hierarchical structure in IndexedDB?如何在 IndexedDB 中表示层次结构?
【发布时间】:2014-10-16 20:42:04
【问题描述】:

我有一个复杂且可变的分层数据结构,我将从 JavaScript 本地存储。根据我迄今为止的研究,看起来 IndexedDB 是我解决方案的最佳选择。

我的结构由相似的元素组成,每个元素都有一个唯一的标识符和任意数量的子元素。可以有任意数量的根元素。元素可以是其他现有元素的符号链接。我计划在 ID 上创建一个 objectStore,从那里我考虑了几个选项:

1) 我可以直接插入根元素。这使得分层操作(修剪、克隆、移植)和备份到服务器变得更加容易——真的很简单;但也使搜索更深层次的元素变得非常昂贵且实施起来更加复杂。

2) 我可以将每个元素直接插入到 store 中,并根据需要使用子元素 ID 来重建层次结构。这将搜索速度提高到 O(log n),但重新创建了关系数据库的所有层次结构困难。

如果有办法: a) 创建一个索引或查询,快速遍历 IndexeDB 中的整个数据结构 或 b) 在 IndexedDB 中创建对一个对象的多个引用

它大大简化了问题,除了我不确定如何最好地解决这个问题。

【问题讨论】:

  • 三年多前我就知道了,但是你找到解决办法了吗?我正在寻找一种方法来存储和搜索 HTML 客户端。

标签: javascript hierarchy hierarchical-data indexeddb hierarchical


【解决方案1】:

在 IndexedDB 中创建索引:

        var oOptions = { keyPath : "id", autoIncrement : true };
        var oStore = dbHandle.createObjectStore( "yourstore", oOptions );
        var oIxOptions = { unique: true, multientry: false };            
        oStore.createIndex( "IxYourIndexName", "id", oIxOptions );    

使用 id 查询对象存储并在其上打开游标以进行迭代:

        var transaction = dbHandle.transaction(["yourstore"],"readwrite");   
        var os = transaction.objectStore("yourstore");
        var cursorRequest  = null;   
        var ix = os.index("IxYourIndexName");   
        var keyRange = IDBKeyRange.only(1);// get by id = 1 
        cursorRequest = ix.openCursor(keyRange);     
        cursorRequest.onsuccess = function (ev){
           var cursor = ev.target.result;                  
        };               
        cursorRequest.onerror = function (ev) {
          console.log("  Error: " + ev.message);         
       };   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2013-08-08
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    相关资源
    最近更新 更多