Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB是否适合加载随机记录?_Mongodb - Fatal编程技术网

MongoDB是否适合加载随机记录?

MongoDB是否适合加载随机记录?,mongodb,Mongodb,我们的应用程序使用较短的文本(100-1000个字符的字符串)存储记录。 它提供对给定查询文本的最相似记录的搜索。 我们使用Lucene为文本编制索引。 完整的记录存储在数据库中。 每个记录只属于一个域,现在有1000多个域。域的数量是无限的,但增长缓慢。 记录不断地添加到所有域中(不是统一添加) 我们使用Mysql作为数据库,其中每个域都有自己的表。 现在我们尝试迁移到MongoDB,因为它可以向外扩展。所有记录都存储在单个集合中,域是记录的一个属性。 ID仍然是从Lucene搜索中获得的。

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

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

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

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

请记住,如果您有一个写操作繁重的环境,您需要考虑扩展您的写操作,这就是您需要考虑的地方,然后关键的决策是选择正确的切分键。这是非常重要的,它是不可变的,所以请仔细考虑:)这里有一个关于选择关键点的好方法

还有一件事,关于Java驱动程序的使用,已经有了相当多的变化,其中包括一些变化


最后,您可以免费使用帮助监视您的实现。这是一个伟大的概述,但也为深入研究。

一个记录看起来像吗?如何导入数据?您的Linux服务器的规格是什么?记录包含文本和一些附加属性(时间戳,由创建者,…)。记录由用户连续添加-单次插入或批量插入。质量插入实际上是单个插入的序列。记录插入mongoDB,id为的文本插入Lucene索引。Linux Ubuntu 10.04 8GB RAM,2个CPU核(例如Amazon EC2大型实例)。不适合将整个记录存储到Lucene。此外,由于优化,来自一个域的几乎相同文本的记录在indexer中作为一个文档进行索引。好的,所以我不确定它是否是手动mongoimport-您的应用程序使用的是什么驱动程序?什么版本的Mongo?MongoDB非常适合这种类型的数据,不应该成为问题。什么是指性能低劣?您正在运行多少个mongod实例?我想你的工作装置适合RAM。请记住,如果您有一个写操作繁重的环境,您需要考虑扩展您的写操作,这就是您需要考虑切分()的地方,然后关键的决定是选择正确的切分键。谢谢。我们使用Java驱动程序Mongo2.0.5。索引和工作集应适合RAM。但工作集可能会快速变化,因此,我担心当数据库大小比RAM大小大很多倍时,虚拟内存中可能会出现许多页面错误。我认为分片是一种降低数据库大小与RAM大小比率的解决方案。我们只有一个粗略的比较,我们将测试速度更多。