我该如何配置Mongodb集群?

jac*_*bra 2 sharding mongodb

我正在运行一个分片的mongodb环境 - 3个mongod分片,1个mongod配置,1个mongos(没有复制).

我想使用mongoimport将csv数据导入数据库.我有超过210个csv文件,以500,000的增量存储了1.05亿条记录.我知道mongoimport是单线程的,我读到我应该运行多个mongoimport进程以获得更好的性能.但是,我试过了,并没有加快速度:

当并行运行3个mongoimports时,每个进程得到~6k插入/秒(所以18k i/s)与运行1 mongoimport相比,我得到~20k插入/秒.

由于这些进程是通过单个mongod配置和mongos路由的,我想知道这是否是由于我的群集配置.我的问题是,如果我以不同的方式设置我的群集配置,我会获得更好的mongoimport速度吗?我想要更多的mongos流程吗?我应该一次关闭多少个mongoimports进程?

Gat*_* VP 5

所以,你需要做的第一件事是"预先拆分"你的块.

假设您已经对要导入的集合进行了分片.当您"从头开始"时,所有数据将开始转到单个节点.当该节点填满时,MongoDB将开始将该节点"拆分"为块.一旦它达到大约8个块(大约8x64MB的索引空间),它将开始迁移块.

所以基本上,你有效地写入单个节点然后该节点正在减速,因为它必须读取和写入其他节点的数据.

这就是为什么你没有看到任何加速3 mongoimport.所有数据仍然是单个节点,并且您正在最大化该节点的吞吐量.

这里的诀窍是"预分割"数据.在您的情况下,您可能需要进行设置,以便在每台计算机上获得大约70个文件的数据.然后您可以在不同的线程上导入这些文件并获得更好的吞吐量.

Craigslist的Jeremy Zawodny在这里有一个合理的写作.MongoDB的网站有一些文档在这里.