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

时间:2015-02-04 16:56:01

标签: mongodb elasticsearch orientdb aerospike nosql

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

数据结构模型是产品目录,其中每个文档/集包含该单个产品的某些属性和描述。属性因产品而异,这就是为什么无架构产品能够发挥最佳性能的原因。

样本结构就像

[
 {"name": "item name",
  "cost": 563.34,
  "category": "computer",
  "manufacturer: "sony",
.
.
.
 }
]

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

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

  • 弹性搜索似乎是一个明显的选择,但我想知道它的性能和它的稳定性?
  • Aerospike似乎真的很快,因为它主要在内存中完成,但它的过滤和搜索能力似乎没那么强大

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

我知道最好的方法是使用实​​际的真实用例来测试性能,但我希望首先将其缩小一点。

谢谢

3 个答案:

答案 0 :(得分:3)

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

一如既往:这取决于您的具体用例和目标。数据库产品(如所有产品)始终是权衡取舍的结果。因此,不存在提供最佳性能,可伸缩性和功能的单一产品。但是,您的用例中有许多非常好的产品。

因为您的问题与产品数据有关,而且我使用的是产品数据超过15年,它会尝试回答您的问题。

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

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

  • SOLR和ES。这两款产品都非常精良。两种(也是ES)成熟稳定的产品
  • Neo4j的。最成熟的图形数据库。最大优势IMO是他们使用的令人敬畏的query language。集成Lucene引擎。非常成熟和精心设计的产品。缺点是它不是文档图形而是属性(键值)图形。它也可能很贵
  • MongoDB的。我们对Document store的第一次体验。非常好的产品。大优势:优秀的文档,(到目前为止)最流行的NoSQL数据库
  • OrientDB和ArangoDB。两者都支持图形/文档范例。这是不太知名的产品,但非常强大。因为我们是基于Java的商店,所以我们倾向于OrientDB。 OrientDB集成了Lucene引擎(尽管实现非常简单)。另一方面,ArangoDB具有非常好的文档和非常智能和高效的存储格式,最后AQL也非常好!
  • 表现:(使用11.43 mio文章和2.3 mio产品测试)。所有产品都非常快,特别是在这个用例中的SOLR和ES。 嵌入式 OrientDB对于导入和简单查询也很快。对于分面搜索,只有搜索服务器提供真正的快速性能!
  • 底线:我会选择图形/文档存储和/或搜索服务器(SOLR或ES)。因为你提到了“过滤”(我假设分面搜索)。 Search Server是显而易见的首选

答案 1 :(得分:0)

OrientDB支持composite indexes on multiple fields。例如:

CREATE INDEX Product_idx ON Product (name, category, manufacturer) unique

SELECT FROM INDEX:Product_idx WHERE key = ["Donald Knuth", "computer"]

您还可以使用Lucene的所有功能作为引擎来创建FULL-TEXT索引。

答案 2 :(得分:0)

Aerospike是一个键值存储,而不是文档数据库。文档数据库可以更好地进行这种字段级索引并更深入地搜索嵌套对象。 Aerospike中的二级索引(版本3.4.x)适用于字符串和整数'bins'(类似于文档字段或SQL表列的概念)。

也就是说,在本季度开展的工作中,Aerospike的列表和地图复杂类型正在增强这些功能。请留意即将发布的版本中的这些更改。您将能够在类型列表和地图的箱柜上进行索引和查询。