pymongo insert vs pymysql insert

时间:2017-02-11 09:51:49

标签: python mysql mongodb pymongo pymysql

我正在使用他们的python连接器pymongo和pymysql测试MongoDb和MySQL,尤其是insert函数。 pymongo版本是3.4,pymysql是0.7.9,python是3.5

我的代码与mongo相似:

    client = MongoClient('localhost', 27017)
    db = client['local']
    collection = db['cqt']            

    for i in range (0,10):
        datas = [ {'a' : 1, 'b':2" }, {'a' : 3, 'b':4" }, ...] # 2000 dicts
        data =  [ bson.son.SON( d ) for d in datas]
        deltaT = time.clock()
        collection.insert_many( data )
        deltaT = time.clock() - deltaT 

对于mysql:

    connection = pymysql.connect(host='127.0.0.1',
                     user='admin',
                     password='toto',
                     db='cqt',
                     charset='utf8mb4',
                     cursorclass=pymysql.cursors.DictCursor)

    cursor = connection.cursor()
    sqlRequest = """INSERT INTO `cqt`.`myTable` (`a`,`b`) VALUES """


    for data in datas : sql += data.getSQL() + ","  # 2000 rows
    deltaT = time.clock()
    cursor.execute( sql )
    deltaT = time.clock() - deltaT 

数据是简单的字典,6列,带有字符串键和int值。

当绘制deltaT变量(插入2000个条目所需的时间)时,我惊讶地发现mongo比mysql慢了10倍。 insert duration results

我不想在这里做基准测试,只是想在我需要的用例中估算数据库性能。但是,从java中的其他测试或在MySQL和MongoDB之间的Web上查看基准测试,我的python结果并不是我所期待的。对于使用MySQL和Mongo进行插入,我的性能应该非常相似,对于Mongo来说,性能会更好。

那么,pymongo连接器是否缓慢? 你知道我是否应该在我的代码或MongoDB中修改一些参数以改善性能? 有任何建议可以使用MongoDB获得更好的性能吗?

1 个答案:

答案 0 :(得分:0)

实际上,我认为你需要使用像MongoDB管理服务这样的工具收集一些统计数据,然后确定哪个是你的瓶颈。

以下是我的建议:

  • 尝试使用multiprocessing并执行并行Python脚本来插入文档。绝对会有更好的性能。

    看看这个example

  • 为了最大限度地提高写入性能,分片是一种很好的方法。

  • 检查您的磁盘I / O速度,也许您可​​以尝试使用SSD。

查看write Operation performance的更多详情。

希望这有帮助。