MongoDB很快,但只有当你的工作集或索引适合RAM时.因此,如果我的服务器有16G的RAM,这是否意味着我所有收藏的大小需要小于或等于16G?如何说"好吧这是我的工作集,其余的可以"存档?"
假设我启动了一个mongo数据库服务器:
mongo --dbpath=/some/path --port=12345 --storageEngine wiredTiger
然后我运行相同的查询10次(忽略第一个,以便它们都在暖缓存上),如下所示:
mongo query1.js
我得到的时间是(通过time
mongodb记录器验证):
8137ms
8145ms
8193ms
8091ms
8152ms
8110ms
8182ms
8142ms
8133ms
8098ms
很棒 - 相当一致.所有都在彼此约100毫秒内,这是有道理的.
然后,我以下列任何一种方式关闭服务器:
pkill mongod
mongod --dbpath=/some/path --shutdown
mongo shutdown.js
其中shutdown.js
包括:
db.getSiblingDB('admin').shutdownServer();
然后我使用完全相同的命令重新启动它,我得到以下时间:
8531ms
8492ms
8613ms
8555ms
8538ms
8512ms
8551ms
8511ms
8608ms
8522ms
同样,它们始终在~100ms内,但它们都处于不同的基线.
如果我这样做一次,它可能是周围8.3
,8.6
,8.9
,或在真正之间的任何地方.没有其他用户进程打开(除了那些需要ssh进入机器).
我按如下方式进行了一项实验:
while True:
run the query 25 times and record the minimum such runtime
shutdown the server and restart it, …
在我的项目中,主数据库是 mongodb,为了缓存,我有 redis。现在,对于长且更复杂的查询,我使用 redis 来缓存它们显然更好。
但我想知道是否应该缓存简单的查询,例如按 id 查找,或按其他 mongodb 索引字段查找?使用 redis 进行这种索引查找有意义吗?
或者我应该不缓存这种查询,因为 mongodb 内部已经有很好的缓存机制?
查找 mongodb 索引字段更快还是查找 redis 更快?