6

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

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

样本结构就像

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

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

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

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

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

我知道最好的方法是用实际的用例测试性能,但我希望先把它缩小一点。

谢谢

4

3 回答 3

6

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

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

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

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

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

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

OrientDB支持多个字段的复合索引。例子:

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

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

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

于 2015-02-04T22:49:05.103 回答
0

Aerospike 是键值对存储,而不是文档数据库。文档数据库会更好地执行此类字段级索引和更深入地搜索嵌套对象。Aerospike 当前(版本 3.4.x)中的二级索引适用于字符串和整数“bins”(类似于文档字段或 SQL 表列的概念)。

也就是说,Aerospike 的列表和地图复杂类型正在通过这些功能得到增强,本季度正在开展工作。请留意即将发布的版本中的这些变化。您将能够对 list 和 map 类型的 bin 进行索引和查询。


于 2015-02-05T00:13:26.933 回答