美文网首页
mongodb批量写与逐条写性能对比

mongodb批量写与逐条写性能对比

作者: xsren2019 | 来源:发表于2019-11-26 16:04 被阅读0次

    大家过年好!!!
    终于忙完了年,可以安心写这一篇文章了。
    年前有一个爬虫项目,其中一个存储中间件是我用twisted写的,一开始数据量比较少,所以采用的策略是单条写。但是放假前临时加大了数据量,发现中间件处理不过来了!最后将插入和更新操作改成了批量操作解决了这个问题。

    一、先列出结论:

    mongodb写操作的主要时间是耗费在程序与mongodb的通信过程,而不是实际的写过程。所以在数据量很大的时候需要将程序改成批量写。

    二、实验

    1、实验过程

    使用pymongo编写一个测试脚本,分别测试在批量写和单条写的情况下插入10w条数据用的时间。

    2、实验环境

    mongodb 3.2.9
    python 2.7
    pymongo 3.3.0

    3、实验代码

    代码地址:

    https://github.com/xsren/python_test_demo

    #coding:utf-8
    from pymongo import MongoClient
    from pymongo import InsertOne
    import time
    
    def test_insert():
        mc = MongoClient("127.0.0.1",maxPoolSize=None)
        db = mc['test']
    
        # 逐条写
        t0 = time.time()
        for i in xrange(0,100000):
            db['test_1'].insert_one({'_id':i,'x':1})
        print time.time() - t0
    
        time.sleep(1)
    
        # 批量写
        t0 = time.time()
        res =[]
        for i in xrange(0,100000):
            res.append(InsertOne({'_id':i,'x':1}))
        db['test_2'].bulk_write(res)
        print time.time() - t0
    
    
    if __name__ == '__main__':
        test_insert()
    
    4、实验结果
    程序运行结果.png mongodb运行情况.png

    从图中可以看出:
    1、批量写与单条写差了一个数量级
    2、mongo的并发性能还是不错的,在我的机器上可以达到每秒7w+

    相关文章

      网友评论

          本文标题:mongodb批量写与逐条写性能对比

          本文链接:https://www.haomeiwen.com/subject/wpfywctx.html