創(chuàng)建主備的環(huán)境變量文件, 因?yàn)槭窃谕慌_(tái)機(jī)上起兩個(gè)PG實(shí)例, 環(huán)境變量要各自設(shè)置。
公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)推出紹興免費(fèi)做網(wǎng)站回饋大家。
vi master.env
vi slave.env
新開(kāi)一個(gè)shell終端(后續(xù)稱為 terminal_master )
新開(kāi)一個(gè)shell終端(后續(xù)稱為 terminal_slave )
經(jīng)過(guò)上面幾步, 一個(gè)一主一備的集群就搭建好了, 下面開(kāi)始驗(yàn)證流復(fù)制是否工作正常。
切換到 terminal_master 終端
切換到 terminal_slave 終端
一個(gè)false一個(gè)tree, 證明目前主備狀態(tài)正常。
切換到 terminal_slave 終端
切換到 terminal_master 終端
切換到 terminal_slave 終端
DDL能順利同步。
切換到 terminal_slave 終端
切換到 terminal_master 終端
切換到 terminal_slave 終端
切換到 terminal_master 終端
切換到 terminal_slave 終端
切換到 terminal_master 終端
主備切換完成, 且數(shù)據(jù)同步工作正常。
目前雖然工作正常, 但是角色是互換了的, 后續(xù)可以停掉 slave ,再做一次主備切換, 恢復(fù)成原始狀態(tài)。
這個(gè)就作為練習(xí)了, 不再貼出操作步驟。
目前是靠手工切換主備的, 線上系統(tǒng)一般都要配置成自動(dòng)切換, 這個(gè)時(shí)候就需要引入一些其他手段了, 譬如 patroni 之類的HA工具。
很長(zhǎng)時(shí)間以來(lái),關(guān)系型數(shù)據(jù)庫(kù)一直是大公司的專利,市場(chǎng)被Oracle/DB2等企業(yè)數(shù)據(jù)庫(kù)牢牢把持。
但是隨著互聯(lián)網(wǎng)的崛起、開(kāi)源社區(qū)的發(fā)展,上世紀(jì)九十年代MySQL1.0的發(fā)布,標(biāo)志著關(guān)系型數(shù)據(jù)庫(kù)的領(lǐng)域社區(qū)終于有可選擇的方案。
MySQL第一個(gè)介紹的單機(jī)RDBMS就是MySQL。
相信大多數(shù)朋友都已經(jīng)對(duì)MySQL非常熟悉,基本上MySQL的成長(zhǎng)史就是互聯(lián)網(wǎng)的成長(zhǎng)史。
我接觸的第一個(gè)MySQL版本是MySQL4.0,到后來(lái)的MySQL5.5更是經(jīng)典——基本所有的互聯(lián)網(wǎng)公司都在使用。
MySQL也普及了「可插拔」引擎這一概念,針對(duì)不同的業(yè)務(wù)場(chǎng)景選用不同的存儲(chǔ)引擎是MySQLtuning的一個(gè)重要的方式。
比如對(duì)于有事務(wù)需求的場(chǎng)景使用InnoDB;對(duì)于并發(fā)讀取的場(chǎng)景MyISAM可能比較合適;但是現(xiàn)在我推薦絕大多數(shù)情況還是使用InnoDB,畢竟5.6后已經(jīng)成為了官方的默認(rèn)引擎。
大多數(shù)朋友都基本知道什么場(chǎng)景適用MySQL(幾乎所有需要持久化結(jié)構(gòu)化數(shù)據(jù)的場(chǎng)景),我就不贅述了。
另外值得一提的是MySQL5.6中引入了多線程復(fù)制和GTID,使得故障恢復(fù)和主從的運(yùn)維變得比較方便。
另外,5.7(目前處于GA版本)是MySQL的一個(gè)重大更新,主要是讀寫(xiě)性能和復(fù)制性能上有了長(zhǎng)足的進(jìn)步(在5.6版本中實(shí)現(xiàn)了SCHEMA級(jí)別的并行復(fù)制,不過(guò)意義不大,倒是MariaDB的多線程并行復(fù)制大放異彩,有不少人因?yàn)檫@個(gè)特性選擇MariaDB。
MySQL5.7MTS支持兩種模式,一種是和5.6一樣,另一種則是基于binloggroupcommit實(shí)現(xiàn)的多線程復(fù)制,也就是MASTER上同時(shí)提交的binlog在SLE端也可以同時(shí)被apply,實(shí)現(xiàn)并行復(fù)制)。
如果有單機(jī)數(shù)據(jù)庫(kù)技術(shù)選型的朋友,基本上只需要考慮5.7或者M(jìn)ariaDB就好了,而且5.6、5.7由Oracle接手后,性能和穩(wěn)定性上都有了明顯的提升。
PostgreSQLPostgreSQL的歷史也非常悠久,其前身是UCB的Ingres,主持這個(gè)項(xiàng)目的MichaelStronebraker于2015年獲得圖靈獎(jiǎng)。
后來(lái)項(xiàng)目更名為Post-Ingres,項(xiàng)目基于BSDlicense下開(kāi)源。
1995年幾個(gè)UCB的學(xué)生為Post-Ingres開(kāi)發(fā)了SQL的接口,正式發(fā)布了PostgreSQL95,隨后一步步在開(kāi)源社區(qū)中成長(zhǎng)起來(lái)。
和MySQL一樣,PostgreSQL也是一個(gè)單機(jī)的關(guān)系型數(shù)據(jù)庫(kù),但是與MySQL方便用戶過(guò)度擴(kuò)展的SQL文法不一樣的是,PostgreSQL的SQL支持非常強(qiáng)大,不管是內(nèi)置類型、JSON支持、GIS類型以及對(duì)于復(fù)雜查詢的支持,PL/SQL等都比MySQL強(qiáng)大得多,而且從代碼質(zhì)量上來(lái)看,PostgreSQL的代碼質(zhì)量是優(yōu)于MySQL的,另外相對(duì)于MySQL5.7以前的版本,PostgreSQL的SQL優(yōu)化器比MySQL強(qiáng)大很多,幾乎所有稍微復(fù)雜的查詢PostgreSQL的表現(xiàn)都優(yōu)于MySQL。
從近幾年的趨勢(shì)上來(lái)看,PostgreSQL的勢(shì)頭也很強(qiáng)勁,我認(rèn)為PostgreSQL的不足之處在于沒(méi)有MySQL那樣強(qiáng)大的社區(qū)和群眾基礎(chǔ)。
MySQL經(jīng)過(guò)那么多年的發(fā)展,積累了很多的運(yùn)維工具和最佳實(shí)踐,但是PostgreSQL作為后起之秀,擁有更優(yōu)秀的設(shè)計(jì)和更豐富的功能。
電腦培訓(xùn)發(fā)現(xiàn)PostgreSQL9以后的版本也足夠穩(wěn)定,在做新項(xiàng)目技術(shù)選型的時(shí)候,是一個(gè)很好的選擇。
另外也有很多新的數(shù)據(jù)庫(kù)項(xiàng)目是基于PostgreSQL源碼的基礎(chǔ)上進(jìn)行二次開(kāi)發(fā),比如Greenplum等。
PostgreSQL9.4帶來(lái)了全新的NoSQL特性,并且根據(jù)EnterpriseDB的測(cè)試,其加載,插入和查詢的性能都已經(jīng)幾倍于MongoDB了。
雖然我是PG的鐵桿粉絲,但是關(guān)系數(shù)據(jù)庫(kù)背負(fù)了ACID的重型裝甲,在性能上居然能打敗輕裝上陣的NoSQL數(shù)據(jù)庫(kù)總覺(jué)得有點(diǎn)離譜。
所以我在自己的環(huán)境里驗(yàn)證了一下EnterpriseDB的測(cè)試結(jié)果,并且小探一下PG取勝的原因。
1. EnterpriseDB的測(cè)試結(jié)果
以下是EnterpriseDB的測(cè)試結(jié)果(數(shù)據(jù)量為5000萬(wàn))
(還可以參考這篇譯文: )
2. 我的驗(yàn)證結(jié)果
測(cè)試觀點(diǎn)
為了使測(cè)試結(jié)果更加單純,我準(zhǔn)備單純比拼CPU消耗(盡量排除IO和網(wǎng)絡(luò)的干擾),設(shè)定以下測(cè)試條件。
1)所有數(shù)據(jù)都要放進(jìn)內(nèi)存
2)C/S都跑在同一臺(tái)單機(jī)上
所以,只在單機(jī)上進(jìn)行10萬(wàn)條小數(shù)據(jù)量的測(cè)試。
注)EnterpriseDB的測(cè)試環(huán)境是32G內(nèi)存的Amazon Web Services M3.2XLARGE實(shí)例,總數(shù)據(jù)量超過(guò)內(nèi)存了。
測(cè)試環(huán)境
測(cè)試環(huán)境為個(gè)人PC上的VMware虛擬機(jī)
PC
CPU:Intel Core i5-3470 3.2G(4核)
MEM:6GB
SSD:OCZ-VERTEX4 128GB(VMware虛擬機(jī)所在磁盤(pán),非系統(tǒng)盤(pán))
OS:Win7
VMware虛擬機(jī)
CPU:4核
MEM:1GB
OS:CentOS 6.5
PG:PostgreSQL 9.4.0(shared_buffers = 428MB,其他是默認(rèn)值)
MG:MongoDB 3.0.2
測(cè)試步驟
測(cè)試步驟非常簡(jiǎn)單,可以參考:
但是,在測(cè)試前,有些東西要改。
1)把數(shù)據(jù)量減小到10萬(wàn)
pg_nosql_benchmark-master/pg_nosql_benchmark:
declare -a json_rows=(10000000)
==
declare -a json_rows=(100000)
2)修改mongo的一處腳本(注)
pg_nosql_benchmark-master/lib/mongo_func_lib.sh:
collectionsize="$(echo ${output}|awk -F"," '{print $5}'|cut -d":" -f2)"
==
collectionsize="$(echo ${output}|awk -F"," '{print $6}'|cut -d":" -f2)"
注)pg_nosql_benchmark原來(lái)是基于MongoDB 2.6設(shè)計(jì)的,MongoDB 3.0的db.json_tables.stats()輸出可能變了,所以這邊要修改一下。
一、 PostgreSQL 的穩(wěn)定性極強(qiáng), Innodb 等引擎在崩潰、斷電之類的災(zāi)難場(chǎng)景下抗打擊能力有了長(zhǎng)足進(jìn)步,然而很多 MySQL 用戶都遇到過(guò)Server級(jí)的數(shù)據(jù)庫(kù)丟失的場(chǎng)景——mysql系統(tǒng)庫(kù)是MyISAM的,相比之下,PG數(shù)據(jù)庫(kù)這方面要好一些。
二、任何系統(tǒng)都有它的性能極限,在高并發(fā)讀寫(xiě),負(fù)載逼近極限下,PG的性能指標(biāo)仍可以維持雙曲線甚至對(duì)數(shù)曲線,到頂峰之后不再下降,而 MySQL 明顯出現(xiàn)一個(gè)波峰后下滑(5.5版本之后,在企業(yè)級(jí)版本中有個(gè)插件可以改善很多,不過(guò)需要付費(fèi))。
三、PG 多年來(lái)在 GIS 領(lǐng)域處于優(yōu)勢(shì)地位,因?yàn)樗胸S富的幾何類型,實(shí)際上不止幾何類型,PG有大量字典、數(shù)組、bitmap 等數(shù)據(jù)類型,相比之下mysql就差很多,instagram就是因?yàn)镻G的空間數(shù)據(jù)庫(kù)擴(kuò)展POSTGIS遠(yuǎn)遠(yuǎn)強(qiáng)于MYSQL的my spatial而采用PGSQL的。
四、PG 的“無(wú)鎖定”特性非常突出,甚至包括 vacuum 這樣的整理數(shù)據(jù)空間的操作,這個(gè)和PGSQL的MVCC實(shí)現(xiàn)有關(guān)系。
五、PG 的可以使用函數(shù)和條件索引,這使得PG數(shù)據(jù)庫(kù)的調(diào)優(yōu)非常靈活,mysql就沒(méi)有這個(gè)功能,條件索引在web應(yīng)用中很重要。
六、PG有極其強(qiáng)悍的 SQL 編程能力(9.x 圖靈完備,支持遞歸!),有非常豐富的統(tǒng)計(jì)函數(shù)和統(tǒng)計(jì)語(yǔ)法支持,比如分析函數(shù)(ORACLE的叫法,PG里叫window函數(shù)),還可以用多種語(yǔ)言來(lái)寫(xiě)存儲(chǔ)過(guò)程,對(duì)于R的支持也很好。這一點(diǎn)上MYSQL就差的很遠(yuǎn),很多分析功能都不支持,騰訊內(nèi)部數(shù)據(jù)存儲(chǔ)主要是MYSQL,但是數(shù)據(jù)分析主要是HADOOP+PGSQL。
七、PG 的有多種集群架構(gòu)可以選擇,plproxy 可以支持語(yǔ)句級(jí)的鏡像或分片,slony 可以進(jìn)行字段級(jí)的同步設(shè)置,standby 可以構(gòu)建WAL文件級(jí)或流式的讀寫(xiě)分離集群,同步頻率和集群策略調(diào)整方便,操作非常簡(jiǎn)單。
八、一般關(guān)系型數(shù)據(jù)庫(kù)的字符串有限定長(zhǎng)度8k左右,無(wú)限長(zhǎng) TEXT 類型的功能受限,只能作為外部大數(shù)據(jù)訪問(wèn)。而 PG 的 TEXT 類型可以直接訪問(wèn),SQL語(yǔ)法內(nèi)置正則表達(dá)式,可以索引,還可以全文檢索,或使用xml xpath。用PG的話,文檔數(shù)據(jù)庫(kù)都可以省了。
九,對(duì)于WEB應(yīng)用來(lái)說(shuō),復(fù)制的特性很重要,mysql到現(xiàn)在也是異步復(fù)制,pgsql可以做到同步,異步,半同步復(fù)制。還有mysql的同步是基于binlog復(fù)制,類似oracle golden gate,是基于stream的復(fù)制,做到同步很困難,這種方式更加適合異地復(fù)制,pgsql的復(fù)制基于wal,可以做到同步復(fù)制。同時(shí),pgsql還提供stream復(fù)制。
十,pgsql對(duì)于numa架構(gòu)的支持比mysql強(qiáng)一些,比MYSQL對(duì)于讀的性能更好一些,pgsql提交可以完全異步,而mysql的內(nèi)存表不夠?qū)嵱茫ㄒ驗(yàn)楸礞i的原因)
最后說(shuō)一下我感覺(jué) PG 不如 MySQL 的地方。
第一,MySQL有一些實(shí)用的運(yùn)維支持,如 slow-query.log ,這個(gè)pg肯定可以定制出來(lái),但是如果可以配置使用就更好了。
第二是mysql的innodb引擎,可以充分優(yōu)化利用系統(tǒng)所有內(nèi)存,超大內(nèi)存下PG對(duì)內(nèi)存使用的不那么充分,
第三點(diǎn),MySQL的復(fù)制可以用多級(jí)從庫(kù),但是在9.2之前,PGSQL不能用從庫(kù)帶從庫(kù)。
第四點(diǎn),從測(cè)試結(jié)果上看,mysql 5.5的性能提升很大,單機(jī)性能強(qiáng)于pgsql,5.6應(yīng)該會(huì)強(qiáng)更多.
第五點(diǎn),對(duì)于web應(yīng)用來(lái)說(shuō),mysql 5.6 的內(nèi)置MC API功能很好用,PGSQL差一些。
另外一些:
pgsql和mysql都是背后有商業(yè)公司,而且都不是一個(gè)公司。大部分開(kāi)發(fā)者,都是拿工資的。
說(shuō)mysql的執(zhí)行速度比pgsql快很多是不對(duì)的,速度接近,而且很多時(shí)候取決于你的配置。
對(duì)于存儲(chǔ)過(guò)程,函數(shù),視圖之類的功能,現(xiàn)在兩個(gè)數(shù)據(jù)庫(kù)都可以支持了。
另外多線程架構(gòu)和多進(jìn)程架構(gòu)之間沒(méi)有絕對(duì)的好壞,oracle在unix上是多進(jìn)程架構(gòu),在windows上是多線程架構(gòu)。
很多pg應(yīng)用也是24/7的應(yīng)用,比如skype. 最近幾個(gè)版本VACUUM基本不影響PGSQL 運(yùn)行,8.0之后的PGSQL不需要cygwin就可以在windows上運(yùn)行。
至于說(shuō)對(duì)于事務(wù)的支持,mysql和pgsql都沒(méi)有問(wèn)題。
本文題目:單機(jī)postgresql的簡(jiǎn)單介紹
文章來(lái)源:http://m.rwnh.cn/article22/dscoscc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站導(dǎo)航、小程序開(kāi)發(fā)、網(wǎng)站建設(shè)、Google、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)