开发者社区> 问答> 正文

MongoDb Count 对一个超量数据的集合按条件统计,求解决方案

MongoDb中使用 Count 对一个超过1000w条数据的集合进行查询(已建立索引)
按指定条件返回包含在集合中的文档总数(需求是 Count中要包含条件,不能直接db.collection.count())
但是整个操作十分慢,甚至造成服务器死机;
MongoDb 在服务器上只存在一个实例,没有进行分布;
执行的脚本如下(集合中value == 0 的文档数大约在3,000,000左右):
`dbName: MyDb
CollectionName: MyCollection
CollectionCount: 13,630,100
Shell:

db.MyCollection.find({"value":0}).count();    

db.MyCollection.count({"value":0});    `

结果: 要等待很漫长的时间才会得到,服务器的内存几乎耗尽;若不包含条件的统计(db.MyCollection.count())则很快
C#>
//驱动使用Samus
2
结果: 出现超时,无法通讯,若不包含条件的统计(collection.count())则很快;求解决方案;

展开
收起
落地花开啦 2016-02-19 11:17:41 6893 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    一般来说,id应该是一个主键,同时,要针对id来建立索引。
    这样的话,在Query执行的时候,会从索引中获得性能提高。
    如果你的文档里面有300W条相同的记录,这样的话,如果在没有索引的时候,性能相当不好。
    而且,一般的实际场景中,不应该有300w条同样主键的记录。不然就没有索引的意义了。
    当然,如果真的有300w条id=1,300w条id=2,300w条id=3,300w条id=4的记录。
    最好的做法是将这些记录放入Shard里面,不同的Shard存放不能ID的记录。

    2019-07-17 18:44:28
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
开源数据库 MongoDB 专场 MongoDB疑难杂症分析及优化 立即下载
阿里云MongoDB云服务构建 立即下载
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的 立即下载