0

我们的应用程序存储具有较短文本(100-1000 个字符的字符串)的记录。它提供对给定查询文本最相似记录的搜索。我们使用 Lucene 来索引文本。完整的记录存储在数据库中。每条记录只属于一个域,现在有 1000 多个域。域名数量不受限制,但增长缓慢。记录不断地添加到所有域中(不统一)。

我们使用 Mysql 作为数据库,每个域都有自己的表。现在由于横向扩展,我们尝试迁移到 MongoDB。所有记录都存储在单个集合中,域是记录的属性。ID 仍然是从 Lucene 搜索中获得的。但是我们观察到与使用 Mysql 的解决方案相比,从 MongDB 加载记录的性能较差。我怀疑MongoDB的“内存映射存储引擎”是原因。每次搜索都可以返回“随机记录”。通常会从一个域连续进行更多搜索。来自一个域的记录不会存储在集合中的一个位置。这可能会导致许多页面错误。

我的解释对吗?MongoDB 适合这种记录加载吗?什么可以提高性能?MongoDB 服务器和应用程序在 Linux 上运行。非常感谢。

4

1 回答 1

1

因此,重要的是您的工作集(数据和索引)适合 RAM。有大量关于此的帖子/博客,所以只需 google “MongoDB 工作集”,但如您所知,从 RAM 访问而不是分页到磁盘更快。

请记住,如果您有一个写入繁重的环境,您需要考虑扩展您的写入,这就是您需要查看分片的地方,然后关键决定是选择正确的分片键。这非常重要,而且它是不可变的,所以要多考虑:) 这是一个关于选择密钥的好文档。

另一件事,关于 Java 驱动程序,使用2.8 版本,已经有很多变化,包括一些与分片相关的变化。

最后,您可以免费使用Mongo 监控服务来帮助监控您的实施。它非常适合概览,也适合深入研究。

于 2012-06-29T10:06:00.503 回答