mongo在20米的记录上很慢。如何优化?

时间:2014-04-23 13:00:29

标签: mongodb

我读了很多关于mongodb的好东西,并决定在我的组织中实现它。我的飞行员是将一个sql server视图移动到mongodb。记录数量为20亿。我只是通过我的程序复制数据(mssql-> mongodb),我编写了我的UI,用最多7个可以使用或不使用的过滤器来查询mongodb。我没有添加索引,也没有进行任何优化活动。 当我使用2个过滤器(日期范围)执行我的查询时,它需要超过5分钟才能返回与查询对应的100个文档。第一分钟服务器的内存是正常的,但随后它会达到100%利用率,即使查询完成后仍然如此。你能解释一下这种行为吗?接下来我该怎么办? 据我所知,只能为一列应用索引,并且由于我的查询包含7个字段的动态过滤器,因此创建一些索引会很有效。 对于这样的任务,mongodb通常比mssql更快,或者我选择解决任务的方法是错误的

2 个答案:

答案 0 :(得分:0)

您应该按照@xlembouras的建议查看索引,但也要查看分片: http://docs.mongodb.org/manual/sharding/

如果您的数据使用正确的分片键分布在节点上,那么您会注意到主要的性能提升。

如果您要将数据转储到单个节点而不是使用索引或分片进行备份,那么您将不会看到任何重大的性能提升w.r.t MYSQL。

答案 1 :(得分:0)

首先,您需要构建索引。查看您的查询模式以确定您需要构建的索引。您的查询很慢,因为它可能会扫描所有20M文档以查找结果。不好。

其次,文档的数量与数据集大小无关,更具体地说,与工作集的大小无关。您希望确保您的工作集+索引适合RAM。如果他们没有从磁盘上找到mongo扫描,这很慢。

第三,您可以查看分片(仅在查看上面的选项之后)。重要的是要注意,您不应该总是对您的集合进行分片,在某些情况下,根据您的要求,分片可能会令人望而却步。分片会增加您的架构的复杂性。您需要彻底阅读文档,以了解分片是否适合您的环境。