我正在运行一个分片的MongoDB环境-3个Mongod分片,1个Mongod配置,1个Mongos(无复制)。
我想使用mongoimport将csv数据导入数据库。我有1.05亿条记录以500000的增量存储在210个csv文件中。我知道mongoimport是单线程的,我知道应该运行多个mongoimport进程以获得更好的性能。不过,我试过了,但没有加快速度:
当并行运行3个mongoimport时,我得到的是每个进程每秒约6k个插入(所以是18k i/s),而运行1个mongoimport时,我得到的是每秒约20k个插入。
由于这些进程是通过单个mongod配置和mongos路由的,我想知道这是否是由于我的集群配置。我的问题是,如果我以不同的方式设置集群配置,我是否可以获得更好的mongoimport速度?我需要更多的mongos进程吗?一次应该触发多少个MongoImports进程?
最佳答案
所以,你需要做的第一件事是“预先分割”你的块。
假设您已经将要导入的集合分片。当您“从头开始”时,所有数据将开始流向单个节点。当该节点填满时,MongoDB将开始将该节点“拆分”成块。一旦达到大约8个块(即大约8x64mb的索引空间),它将开始迁移块。
因此,基本上,你是在有效地向一个节点写入数据,然后这个节点的速度就会减慢,因为它必须向其他节点读写数据。
这就是为什么3mongoimport
没有加速的原因。所有的数据仍将流向一个节点,并且您将最大化该节点的吞吐量。
这里的诀窍是“预分割”数据。在您的情况下,您可能会设置它,以便在每台计算机上获得大约70个文件值的数据。然后可以在不同的线程上导入这些文件,从而获得更好的吞吐量。
Craigslist的Jeremy Zawodny对此有合理的评论。MongoDB站点有一些文档here。
关于mongodb - 我该如何配置Mongodb集群?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6627591/