我有一个复杂的,可变的分层数据结构,我将从JavaScript本地存储。根据我迄今为止的研究,看起来IndexedDB是我解决方案的最佳选择。
我的结构由类似的元素组成,每个元素都有唯一的标识符和任意数量的子元素。可以有任意数量的根元素。元素可以是指向其他现有元素的符号链接。我计划在ID上创建一个objectStore,我从那里考虑了几个选项:
1)我可以直接插入根元素。这使得分层操作(修剪,克隆,移植)和备份到服务器变得更加容易 - 实际上是微不足道的;但也使搜索更加昂贵的更深层元素更加复杂。
2)我可以将每个元素直接插入到商店中,并使用子元素ID根据需要重建层次结构。这样可以加速搜索O(log n),但重新创建关系数据库的所有分层难度。
如果有办法: a)创建一个索引或查询,快速遍历IndexeDB中的整个数据结构 或b)在IndexedDB中创建对象的多个引用
它极大地简化了问题,除此之外,我不确定如何最好地解决这个问题。
答案 0 :(得分:0)
在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);
};