我正在使用他们的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获得更好的性能吗?
答案 0 :(得分:0)
实际上,我认为你需要使用像MongoDB管理服务这样的工具收集一些统计数据,然后确定哪个是你的瓶颈。
以下是我的建议:
尝试使用multiprocessing
并执行并行Python脚本来插入文档。绝对会有更好的性能。
看看这个example。
为了最大限度地提高写入性能,分片是一种很好的方法。
检查您的磁盘I / O速度,也许您可以尝试使用SSD。
查看write Operation performance的更多详情。
希望这有帮助。