Javascript 如何在IndexedDB中表示层次结构?
我有一个复杂多变的分层数据结构,我将从JavaScript本地存储它。根据我迄今为止的研究,IndexedDB似乎是我解决方案的最佳选择 我的结构由相似的元素组成,每个元素都有一个唯一的标识符和任意数量的子元素。可以有任意数量的根元素。元素可以是指向其他现有元素的符号链接。我计划在ID上创建一个objectStore,在此基础上我考虑了几个选项: 1) 我可以直接插入根元素。这使得分层操作(修剪、克隆、移植)和备份到服务器变得更加容易——实际上非常简单;但这也使得搜索更深层次的元素变得非常昂贵,实现起来更加复杂 2) 我可以将每个元素直接插入到存储中,并根据需要使用子元素ID重建层次结构。这会将搜索速度提高到O(logn),但会重新创建关系数据库的所有层次结构困难 如果有办法: a) 创建一个索引或查询,该索引或查询可以快速遍历IndexeDB中的整个数据结构 或b)在IndexedDB中创建对对象的多个引用Javascript 如何在IndexedDB中表示层次结构?,javascript,hierarchy,hierarchical-data,indexeddb,hierarchical,Javascript,Hierarchy,Hierarchical Data,Indexeddb,Hierarchical,我有一个复杂多变的分层数据结构,我将从JavaScript本地存储它。根据我迄今为止的研究,IndexedDB似乎是我解决方案的最佳选择 我的结构由相似的元素组成,每个元素都有一个唯一的标识符和任意数量的子元素。可以有任意数量的根元素。元素可以是指向其他现有元素的符号链接。我计划在ID上创建一个objectStore,在此基础上我考虑了几个选项: 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);
};
我三年多前就知道了,但你找到解决办法了吗?我正在寻找一种存储和搜索HTML客户端的方法。