如何提高mongo的写入速度?

2024-06-12 21:34:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我用mongo和sysng保存日志

对数是每秒20000行

我用mongowhit2shard和3host运行mongo

我用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插入数据时尝试使用多个进程

但我不确定它是否能提高写入速度

怎么了?在


Tags: 数据intest脚本timemongoipython对数
1条回答
网友
1楼 · 发布于 2024-06-12 21:34:06

你需要100000次写入/秒,而且你对读取数据没有任何要求,即

  • 您不需要数据在某个时间阈值内保持一致。在
  • 您没有任何可靠性要求,也就是说,您不在乎是否因为N个服务器崩溃而丢失数据,也不需要编写器知道写入是否成功。在

尽管如此,我有两条建议:

  1. 通过使用RAID,例如raid0来缓解I/O瓶颈。这假设您的负载是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
    

请注意,我将您的range调用替换为xrange。在

当然,如果您也阅读了需求,那么您需要参考pymongo collection.insert文档中关于safe和{}参数的内容。没有免费午餐之类的东西

希望这有帮助!在

相关问题 更多 >