文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

DB插入性能大乱斗 - postgresql vs mysql vs mongodb vs oracle

2024-04-02 19:55

关注
因为看到德哥的postgresql与mongodb插入100万条记录的比较文章,想动手验证一下,但结论反正让我看不懂了!

首先我是在虚拟机上测试,4核8G+存储,centos7.2,mongo3.2.9,postgresql9.6开发版,都是最新版,新安装不作任何处理;

都通过python来测试,但mongodb的测试结果是371秒,跟德哥的测试接近;
可pg就奇怪了,跑了十几分钟,还只看记录达到56万,实在是慢得出奇;

我估计存储方面有限制或者开发版有BUG吧,换物理机来测;
硬件,普通PC机,win10系统:
DB插入性能大乱斗 -  postgresql vs mysql vs mongodb vs oracle
PG,之前官网下载的9.5.2windows版,全新安装不作任何设置:
DB插入性能大乱斗 -  postgresql vs mysql vs mongodb vs oracle

DB插入性能大乱斗 -  postgresql vs mysql vs mongodb vs oracle
这下能跑完了,但239秒跟德哥的测试有些差距,脚本中有一个区别,就是不是unix_socket连接(搞不清unix_socket连接名称在哪找);

由于mongodb还没装,但有一个很早之前下载的mysql绿色版,版本号都6.0.5了,非官方,但能用:
DB插入性能大乱斗 -  postgresql vs mysql vs mongodb vs oracle
小测一把,竟然102秒就跑完了!(后来我又在虚拟机上安装了mariadb5.5.50,测试结果也是102秒!)
DB插入性能大乱斗 -  postgresql vs mysql vs mongodb vs oracle

这是PG的测试脚本:
import psycopg2
import time
conn=psycopg2.connect(database="test1",user="postgres",password="",host="127.0.0.1",port="5432")
cur=conn.cursor()
conn.autocommit=True
start_t=time.time()
print("START:"+str(start_t))
for i in range(0,1000000):
  cur.execute("insert into tt values(%(id)s,'digoal.zhou',32,'digoal@126.com','276732431')",{"id":i})
stop_t=time.time()
print("STOP:"+str(stop_t))
print(stop_t-start_t)

这是MySQL的测试脚本:
import MySQLdb
import time
conn=MySQLdb.connect(host="localhost",user="root",passwd="",db="test")
cur=conn.cursor()
conn.autocommit=True
start_t=time.time()
print("START:"+str(start_t))
for i in range(0,1000000):
  cur.execute("insert into tt values(%s,%s,%s,%s,%s)",(i,"digoal.zhou",32,"digoal@126.com","276732431"))
stop_t=time.time()
print("STOP:"+str(stop_t))
print(stop_t-start_t)

统一建表脚本(这个脚本在oracle,mysql,pg都能跑):
create table tt(id int, username varchar(20), age int, email varchar(20), qq varchar(20))

mongodb测试结果(mongodb3.2.9windows版,pymongo):
DB插入性能大乱斗 -  postgresql vs mysql vs mongodb vs oracle
297秒,比虚拟机的成绩要好,看来我这机器性能还是不错的^_^

由于机器上安装有oracle12.1,所以就来加入战局,DB大乱斗:
没想到测试结果竟然是368秒!附测试结果(python+cx_Oracle):
DB插入性能大乱斗 -  postgresql vs mysql vs mongodb vs oracle

这下怎么解释啊,坦率地说,内心里面 对O偏爱>PG>mysql,但是被mysql实力打脸了^_^

分析oracle的原因,看来主要还是自动提交比较耗时,但问题是其他DB也是自动提交啊

plsql中,单次提交的效果,244秒与PG差不多:
DB插入性能大乱斗 -  postgresql vs mysql vs mongodb vs oracle

改成批量提交后85秒:
DB插入性能大乱斗 -  postgresql vs mysql vs mongodb vs oracle

不过如果oracle”火力全开“的话,最好成绩是1.28秒,当然,这个仅供参考,更公平的还是普通的写法:
DB插入性能大乱斗 -  postgresql vs mysql vs mongodb vs oracle


在虚拟机上,用python测试插入100万记录竟然用了3001秒!暂时想不通原因,用plpgsql测试一把,只要5秒钟,找回了一点信心:
DB插入性能大乱斗 -  postgresql vs mysql vs mongodb vs oracle

plpgsql代码:
create or replace function pgins2(num bigint) returns bigint AS $$
declare 
    ii integer;
    beg_tm timestamp;
    end_tm timestamp;
    time_consuming bigint ;  
  begin
II:=1;
beg_tm:=now();
FOR ii IN 1..num LOOP
insert into tt values(ii,'digoal.zhou',32,'digoal@126.com','276732431');
end loop;
end_tm:=now();
select round(EXTRACT(EPOCH from end_tm)-EXTRACT(EPOCH from beg_tm)) into time_consuming;  
    return time_consuming;  
  end;
$$ LANGUAGE plpgsql;

2017-02-21更新:

再次在虚拟机上测试了PG9.2.8与最新的9.6.2正式版,如果自动提交打开的话,都需要2500多秒,而在同一台机上,mariadb只要159秒;
但当把自动提交关掉,变成插入后一次提交之后,PG9.6也只用了129秒:
DB插入性能大乱斗 -  postgresql vs mysql vs mongodb vs oracle
这才是比较正常的结果,为什么虚拟机上与物理机在自动提交模式上差异这么大,也许跟PG的事务特性有关;

为了公平起见,又对maria_db的脚本也去掉了自动提交,再跑了一次:
DB插入性能大乱斗 -  postgresql vs mysql vs mongodb vs oracle

感觉mariadb对于自动提交与非自动提交并没有太大的差别,也许本身就作了优化吧;

总而言之,我觉得PG与MYSQL的表现都很好了;
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯