【问题标题】:MongoDB - Search Engine with many permutationMongoDB - 具有多种排列的搜索引擎
【发布时间】:2012-08-23 18:39:05
【问题描述】:

我们有一个 mongo 集合,可以在许多领域进行搜索和排序。举个例子(由于保密原因我不能放真正的收藏),我们拿:

MathProblem
{
    Creator : String,
    Difficulty : integer (from 0 to 4),
    Categorie : integer (from 0 to 40),
    NbOfQuestion : integer (less than 20),
    Likes : integer,
    Dislikes : integer,
    Succeeded : integer,
    Failures : integer
}

我们可以搜索 Creator,Difficulty,Categorie,NbOfQuestion。并按喜欢、不喜欢、成功和失败进行排序。

例如:

  • 给我难度 3 的问题,用类别 20 对它们进行排序 按 # 个赞。
  • 给我 5 个问题,按失败排序。
  • 请给我难度为 1、类别 10、2 的问题,由 Einstein 创建。
  • 给我所有按成功排序的问题。

等等...你得到图片所有的排列都是可能的,我们可以选择在一个字段上排序。

这里的问题是我们有数百万条记录。索引花费我们至少 30 gig。另外,因为我们有这么多的索引,它压低了这个集合的写入速度。虽然它正在破坏写作,但它正在锁定阅读。所以我们有很多读,写的可能少一点,但仍然很多。

我搜索“搜索引擎解决方案”,但我只能在“全文搜索”上找到东西,这不是我的情况。

我们还尝试将难度、Categorie 和 NbOfQuestion 合并到一个数组中(通过将值乘以 10 因子以保持它们分开)以仅在该数组上建立索引并节省一些空间。

我们将不胜感激任何事后诸葛亮!

谢谢,

查尔斯

【问题讨论】:

  • 尽管 Solr / Elasticsearch(均由 Lucene 支持)作为全文搜索引擎(它们是)进行营销,但它们非常适合您的用例。我广泛使用 ES(并且使用 SOLR 已经有几年了)用于复杂的搜索页面,包括分面、排序等。
  • 我确实阅读了一些关于 ElasticSearch 的内容,但没有看到关于它在大量索引下的表现的性能/内存分析。
  • 我的单元格中的快速一个:搜索lucene索引性能应该有很多信息

标签: mongodb search-engine database-indexes


【解决方案1】:

查尔斯,

您的问题没有简单的解决方案。目前最好的解决方案可能是使用 MongoDB 的分片功能向外扩展。 http://www.mongodb.org/display/DOCS/Sharding+Introduction

这里的目的是将您的工作集拆分到多台机器上,以减少一次写入会“粉碎”的数据量。此外,我可以建议升级到至少 MongoDB v 2.0.7,因为 2.X 分支中有许多新功能(例如 yield-on-long-operation 和 yield-on-page-fault),旨在减少写锁对系统的影响。更多关于 MongoDB 并发的信息可以在http://www.mongodb.org/display/DOCS/How+does+concurrency+work

干杯,

大卫

【讨论】:

  • 是的,分片是一种解决方案,一种原始的电源解决方案。我不是 DBA,所以我想知道我是否从正确的角度看待问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多