数百万行的MongoDB数量非常慢

时间:2016-03-24 09:22:04

标签: c# mongodb performance mongodb-query

将MongoDB 2.4与mongoDB .NET驱动程序3.2一起使用

我有一个拥有3000万条目的集合。

var visits = new MongoHelper<CampaignVisitLog>()
         .GetCollection().AsQueryable().Count(t => t.campaignId == campaignId);

campaignId已编入索引。 根据很多条目,campaignId需要30秒到几分钟才能返回计数。

计算此系列的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

  

我有一个拥有3000万条目的集合。

无论是优化整个查询,您都不会认为您将获得数百万项快速反应。

如果您正在执行其他查询以获取统计信息,可能是时候安排此计算并使用某些异步服务(即 Windows服务 Windows计划任务 Quartz.NET ...),并以异步方式获得结果。

您可以使用MongoDB存储计算服务结果,也可以选择更具体的解决方案:服务总线(即 RabbitMQ Azure Service Bus < / em>, NServiceBus ...)。

答案 1 :(得分:1)

MongoDB C#驱动程序病了。

LINQ查询始终转换为聚合框架管道。

var pipeline = [ { "$group" : { "_id" : 1, "__result" : { "$sum" : 1 } } }]
db.test.aggregate(pipeline)

这会导致服务器上的完整集合扫描,因为LINQ查询未指定任何约束。

答案 2 :(得分:0)

确保您有足够的内存来存储ram中的索引。

https://docs.mongodb.org/manual/tutorial/ensure-indexes-fit-ram/