如何提高mongo的写入速度?

时间:2012-07-19 09:49:45

标签: python mongodb pymongo database nosql

我使用mongo和sys-ng来保存我的日志

日志大约在20000行之前

我用mongos运行mongo whit 2 shard和3 host

我在ipython

中编写了一个python脚本
In [48]: %time dddd=[qlogdb.insert({'tet':1313232,'test':1232423,'asdasds':'sdadsds'})  for i in range(100000)]
CPU times: user 7.24 s, sys: 2.51 s, total: 9.75 s
Wall time: 10.77 s  

我认为它可以从输出日志

写入10000行前置秒

我需要在将数据插入mongo

时提高写入速度

我想在将数据插入mongo

时尝试使用多个进程

但我不确定它是否可以提高写入速度;

任何方式?

1 个答案:

答案 0 :(得分:2)

您需要100,000次写入/秒,并且您对读取数据没有任何要求,即

  • 您不需要数据在特定时间阈值之间保持一致。
  • 您没有任何可靠性要求,即您不关心是否因为N服务器崩溃而丢失数据,并且您不需要编写者知道写入是否成功。

话虽如此,我有两条建议:

  1. 通过使用RAID来缓解I / O瓶颈,例如RAID 0.这假设您的负载是I / O绑定的;但是,由于创建所有词典所需的工作,您的基准测试也会略微占用CPU。

  2. 使用批量插入:

    In [1]: %time return_value = [collection.insert({'tet':1313232,'test':1232423,'asdasds':'sdadsds'})  for i in xrange(100000)]
    CPU times: user 7.00 s, sys: 0.85 s, total: 7.85 s
    Wall time: 7.86 s
    
    In [2]: %time return_value = [collection.insert({'tet':1313232,'test':1232423,'asdasds':'sdadsds'})  for i in xrange(100000)]
    CPU times: user 6.79 s, sys: 0.84 s, total: 7.63 s
    Wall time: 7.64 s
    
    In [3]: documents = [{'tet':1313232,'test':1232423,'asdasds':'sdadsds'} for i in xrange(100000)]
    In [10]: %time return_value = collection.insert(documents)
    CPU times: user 0.97 s, sys: 0.03 s, total: 0.99 s
    Wall time: 1.00 s
    
    In [4]: documents = [{'tet':1313232,'test':1232423,'asdasds':'sdadsds'} for i in xrange(100000)]
    In [10]: %time return_value = collection.insert(documents)
    CPU times: user 0.92 s, sys: 0.04 s, total: 0.96 s
    Wall time: 0.98 s
    
  3. 请注意,我已将range来电替换为xrange

    当然,如果您还有阅读要求,那么您需要查阅有关safew参数的pymongo collection.insert文档。没有免费的午餐等。

    希望这有帮助!