在每次功能测试之前,我放弃测试数据库并通过再次设置索引来“重新创建”它。这导致每个小测试花费超过一秒钟。
在日志中,这些行显示:
2015-01-27T17:24:38.129+0100 [initandlisten] connection accepted from anonymous unix socket #4 (1 connection now open) 2015-01-27T17:24:38.141+0100 [conn4] dropDatabase test starting 2015-01-27T17:24:38.153+0100 [conn4] removeJournalFiles 2015-01-27T17:24:38.170+0100 [conn4] dropDatabase test finished 2015-01-27T17:24:38.171+0100 [FileAllocator] allocating new datafile /home/tomas/mongodb/data/test.ns, filling with zeroes... 2015-01-27T17:24:38.908+0100 [FileAllocator] done allocating datafile /home/tomas/mongodb/data/test.ns, size: 16MB, took 0.736 secs 2015-01-27T17:24:38.908+0100 [FileAllocator] allocating new datafile /home/tomas/mongodb/data/test.0, filling with zeroes... 2015-01-27T17:24:38.914+0100 [FileAllocator] done allocating datafile /home/tomas/mongodb/data/test.0, size: 64MB, took 0.005 secs
请注意,为数据库分配新数据文件“耗时0.736秒”。有什么方法可以减少或避免这种情况吗?
我尝试使用--noprealloc
,但没有任何区别。
答案 0 :(得分:2)
我在写这个问题时找到了一个很好的答案。我用Google搜索是否可以完全在RAM中运行MongoDB,结果发现它非常简单(我跟着this guide。)
我为RAM磁盘创建了一个媒体文件夹:
sudo mkdir /media/ramfs
sudo chmod 777 /media/ramfs
将RAM磁盘安装到文件夹中:
sudo mount -t tmpfs -o size=128M tmpfs /media/ramfs/
为MongoDB创建了一个目录:
mkdir /media/ramfs/mongodata
使用此脚本(mongo-testing
)启动MongoDB:
mongod \
--dbpath=/media/ramfs/mongodata \
--bind_ip=127.0.0.1 \
--port=9701 \
--pidfilepath=$HOME/mongodb/mongodb.pid \
--unixSocketPrefix=$HOME/mongodb \
--noprealloc \
--nojournal \
--smallfiles \
$*
我的测试套件时间从近4秒减少到0.07秒。
现在我正在考虑同时运行两个MongoDB实例并让我的测试套件使用在RAM磁盘上运行的实例,但这是一个单独的主题。