我如何看待“IndexedDB”?

时间:2013-07-18 20:45:15

标签: database html5 indexeddb

假设我的商店里有3个条目

{
  category: "Science",
  author: "Charles Darwin",
  content: "Lorem ipsum dolor..."
}

{
  category: "Science",
  author: "Albert Einstein",
  content: "sit amet..."
}

{
  category: "Philosophy",
  author: "Albert Einstein",
  content: "consectetur adipisicing elit..."
}
  • 是否可以获取所有条目"where category = 'Science'",而无需在类别上创建索引?
  • 是否可以获取所有条目"where category = 'Science' AND author = 'Albert Einstein'"
  • 是否可以获取包含单词"Lorem"的所有条目是内容字段?
  • 或者我应该为这些类型的查询使用不同的数据库

1 个答案:

答案 0 :(得分:1)

  

是否有可能获得所有条目“where category ='Science'”,而无需在类别上创建索引?

是:只需遍历整个对象库并手动查找具有该类别的对象。即使您编写了一些便利功能来轻松完成此操作,与使用索引相比,它仍然会非常慢。所以在实践中,你会想要在那里使用索引。

  

是否有可能获得所有条目“where category ='Science'AND author ='Albert Einstein'?”

是的,您可以使用this question here中描述的“复合索引”。然而,最大的警告是它在IE10中不受支持。如果这是您的应用程序的问题,那么您只能索引单个字段。对于除一个索引字段之外的任何其他约束,您必须遍历所有结果并手动比较。在IndexedDB之上构建了各种各样的库,旨在使这更容易,但我没有使用它们,所以我无法帮助你。无论哪种方式,如果你不能使用复合索引,那将会非常缓慢。

  

是否可以获取包含单词“Lorem”的所有条目是内容字段?

您可能会注意到此处的模式...是:只需遍历整个对象库并在内容字段中手动查找带有“Lorem”的对象。全文搜索没有内置特殊支持。从理论上讲,可以想象一个构建在IndexedDB之上的全文搜索API(只是跟踪所有单词),但我不确定是否有人已经构建了它(如果他们已经构建它,我不知道如何表现将是)。

  

或者我应该为这些类型的查询使用不同的数据库

如果你需要做很多像这样的查询(或者,上帝禁止,甚至更复杂的查询),你可以选择使用不同的数据库,然后使用不同的数据库。但是你可能没有这个选择,这取决于你想要完成的任务。