0

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

日志大约是 20000 行前秒

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

我写了一个python脚本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

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

反正 ?

4

1 回答 1

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
    

请注意,我将您的range电话替换为xrange

当然,如果您也阅读过要求,那么您需要参考pymongo collection.insert文档中的safew参数。没有免费的午餐之类的东西。

希望这可以帮助!

于 2012-07-19T11:07:08.950 回答