我最近发现(遗憾的是)HTML5不再支持WebSQL,而且IndexedDB将替代它.
我想知道是否有任何方法可以查询或搜索IndexedDB的条目,方式与我如何使用SQL搜索满足多个条件的条目类似.
我已经看到我可以使用KeyRange的一个条件搜索IndexedDB.但是,我似乎无法找到任何方法来搜索两列或更多列数据,而无需从数据库中获取所有数据并使用for循环执行此操作.
我知道这是一个新功能,几乎没有在浏览器中实现,但我有一个项目,我正在开始,我正在研究我可以做的不同方式.
谢谢!
说一张桌子有,名字,身份证,年龄,性别,教育等.ID是关键,表格也是姓名,年龄和性别的索引.我需要所有25岁以上的男学生按名字排序.
这在mySQL中很简单:
SELECT * FROM table WHERE age > 25 AND sex = "M" ORDER BY name
Run Code Online (Sandbox Code Playgroud)
IndexDB允许创建索引并根据该索引对查询进行排序.但它不允许多次查询,如年龄和性别.我发现了一个名为queryIndexedDB(https://github.com/philikon/queryIndexedDB)的小型库,它允许复合查询,但不提供排序结果.
那么有没有办法在使用IndexedDB时进行排序复合查询?
我有一个10MB的以下结构的JSON文件(10k条目):
{
entry_1: {
description: "...",
offset: "...",
value: "...",
fields: {
field_1: {
offset: "...",
description: "...",
},
field_2: {
offset: "...",
description: "...",
}
}
},
entry_2:
...
...
...
Run Code Online (Sandbox Code Playgroud)
}
我想实现一个自动完成输入字段,该字段将在搜索多个属性时尽快从此文件中获取建议.例如,查找包含某些子字符串的所有条目名称,字段名称和描述.
方法1:
我试图将嵌套展平成一个字符串数组:
"entry_1|descrption|offset|value|field1|offset|description",
"entry_1|descrption|offset|value|field2|offset|description",
"entry2|..."
Run Code Online (Sandbox Code Playgroud)
并执行不区分大小写的部分字符串匹配,查询耗时约900ms.
方法2
我尝试了基于Xpath的JSON查询(使用defiant.js).
var snapshot = Defiant.getSnapshot(DATA);
found = JSON.search(snapshot, '//*[contains(fields, "substring")]');
Run Code Online (Sandbox Code Playgroud)
查询耗时约600毫秒(仅适用于单个属性fields).
是否有其他选项可以让我达到100毫秒?我控制文件格式,所以我可以把它变成XML或任何其他格式,唯一的要求是速度.