Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何提高mongo的写入速度?_Python_Mongodb_Pymongo_Database_Nosql - Fatal编程技术网

Python 如何提高mongo的写入速度?

Python 如何提高mongo的写入速度?,python,mongodb,pymongo,database,nosql,Python,Mongodb,Pymongo,Database,Nosql,我使用mongo和sys ng保存日志 日志每秒大约有20000行 我使用mongos运行MongoWhit2shard和3host 我在ipython 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:

我使用mongo和sys ng保存日志

日志每秒大约有20000行

我使用mongos运行MongoWhit2
shard
和3
host

我在
ipython

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

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


有什么办法吗?

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

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

  • 通过使用RAID 0等来缓解I/O瓶颈。这假设您的负载是I/O绑定的;然而,由于创建所有字典所需的工作,您的基准测试也有点CPU密集

  • 使用批插入:

    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

    当然,如果您也阅读了要求,那么您需要查阅有关
    safe
    w
    参数的文档。没有免费的午餐之类的东西


    希望这有帮助

    mongo的瓶颈是什么?您可以通过在每个碎片的主要成员上运行mongostat来解决这个问题。答案完全取决于什么是尖峰。