真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

DB插入性能大亂斗-postgresqlvsmysqlvsmongodbvsoracle

因?yàn)榭吹降赂绲膒ostgresql與MongoDB插入100萬(wàn)條記錄的比較文章,想動(dòng)手驗(yàn)證一下,但結(jié)論反正讓我看不懂了!

首先我是在虛擬機(jī)上測(cè)試,4核8G+存儲(chǔ),centos7.2,mongo3.2.9,postgresql9.6開(kāi)發(fā)版,都是最新版,新安裝不作任何處理;

都通過(guò)python來(lái)測(cè)試,但mongodb的測(cè)試結(jié)果是371秒,跟德哥的測(cè)試接近;
可pg就奇怪了,跑了十幾分鐘,還只看記錄達(dá)到56萬(wàn),實(shí)在是慢得出奇;

我估計(jì)存儲(chǔ)方面有限制或者開(kāi)發(fā)版有BUG吧,換物理機(jī)來(lái)測(cè);
硬件,普通PC機(jī),win10系統(tǒng):
DB插入性能大亂斗 -  postgresql vs mysql vs mongodb vs oracle
PG,之前官網(wǎng)下載的9.5.2windows版,全新安裝不作任何設(shè)置:
DB插入性能大亂斗 -  postgresql vs mysql vs mongodb vs oracle

DB插入性能大亂斗 -  postgresql vs mysql vs mongodb vs oracle
這下能跑完了,但239秒跟德哥的測(cè)試有些差距,腳本中有一個(gè)區(qū)別,就是不是unix_socket連接(搞不清unix_socket連接名稱在哪找);

由于mongodb還沒(méi)裝,但有一個(gè)很早之前下載的MySQL綠色版,版本號(hào)都6.0.5了,非官方,但能用:
DB插入性能大亂斗 -  postgresql vs mysql vs mongodb vs oracle
小測(cè)一把,竟然102秒就跑完了!(后來(lái)我又在虛擬機(jī)上安裝了mariadb5.5.50,測(cè)試結(jié)果也是102秒?。?br />DB插入性能大亂斗 -  postgresql vs mysql vs mongodb vs oracle

這是PG的測(cè)試腳本:
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的測(cè)試腳本:
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)

統(tǒng)一建表腳本(這個(gè)腳本在oracle,mysql,pg都能跑):
create table tt(id int, username varchar(20), age int, email varchar(20), qq varchar(20))

mongodb測(cè)試結(jié)果(mongodb3.2.9windows版,pymongo):
DB插入性能大亂斗 -  postgresql vs mysql vs mongodb vs oracle
297秒,比虛擬機(jī)的成績(jī)要好,看來(lái)我這機(jī)器性能還是不錯(cuò)的^_^

由于機(jī)器上安裝有oracle12.1,所以就來(lái)加入戰(zhàn)局,DB大亂斗:
沒(méi)想到測(cè)試結(jié)果竟然是368秒!附測(cè)試結(jié)果(python+cx_Oracle):
DB插入性能大亂斗 -  postgresql vs mysql vs mongodb vs oracle

這下怎么解釋啊,坦率地說(shuō),內(nèi)心里面 對(duì)O偏愛(ài)>PG>mysql,但是被mysql實(shí)力打臉了^_^

分析oracle的原因,看來(lái)主要還是自動(dòng)提交比較耗時(shí),但問(wèn)題是其他DB也是自動(dòng)提交啊

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

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

不過(guò)如果oracle”火力全開(kāi)“的話,最好成績(jī)是1.28秒,當(dāng)然,這個(gè)僅供參考,更公平的還是普通的寫(xiě)法:
DB插入性能大亂斗 -  postgresql vs mysql vs mongodb vs oracle


在虛擬機(jī)上,用python測(cè)試插入100萬(wàn)記錄竟然用了3001秒!暫時(shí)想不通原因,用plpgsql測(cè)試一把,只要5秒鐘,找回了一點(diǎn)信心:
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更新:

再次在虛擬機(jī)上測(cè)試了PG9.2.8與最新的9.6.2正式版,如果自動(dòng)提交打開(kāi)的話,都需要2500多秒,而在同一臺(tái)機(jī)上,mariadb只要159秒;
但當(dāng)把自動(dòng)提交關(guān)掉,變成插入后一次提交之后,PG9.6也只用了129秒:
DB插入性能大亂斗 -  postgresql vs mysql vs mongodb vs oracle
這才是比較正常的結(jié)果,為什么虛擬機(jī)上與物理機(jī)在自動(dòng)提交模式上差異這么大,也許跟PG的事務(wù)特性有關(guān);

為了公平起見(jiàn),又對(duì)maria_db的腳本也去掉了自動(dòng)提交,再跑了一次:
DB插入性能大亂斗 -  postgresql vs mysql vs mongodb vs oracle

感覺(jué)mariadb對(duì)于自動(dòng)提交與非自動(dòng)提交并沒(méi)有太大的差別,也許本身就作了優(yōu)化吧;

總而言之,我覺(jué)得PG與MYSQL的表現(xiàn)都很好了;

網(wǎng)站欄目:DB插入性能大亂斗-postgresqlvsmysqlvsmongodbvsoracle
瀏覽地址:http://weahome.cn/article/jeecch.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部