【问题标题】:Which NoSQL DB is advisable for multi-field search [closed]建议使用哪个 NoSQL DB 进行多字段搜索 [关闭]
【发布时间】:2020-07-26 10:37:42
【问题描述】:

假设我们有一个可以包含 50-60 个字段的文档。例如:

{  
  "priceCurrency": "USD",
  "price": "119.99",
  "priceValidUntil": "2020-11-05",
  "brand": "Acme",
  "logo": "http://www.example.com/logo.png",
  "name": "WidgetPress",
  "category": "Widgets",
  "image": "http://www.example.com/image.jpg",
  "description": "This is an excellent widget with 21 features and 4 colors."
}

现在,在这 60 个字段中,我们可以查询 20-25 个字段。所以这意味着我们需要所有这些字段的索引。

在这些字段上形成的查询可以有相等和不等运算符。查询也可以有 AND/OR/NOT 运算符。

将没有全文搜索要求。

对于这种情况,首选 ElasticSearch 还是 MongoDB?

我在一篇文章中读到,在 mongo 中支持超过 5 个索引可能会使写入变慢。所以在这种情况下,应该首选 ES。

我们的数据大约为 200 GB。 RPS 将是 20,000。`

编辑 Qs - 只是想知道 ScyllaDB 对这个用例有意义吗?

【问题讨论】:

  • 我不认为这个说法是真的more 5 than indexes in mongo could make writes slow。话虽如此,我认为您可以在mongoDB 和Elasticsearch 中搜索特定字段。但是Elasticsearch 提供了更多功能,例如hot-warm 架构、轻松扩展等。查看每个数据库(我不应该将弹性称为数据库)提供的功能,看看适合您的预算等。
  • 使用代码块,sn-ps用于css/html/javascript,见编辑帮助。

标签: mongodb elasticsearch database-design scylla


【解决方案1】:

虽然不完全是您问题的答案,this 应该让您了解如何根据功能和非功能需求选择系统。

根据您的主要要求,是的,您不需要对未进行任何搜索的数据进行索引,使用 index option,您可以禁用特定字段的索引(注意默认为 true)。这将减少您的倒排索引大小并提高性能。

第二部分是使用过滤上下文,因为你没有全文搜索的要求,而Elasticsearch在过滤​​上下文中缓存数据,这使得它非常快,不需要引入像Redis这样的外部缓存系统,等等

更多关于过滤器缓存的信息可以在https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html#filter-context找到 官方文档,并引用同一文档:

常用的过滤器会被 Elasticsearch 自动缓存, 以加快性能。

还有,

在过滤器上下文中,查询子句回答“这样做 文档匹配这个查询子句?”答案很简单,是或 否 — 不计算分数。过滤上下文主要用于 过滤结构化数据,例如

此时间戳是否属于 2015 到 2016 年的范围?是状态 字段设置为“已发布”

这似乎是您的确切要求。

【讨论】:

  • 感谢您的精彩回答!!您对 mongo 中过多的索引有何看法?
  • @rajyavardhan,我没有使用过 mongo,但使用过 dynamoDB 很多次,这又是一种基于文档的 NoSQL,并且作为基于键的检索的最佳 NoSQL,请参考这个官方文档 docs.aws.amazon.com/amazondynamodb/latest/developerguide/…这清楚地表明Keep the number of indexes to a minimum. Don't create secondary indexes on attributes that you don't query often. Indexes that are seldom used contribute to increased storage and I/O costs without improving application performance.,我相信在mongo的情况下它会是一样的。
猜你喜欢
  • 1970-01-01
  • 2017-06-28
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多