Database “我是怎么想的?”;IndexedDB";?

Database “我是怎么想的?”;IndexedDB";?,database,html,indexeddb,Database,Html,Indexeddb,假设我的商店里有3个条目 { category: "Science", author: "Charles Darwin", content: "Lorem ipsum dolor..." } { category: "Science", author: "Albert Einstein", content: "sit amet..." } { category: "Philosophy", author: "Albert Einstein", conten

假设我的商店里有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..."
}
  • 是否可以获取所有条目
    “其中category='Science'”
    ,而无需在category上创建索引
  • 是否有可能获取所有条目,其中category='Science'和author='Albert Einstein'
  • 是否可以获取所有包含单词
    “Lorem”
    的条目是内容字段
  • 或者我应该为这些类型的查询使用不同的数据库吗
是否可以在不创建类别索引的情况下获取所有条目“where category='Science'”

是:只需遍历整个对象存储并手动查找具有该类别的对象。即使您编写了一些方便的函数来轻松实现这一点,但与使用索引相比,它仍然非常慢。所以在实践中,您可能希望在那里使用索引

是否有可能获得所有条目“where category=‘Science’和author=‘Albert Einstein’”

是的,您可以使用“复合索引”,如中所述。然而,最大的警告是IE10不支持它。如果这是应用程序的一个问题,那么您只能对单个字段进行索引。对于除一个索引字段之外的任何其他约束,您必须迭代所有结果并手动比较。在IndexedDB的基础上构建了各种库,目的是使这变得更容易,但我没有使用它们中的任何一个,因此我无法在这方面帮助您。不管怎样,如果不能使用复合索引,速度都会非常慢

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

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

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


如果您需要执行大量类似这样的查询(或者,上帝禁止,甚至更复杂的查询),并且您可以选择使用不同的数据库,那么请使用不同的数据库。但是你可能没有这个选择,这取决于你想要完成的任务。

我的目标是创建一个客户端脱机应用程序(供个人使用,因此浏览器兼容性不是问题),但是LocalStorage太简单了,IndexedDB在a**中很难使用,WebSQL似乎不是理想的解决方案。无论如何,非常感谢你的回答,它真的帮助我理解了IndexedDB的哲学。