由于需要查询的数据大小以及在多个节点上根据需要进行扩展的能力,我正在考虑使用某种类型的NoSQL数据库。 我一直在研究许多NoSQL产品,但还不能决定什么是最好的选择,它将为我们的数据结构提供最佳性能,可扩展性和功能。
数据结构模型是产品目录,其中每个文档/集包含该单个产品的某些属性和描述。属性因产品而异,这就是为什么无架构产品能够发挥最佳性能的原因。
样本结构就像
[
{"name": "item name",
"cost": 563.34,
"category": "computer",
"manufacturer: "sony",
.
.
.
}
]
因此要求我需要能够对记录集中的许多不同数据集字段/索引进行过滤/查询,在那里我可以过滤并排除同一查询中的多个索引/字段。查询将主要是读取,并且不需要任何连接或关系类型的链接。
我研究过:Elastic Search,mongodb,OrientDB,Couchbase和Aerospike。
您认为我的用例最佳选择是什么?或者如果有任何其他推荐的数据库我应该研究。
我知道最好的方法是使用实际的真实用例来测试性能,但我希望首先将其缩小一点。
谢谢
答案 0 :(得分:3)
这是流行问题“什么是最好的产品”的变体:)
一如既往:这取决于您的具体用例和目标。数据库产品(如所有产品)始终是权衡取舍的结果。因此,不存在提供最佳性能,可伸缩性和功能的单一产品。但是,您的用例中有许多非常好的产品。
因为您的问题与产品数据有关,而且我使用的是产品数据超过15年,它会尝试回答您的问题。
我们在生产中使用的产品或针对您描述的用例进行深入评估的产品
答案 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的列表和地图复杂类型正在增强这些功能。请留意即将发布的版本中的这些更改。您将能够在类型列表和地图的箱柜上进行索引和查询。