Javascript 如何在IndexedDB中表示层次结构?

Javascript 如何在IndexedDB中表示层次结构?,javascript,hierarchy,hierarchical-data,indexeddb,hierarchical,Javascript,Hierarchy,Hierarchical Data,Indexeddb,Hierarchical,我有一个复杂多变的分层数据结构,我将从JavaScript本地存储它。根据我迄今为止的研究,IndexedDB似乎是我解决方案的最佳选择 我的结构由相似的元素组成,每个元素都有一个唯一的标识符和任意数量的子元素。可以有任意数量的根元素。元素可以是指向其他现有元素的符号链接。我计划在ID上创建一个objectStore,在此基础上我考虑了几个选项: 1) 我可以直接插入根元素。这使得分层操作(修剪、克隆、移植)和备份到服务器变得更加容易——实际上非常简单;但这也使得搜索更深层次的元素变得非常昂贵,

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

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

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

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

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


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

在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);         
       };   

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