如何防止创建新的MongoDB数据库减慢我的测试速度?

时间:2015-01-27 16:38:49

标签: mongodb

在每次功能测试之前,我放弃测试数据库并通过再次设置索引来“重新创建”它。这导致每个小测试花费超过一秒钟。

在日志中,这些行显示:

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,但没有任何区别。

1 个答案:

答案 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磁盘上运行的实例,但这是一个单独的主题。