簡體   English   中英

如何在IndexedDB中表示層次結構?

[英]How to represent hierarchical structure in IndexedDB?

我有一個復雜的,可變的分層數據結構,我將從JavaScript本地存儲。 根據我迄今為止的研究,看起來IndexedDB是我解決方案的最佳選擇。

我的結構由類似的元素組成,每個元素都有一個唯一的標識符和任意數量的子元素。 可以有任意數量的根元素。 元素可以是指向其他現有元素的符號鏈接。 我計划在ID上創建一個objectStore,從那里我考慮了幾個選項:

1)我可以直接插入根元素。 這使得分層操作(修剪,克隆,移植)和備份到服務器變得更加容易 - 實際上是微不足道的; 但也使搜索更加昂貴的更深層元素更加復雜。

2)我可以將每個元素直接插入到商店中,並使用子元素ID根據需要重建層次結構。 這樣可以加速搜索O(log n),但重新創建關系數據庫的所有分層難度。

如果有辦法: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);         
       };   

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM