我使用compose在Docker容器中运行了MongoDB:
mongodb:
image: mongo:4
ports:
- "27017:27017"
restart: always
command: --wiredTigerCacheSizeGB=10
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGODB_USER}
MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_USER_PASS}
volumes:
- ${MONGODB_DATADIR}:/data/db
MONGODB_DATADIR
位于主机目录,它是一个普通的硬盘驱动器(不是SSD)。在我的数据库中,我有一些文档的集合。有一些统计信息:
{
"ns" : "domains.domains",
"size" : 5679596048.0,
"count" : 38396115,
"avgObjSize" : 147,
"storageSize" : 1884860416.0,
"capped" : false,
"wiredTiger" : {
...
},
"nindexes" : 7,
"totalIndexSize" : 2701312000.0,
"indexSizes" : {
"_id_" : 387567616,
"URL_1" : 1452449792.0,
"checkedBySEO_1" : 187138048,
"checkedByUclassify_1" : 184221696,
"is_alive_1" : 184528896,
"SEO_in_batch_1" : 176033792,
"uclassify_in_batch_1" : 129372160
},
"ok" : 1.0
}
如您所见,我的收藏夹中有几个索引。我要做的就是通过使用索引的简单查询对文档进行计数。因此:db.getCollection('domains').find({"checkedByUclassify":false}).count();
。而且它需要10秒钟以上的时间。 MongoDB使用一个处理器的百分比为100%,并且不使用它可以使用的内存:
考虑到所有索引的总和约为2.7Gb,我不明白为什么MongoDB不能仅在需要时将其上传到RAM。在这种情况下是否属于正常行为,是否有任何方法可以提高性能?谢谢。