过滤多个 indexes/fields 的最佳 NoSQL
Best NoSQL for filtering on multiple indexes/fields
由于需要查询的数据的大小以及在多个节点上根据需要扩展的能力,我正在考虑使用某种类型的 NoSQL 数据库。
我一直在研究大量的 NoSQL 产品,但还不能决定什么是可以为我们的数据结构提供最佳性能、可扩展性和特性的最佳选择。
数据结构模型属于产品目录,其中每个 document/set 都包含该单个产品的某些属性和描述。属性会因产品而异,这就是无模式产品最有效的原因。
示例结构类似于
[
{"name": "item name",
"cost": 563.34,
"category": "computer",
"manufacturer: "sony",
.
.
.
}
]
所以要求是我需要能够 filter/query 在记录集中的许多不同数据集 fields/indexes 上,我可以在其中过滤并排除多个 indexes/fields相同的查询。查询主要是读取,不需要任何连接或关系类型的链接。
我研究了:Elastic Search、mongodb、OrientDB、Couchbase 和 Aerospike。
- Elastic Search 似乎是一个显而易见的选择,但我想知道它的性能和稳定性?
- Aerospike 似乎真的很快,因为它主要在内存中完成,但它的过滤和搜索功能似乎并不那么强大
您认为我的用例的最佳选择是什么?或者是否还有其他我应该研究的推荐数据库。
我知道最好的方法是用真实的实际用例来测试性能,但我希望先缩小一点范围。
谢谢
OrientDB supports 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 作为引擎的所有功能来创建全文索引。
Aerospike 是键值存储,而不是文档数据库。文档数据库可以更好地执行此类字段级索引和更深入的嵌套对象搜索。当前 Aerospike 中的二级索引(版本 3.4.x)适用于字符串和整数 'bins'(类似于文档字段或 SQL table 列的概念) .
也就是说,在本季度完成的工作中,Aerospike 的列表和地图复杂类型正在使用这些功能进行扩充。请留意即将发布的版本中的这些更改。您将能够索引和查询列表和地图类型的容器。
这是热门问题 "what is the best product" :)
的变体
一如既往:这取决于您的具体用例和目标。数据库产品(与所有产品一样)始终是权衡取舍的结果。因此,不存在提供 最佳性能、可扩展性和功能 的单一产品。但是,有许多非常好的 产品适合您的用例。
因为你的问题是关于产品数据的,而我在产品数据方面的工作已经超过 15 年,所以它会尽量回答你的问题。
- 文档模型非常适合产品数据。因此,对于除了简单查找之外的所有用例,我会推荐文档存储
- 如果您的用例涉及单个应用程序 和 您正在使用 Java 平台。我建议使用嵌入式数据库。这使事情变得更简单,并且具有 很大的 性能优势
- 如果您需要分面搜索或其他高级产品搜索,我建议您使用 SOLR 或 Elastic Search
- 如果您需要分布式系统,我建议使用 Elastic Search 而不是 SOLR
- 如果您需要基于评论或其他面向图形算法的产品推荐,我建议使用 OrientDB 或 ArangoDB(或 Neo4J,但在这种情况下,这是我的第二选择)
我们在生产中使用或针对您描述的用例进行深入评估的产品是
- SOLR 和 ES。两款设计精良的产品。两者(也是ES)成熟稳定的产品
- Neo4J。最成熟的图数据库。 IMO 的一大优势是他们使用的令人敬畏的 query language。集成 Lucene 引擎。非常成熟且设计精良的产品。缺点是它不是文档图,而是 属性(键值)图。它也可能很昂贵
- MongoDB。我们对文档存储的第一次体验。很好的产品。一大优势:出色的文档,(到目前为止)最流行的 NoSQL 数据库
- OrientDB 和 ArangoDB。两者都支持 Graph/Document 范式。这是鲜为人知的产品,但功能非常强大。因为我们是一家基于 Java 的商店,所以我们更喜欢 OrientDB。 OrientDB 集成了 Lucene 引擎(虽然实现起来很简单)。另一方面,ArangoDB 有很好的文档和非常智能和高效的存储格式,最后 AQL 也非常好!
- 性能:(使用 11.43 mio 文章和 2.3 mio 产品进行测试)。所有产品都非常快,尤其是在这个用例中的 SOLR 和 ES。 嵌入式 OrientDB 在导入和简单查询方面也非常快速。对于分面搜索,只有搜索服务器提供真正快速的性能!
- 底线:我会选择 Graph/Document 商店 and/or 搜索服务器(SOLR 或 ES)。因为您提到了 "filtering" (我假设是分面搜索)。搜索服务器是显而易见的首选
由于需要查询的数据的大小以及在多个节点上根据需要扩展的能力,我正在考虑使用某种类型的 NoSQL 数据库。 我一直在研究大量的 NoSQL 产品,但还不能决定什么是可以为我们的数据结构提供最佳性能、可扩展性和特性的最佳选择。
数据结构模型属于产品目录,其中每个 document/set 都包含该单个产品的某些属性和描述。属性会因产品而异,这就是无模式产品最有效的原因。
示例结构类似于
[
{"name": "item name",
"cost": 563.34,
"category": "computer",
"manufacturer: "sony",
.
.
.
}
]
所以要求是我需要能够 filter/query 在记录集中的许多不同数据集 fields/indexes 上,我可以在其中过滤并排除多个 indexes/fields相同的查询。查询主要是读取,不需要任何连接或关系类型的链接。
我研究了:Elastic Search、mongodb、OrientDB、Couchbase 和 Aerospike。
- Elastic Search 似乎是一个显而易见的选择,但我想知道它的性能和稳定性?
- Aerospike 似乎真的很快,因为它主要在内存中完成,但它的过滤和搜索功能似乎并不那么强大
您认为我的用例的最佳选择是什么?或者是否还有其他我应该研究的推荐数据库。
我知道最好的方法是用真实的实际用例来测试性能,但我希望先缩小一点范围。
谢谢
OrientDB supports 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 作为引擎的所有功能来创建全文索引。
Aerospike 是键值存储,而不是文档数据库。文档数据库可以更好地执行此类字段级索引和更深入的嵌套对象搜索。当前 Aerospike 中的二级索引(版本 3.4.x)适用于字符串和整数 'bins'(类似于文档字段或 SQL table 列的概念) .
也就是说,在本季度完成的工作中,Aerospike 的列表和地图复杂类型正在使用这些功能进行扩充。请留意即将发布的版本中的这些更改。您将能够索引和查询列表和地图类型的容器。
这是热门问题 "what is the best product" :)
的变体一如既往:这取决于您的具体用例和目标。数据库产品(与所有产品一样)始终是权衡取舍的结果。因此,不存在提供 最佳性能、可扩展性和功能 的单一产品。但是,有许多非常好的 产品适合您的用例。
因为你的问题是关于产品数据的,而我在产品数据方面的工作已经超过 15 年,所以它会尽量回答你的问题。
- 文档模型非常适合产品数据。因此,对于除了简单查找之外的所有用例,我会推荐文档存储
- 如果您的用例涉及单个应用程序 和 您正在使用 Java 平台。我建议使用嵌入式数据库。这使事情变得更简单,并且具有 很大的 性能优势
- 如果您需要分面搜索或其他高级产品搜索,我建议您使用 SOLR 或 Elastic Search
- 如果您需要分布式系统,我建议使用 Elastic Search 而不是 SOLR
- 如果您需要基于评论或其他面向图形算法的产品推荐,我建议使用 OrientDB 或 ArangoDB(或 Neo4J,但在这种情况下,这是我的第二选择)
我们在生产中使用或针对您描述的用例进行深入评估的产品是
- SOLR 和 ES。两款设计精良的产品。两者(也是ES)成熟稳定的产品
- Neo4J。最成熟的图数据库。 IMO 的一大优势是他们使用的令人敬畏的 query language。集成 Lucene 引擎。非常成熟且设计精良的产品。缺点是它不是文档图,而是 属性(键值)图。它也可能很昂贵
- MongoDB。我们对文档存储的第一次体验。很好的产品。一大优势:出色的文档,(到目前为止)最流行的 NoSQL 数据库
- OrientDB 和 ArangoDB。两者都支持 Graph/Document 范式。这是鲜为人知的产品,但功能非常强大。因为我们是一家基于 Java 的商店,所以我们更喜欢 OrientDB。 OrientDB 集成了 Lucene 引擎(虽然实现起来很简单)。另一方面,ArangoDB 有很好的文档和非常智能和高效的存储格式,最后 AQL 也非常好!
- 性能:(使用 11.43 mio 文章和 2.3 mio 产品进行测试)。所有产品都非常快,尤其是在这个用例中的 SOLR 和 ES。 嵌入式 OrientDB 在导入和简单查询方面也非常快速。对于分面搜索,只有搜索服务器提供真正快速的性能!
- 底线:我会选择 Graph/Document 商店 and/or 搜索服务器(SOLR 或 ES)。因为您提到了 "filtering" (我假设是分面搜索)。搜索服务器是显而易见的首选