用于过滤多个索引/字段的最佳 NoSQL

Far*_*vic 5 mongodb nosql orientdb elasticsearch aerospike

由于需要查询的数据大小以及在多个节点上按需扩展的能力,我正在考虑使用某种类型的 NoSQL 数据库。我一直在研究许多 NoSQL 产品,但还不能决定什么是最好的选择,它可以为我们的数据结构提供最佳的性能、可扩展性和功能。

数据结构模型是一个产品目录,其中每个文档/集都包含该单个产品的某些属性和描述。属性会因产品而异,这就是无模式产品最有效的原因。

样本结构会像

[
 {"name": "item name",
  "cost": 563.34,
  "category": "computer",
  "manufacturer: "sony",
.
.
.
 }
]
Run Code Online (Sandbox Code Playgroud)

所以要求是我需要能够过滤/查询记录集中许多不同的数据集字段/索引,我可以在同一查询中过滤和排除多个索引/字段。查询将主要是读取,并且不需要任何连接或关系类型的链接。

我研究过:Elastic Search、mongodb、OrientDB、Couchbase 和 Aerospike。

  • Elastic Search 似乎是一个显而易见的选择,但我想知道它的性能和稳定性?
  • Aerospike 似乎真的很快,因为它主要在内存中完成所有工作,但它的过滤和搜索功能似乎没有那么强大

您认为我的用例的最佳选择是什么?或者是否有任何其他推荐的数据库我应该研究。

我知道最好的方法是使用实​​际的现实生活用例测试性能,但我希望首先缩小范围。

谢谢

rmu*_*ler 6

这是流行问题“什么是最好的产品”的一个变体:)

一如既往:这取决于您的特定用例和目标。数据库产品(像所有产品一样)总是权衡的结果。因此,不存在提供最佳性能、可扩展性和功能的单一产品。但是,有许多非常适合您的用例的产品。

因为您的问题与产品数据有关,而我从事产品数据工作已超过 15 年,所以它会尝试回答您的问题。

  • 文档模型非常适合产品数据。因此,对于除简单查找以外的所有用例,我建议使用 Document Store
  • 如果您的用例涉及单个应用程序并且您使用的是 Java 平台。我建议使用嵌入式数据库。这使事情变得更简单并且具有很大的性能优势
  • 如果您需要分面搜索或其他高级产品搜索,我建议您使用 SOLR 或 Elastic Search
  • 如果你需要一个分布式系统,我推荐 Elastic Search over SOLR
  • 如果您需要基于评论或其他面向图形算法的产品推荐,我建议使用 OrientDB 或 ArangoDB(或 Neo4J,但在这种情况下,这将是我的第二选择)

我们在生产中使用或针对您描述的用例进行深入评估的产品是

  • SOLR 和 ES。这两款产品都经过精心设计。两者(也是ES)成熟稳定的产品
  • Neo4J。最成熟的图数据库。IMO 的一大优势是他们使用的很棒的查询语言。集成Lucene引擎。非常成熟和精心设计的产品。缺点是它不是文档图而是属性(键值)图。它也可能很贵
  • MongoDB。我们对文档存储的第一次体验。非常好的产品。大优势:优秀的文档,(迄今为止)最流行的 NoSQL 数据库
  • OrientDB 和 ArangoDB。两者都支持图形/文档范例。这是鲜为人知的产品,但非常强大。因为我们是一家基于 Java 的商店,所以我们更喜欢 OrientDB。OrientDB 集成了 Lucene 引擎(虽然实现非常简单)。另一方面,ArangoDB 有非常好的文档和非常智能高效的存储格式,最后 AQL 也非常好!
  • 性能:(用 11.43 mio 文章和 2.3 mio 产品测试)。所有产品都非常快,尤其是在这个用例中的 SOLR 和 ES。嵌入式OrientDB 在导入和简单查询方面也非常快速。对于分面搜索,只有搜索服务器才能提供真正快速的性能!
  • 底线:我会去图形/文档存储和/或搜索服务器(SOLR 或 ES)。因为你提到了“过滤”(我假设分面搜索)。搜索服务器显然是首选