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

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

包含postgresql劣勢(shì)的詞條

你所知道的數(shù)據(jù)庫(kù)有哪些?各有什么優(yōu)缺點(diǎn)?

四、MySQL的主要優(yōu)點(diǎn)

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(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ì)。公司秉承以“開放、自由、嚴(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)站回饋大家。

1、首先是速度,MySQL通常要比PostgreSQL快得多。MySQL自已也宣稱速度是他們追求的主要目標(biāo)之一,基于這個(gè)原因,MySQL在以前的文檔中也曾經(jīng)說(shuō)過(guò)并不準(zhǔn)備支持事務(wù)和觸發(fā)器。但是在最新的文檔中,我們看到MySQL 4.0.2-alpha已經(jīng)開始支持事務(wù),而且在MySQL的TODO中,對(duì)觸發(fā)器、約束這樣的注定會(huì)降低速度的功能也列入了日程。但是,我們?nèi)匀挥欣碛上嘈?,MySQL將有可能一直保持速度的優(yōu)勢(shì)。

2、MySQL比PostgreSQL更流行,流行對(duì)于一個(gè)商業(yè)軟件來(lái)說(shuō),也是一個(gè)很重要的指標(biāo),流行意味著更多的用戶,意味著經(jīng)受了更多的考驗(yàn),意味著更好的商業(yè)支持、意味著更多、更完善的文檔資料。

3、與PostgreSQL相比,MySQL更適宜在Windows環(huán)境下運(yùn)行。MySQL作為一個(gè)本地的Windows應(yīng)用程序運(yùn)行(在NT/Win2000/WinXP下,是一個(gè)服務(wù)),而PostgreSQL是運(yùn)行在Cygwin模擬環(huán)境下。PostgreSQL在Windows下運(yùn)行沒(méi)有MySQL穩(wěn)定,應(yīng)該是可以想象的。

4、MySQL使用了線程,而PostgreSQL使用的是進(jìn)程。在不同線程之間的環(huán)境轉(zhuǎn)換和訪問(wèn)公用的存儲(chǔ)區(qū)域顯然要比在不同的進(jìn)程之間要快得多。

5、MySQL可以適應(yīng)24/7運(yùn)行。在絕大多數(shù)情況下,你不需要為MySQL運(yùn)行任何清除程序。PostgreSQL目前仍不完全適應(yīng)24/7運(yùn)行,這是因?yàn)槟惚仨毭扛粢欢螘r(shí)間運(yùn)行一次VACUUM。

6、MySQL在權(quán)限系統(tǒng)上比PostgreSQL某些方面更為完善。PostgreSQL只支持對(duì)于每一個(gè)用戶在一個(gè)數(shù)據(jù)庫(kù)上或一個(gè)數(shù)據(jù)表上的INSERT、SELECT和UPDATE/DELETE的授權(quán),而MySQL允許你定義一整套的不同的數(shù)據(jù)級(jí)、表級(jí)和列級(jí)的權(quán)限。對(duì)于列級(jí)的權(quán)限,PostgreSQL可以通過(guò)建立視圖,并確定視圖的權(quán)限來(lái)彌補(bǔ)。MySQL還允許你指定基于主機(jī)的權(quán)限,這對(duì)于目前的PostgreSQL是無(wú)法實(shí)現(xiàn)的,但是在很多時(shí)候,這是有用的。

7、由于MySQL 4.0.2-alpha開始支持事務(wù)的概念,因此事務(wù)對(duì)于MySQL不再僅僅成為劣勢(shì)。相反,因?yàn)镸ySQL保留無(wú)事務(wù)的表類型。這就為用戶提供了更多的選擇。

8、MySQL的MERGE表提供了一個(gè)獨(dú)特管理多個(gè)表的方法。

9、MySQL的myisampack可以對(duì)只讀表進(jìn)行壓縮,此后仍然可以直接訪問(wèn)該表中的行。

為什么postgrelsql的性能沒(méi)有mysql好

一、 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ā)讀寫,負(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)寫存儲(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í)或流式的讀寫分離集群,同步頻率和集群策略調(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è)公司。大部分開發(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)題。

常用數(shù)據(jù)庫(kù)系統(tǒng)簡(jiǎn)介

碼字不容易啊,望采納。

ORACLE (甲骨文,美國(guó))

優(yōu)點(diǎn):產(chǎn)品系列齊全,幾乎囊括所有應(yīng)用領(lǐng)域,大型,完善,安全,可以支持多個(gè)實(shí)例同時(shí)運(yùn)行,功能強(qiáng)。能在所有主流平臺(tái)上運(yùn)行(包括 windows)。完全支持所有的工業(yè)標(biāo)準(zhǔn)。采用完全開放策略??梢允箍蛻暨x擇最適合的解決方案。對(duì)開發(fā)商全力支持。

缺點(diǎn):價(jià)格成本,服務(wù)費(fèi)用,后期產(chǎn)品追加費(fèi)用,管理維護(hù)相對(duì)麻煩,對(duì)硬件的要求高。

幾乎匹配所有動(dòng)態(tài)網(wǎng)頁(yè)設(shè)計(jì),性能優(yōu)越。

SQLSERVER(微軟,美國(guó))

優(yōu)點(diǎn):簡(jiǎn)單,界面友好,上手容易,只能在WINDOWS平臺(tái)下使用。一般用于.net 程序設(shè)計(jì)。Windows9X系列產(chǎn)品是偏重于桌面應(yīng)用,NT server只適合中小型企業(yè)。

缺點(diǎn):windows平臺(tái)的可靠性,安全性和伸縮性是非常有限的。它不象unix那樣久經(jīng)考驗(yàn),尤其是在處理大數(shù)據(jù)量的關(guān)鍵業(yè)務(wù)時(shí)。

網(wǎng)頁(yè)設(shè)計(jì)多與C#(也是微軟的)經(jīng)典組合,不過(guò)也是幾乎開放所有開發(fā)語(yǔ)言接口

MYSQL (被oracle收購(gòu),收購(gòu)后的新版已出,市場(chǎng)反應(yīng)一般)

優(yōu)點(diǎn):免費(fèi),功能不錯(cuò),是開源的,體積小,并發(fā)執(zhí)行的數(shù)據(jù)庫(kù),如今mysql逐漸體現(xiàn)出性價(jià)比高的優(yōu)勢(shì)。

缺點(diǎn):穩(wěn)定性有待考量,面對(duì)大量數(shù)據(jù)的處理能力有限,并發(fā)性處理的機(jī)制不健全。

網(wǎng)頁(yè)開發(fā)mysql的應(yīng)用還是很多的,應(yīng)用比較廣泛。

DB2 (IBM 美國(guó))

優(yōu)點(diǎn):優(yōu)點(diǎn)很多啦,與oracle一樣是大型以及超大型的數(shù)據(jù)庫(kù),能力當(dāng)然很好啦,企業(yè)解決方案很牛X,在金融和電信方運(yùn)用DB2的很多,最適于海量數(shù)據(jù)。DB2在企業(yè)級(jí)的應(yīng)用最為廣泛,在全球的500家最大的企業(yè)中,幾乎85%以上用DB2數(shù)據(jù)庫(kù)服務(wù)器,而國(guó)內(nèi)到97年約占5%。不過(guò)與oracle相比db2的應(yīng)用相對(duì)較窄,一是價(jià)錢很貴,二是主要面向大型企業(yè),市場(chǎng)份額還是oracle最高,所以db2專家較少,很吃香的。

以db2的優(yōu)質(zhì)能力相對(duì)海量并發(fā)的web服務(wù)和訪問(wèn)比較輕松啦。

Access(微軟,美國(guó)):

優(yōu)點(diǎn):操作簡(jiǎn)潔、方便,不用依賴Server也可以對(duì)數(shù)據(jù)進(jìn)行操作。

缺點(diǎn):安全性不夠,如果做為服務(wù)器的話,對(duì)服務(wù)器要求很高,否則容易造成 MDB 損壞,高強(qiáng)度操作適應(yīng)性差,不能將 VBA 代碼開發(fā)的軟件系統(tǒng)直接編譯成 EXE 可執(zhí)行文件,不能脫離 ACCESS 或者 ACCESS RUNTIME 環(huán)境,該環(huán)境相對(duì)其他軟件體積較大(50M左右),每個(gè)數(shù)據(jù)庫(kù)文件最大限制只有2G,對(duì)于大型網(wǎng)站顯然不能夠勝任。

我接觸的access應(yīng)用比較少啦,關(guān)于開發(fā)的不了解了。

Sybase(Sybase 美國(guó)):

優(yōu)點(diǎn):操作簡(jiǎn)單,管理相對(duì)容易,對(duì)新手很好理解,上手快,曾經(jīng)的sybase還是挺輝煌的,sybase 數(shù)據(jù)倉(cāng)庫(kù)還是挺不錯(cuò),大數(shù)據(jù)的解決方案也不錯(cuò),與oracle,db2齊名,但是之后似乎難以追隨市場(chǎng)的腳步了。

缺點(diǎn):Sybase使用的編程接口不是開放的,沒(méi)有使用SQL92等相關(guān)的標(biāo)準(zhǔn),因此編制存儲(chǔ)程序和觸發(fā)器所用的Transact-SQL也是它們自己專用的。 優(yōu)化器(OPTIMIZER)不能有效的支持復(fù)雜的查詢(ComplexQueries)。應(yīng)用程序中稍微復(fù)雜一些的SQL語(yǔ)句,Sybase的優(yōu)化器就無(wú)法妥善優(yōu)化處理。已經(jīng)退出主流數(shù)據(jù)庫(kù)市場(chǎng),市場(chǎng)份額縮水嚴(yán)重,被SAP收購(gòu)后前途待觀望。

web應(yīng)用還是比較廣泛的啦。

informix(被IBM收購(gòu)):

優(yōu)點(diǎn):如今被IBM定位為作為IBM在線事務(wù)處理(OLTP)旗艦級(jí)數(shù)據(jù)服務(wù)系統(tǒng),使用不是很廣泛,IBM對(duì)Informix和DB2都有長(zhǎng)遠(yuǎn)的規(guī)劃,兩個(gè)數(shù)據(jù)庫(kù)產(chǎn)品互相吸取對(duì)方的技術(shù)優(yōu)勢(shì)。

缺點(diǎn):INFORMIX是以小型數(shù)據(jù)庫(kù)起家,所以其產(chǎn)品設(shè)計(jì)到目前為止仍有許多小型數(shù)據(jù)庫(kù)的限制。許多用戶都曾遇到INFORMIX在數(shù)據(jù)存儲(chǔ)、日志管理、備份、恢復(fù)等方面的問(wèn)題。Informix的擴(kuò)展并行選項(xiàng)在支持多用戶并發(fā)訪問(wèn)時(shí)存在困難。INFORMIX由于缺乏對(duì)大量數(shù)據(jù)的管理經(jīng)驗(yàn),所以其優(yōu)化器技術(shù)也不能針對(duì)大量數(shù)據(jù)做優(yōu)化。 小型企業(yè)可以嘗試使用。

postgresql(美國(guó)):

優(yōu)點(diǎn):輕盈好用的數(shù)據(jù)庫(kù),有點(diǎn)很多,如優(yōu)化排序性能,內(nèi)存占用更少;表繼承(很強(qiáng)),提高加鎖效率和并發(fā)度;創(chuàng)建索引過(guò)程中允許INSERT/UPDATE/DELETE等等。

缺點(diǎn):不足之處就是大數(shù)量的場(chǎng)景有待市場(chǎng)檢驗(yàn),目前觸及海量數(shù)據(jù)的案例較少。

如果對(duì)你有幫助.請(qǐng)點(diǎn)擊我的回答下方【選為滿意回答】按鈕

MySQL與PostgreSQL相比哪個(gè)更好

MySQL

MySQL聲稱自己是最流行的開源數(shù)據(jù)庫(kù)。LAMP中的M指的就是MySQL。構(gòu)建在LAMP上的應(yīng)用都會(huì)使用MySQL,如WordPress、Drupal等大多數(shù)php開源程序。MySQL最初是由MySQL AB開發(fā)的,然后在2008年以10億美金的價(jià)格賣給了Sun公司,Sun公司又在2010年被Oracle收購(gòu)。Oracle支持MySQL的多個(gè)版本:Standard、Enterprise、Classic、Cluster、Embedded與Community。其中有一些是免費(fèi)下載的,另外一些則是收費(fèi)的。其核心代碼基于GPL許可,由于MySQL被控制在Oracle,社區(qū)擔(dān)心會(huì)對(duì)MySQL的開源會(huì)有影響,所以開發(fā)了一些分支,比如: MariaDB和Percona。

PostgreSQL

PostgreSQL標(biāo)榜自己是世界上最先進(jìn)的開源數(shù)據(jù)庫(kù)。PostgreSQL的一些粉絲說(shuō)它能與Oracle相媲美,而且沒(méi)有那么昂貴的價(jià)格和傲慢的客服。最初是1985年在加利福尼亞大學(xué)伯克利分校開發(fā)的,作為Ingres數(shù)據(jù)庫(kù)的后繼。PostgreSQL是完全由社區(qū)驅(qū)動(dòng)的開源項(xiàng)目。它提供了單個(gè)完整功能的版本,而不像MySQL那樣提供了多個(gè)不同的社區(qū)版、商業(yè)版與企業(yè)版。PostgreSQL基于自由的BSD/MIT許可,組織可以使用、復(fù)制、修改和重新分發(fā)代碼,只需要提供一個(gè)版權(quán)聲明即可。

MySQL與PostgreSQL的對(duì)比

MySQL的背后是一個(gè)成熟的商業(yè)公司,而PostgreSQL的背后是一個(gè)龐大的志愿開發(fā)組。這使得MySQL的開發(fā)過(guò)程更為慎重,而PostgreSQL的反應(yīng)更為迅速。這樣的兩種背景直接導(dǎo)致了各自固有的優(yōu)點(diǎn)和缺點(diǎn)。

PostgreSQL相對(duì)于MySQL的優(yōu)勢(shì)

1)不僅僅是關(guān)系型數(shù)據(jù)庫(kù)

除了存儲(chǔ)正常的數(shù)據(jù)類型外,還支持存儲(chǔ):

array,不管是一位數(shù)組還是多為數(shù)組均支持

json(hStore)和jsonb,相比使用text存儲(chǔ)接送要高效很多

json和jsonb之間的區(qū)別

jsonb和json在更高的層面上看起來(lái)幾乎是一樣的,但在存儲(chǔ)實(shí)現(xiàn)上是不同的。

json存儲(chǔ)完的文本,json列會(huì)每次都解析存儲(chǔ)的值,它不支持索引,但你可以為查詢創(chuàng)建表達(dá)式索引。

jsonb存儲(chǔ)的二進(jìn)制格式,避免了重新解析數(shù)據(jù)結(jié)構(gòu)。它支持索引,這意味著你可以不使用指定的索引就能查詢?nèi)魏温窂健?/p>

當(dāng)我們比較寫入數(shù)據(jù)速度時(shí),由于數(shù)據(jù)存儲(chǔ)的方式的原因,jsonb會(huì)比json稍微的慢一點(diǎn)。json列會(huì)每次都解析存儲(chǔ)的值,這意味著鍵的順序要和輸入的時(shí)候一樣。但jsonb不同,以二進(jìn)制格式存儲(chǔ)且不保證鍵的順序。因此,如果你有軟件需要依賴鍵的順序,jsonb可能不是你的應(yīng)用的最佳選擇。使用jsonb的優(yōu)勢(shì)還在于你可以輕易的整合關(guān)系型數(shù)據(jù)和非關(guān)系型數(shù)據(jù), PostgreSQL對(duì)于mongodb這類的基于文檔的數(shù)據(jù)庫(kù)是個(gè)不小的威脅,畢竟如果一個(gè)表中只有一列數(shù)據(jù)的類型是半結(jié)構(gòu)化的,沒(méi)有必要為了遷就它而整個(gè)表的設(shè)計(jì)采用schemaless的結(jié)構(gòu)。

2)支持地理信息處理擴(kuò)展

PostGIS 為PostgreSQL提供了存儲(chǔ)空間地理數(shù)據(jù)的支持,使PostgreSQL成為了一個(gè)空間數(shù)據(jù)庫(kù),能夠進(jìn)行空間數(shù)據(jù)管理、數(shù)量測(cè)量與幾何拓?fù)浞治?。在功能上,和MYSQL對(duì)比,PostGIS具有下列優(yōu)勢(shì):

O2O業(yè)務(wù)場(chǎng)景中的LBS業(yè)務(wù)使用PostgreSQL + PostGIS有無(wú)法比擬的優(yōu)勢(shì)。

3)可以快速構(gòu)建REST API

PostgREST 可以方便的為任何 PostgreSQL 數(shù)據(jù)庫(kù)提供完全的 RESTful API 服務(wù)。

4)支持樹狀結(jié)構(gòu)

支持R-trees這樣可擴(kuò)展的索引類型,可以更方便地處理一些特殊數(shù)據(jù)。MySQL 處理樹狀的設(shè)計(jì)會(huì)很復(fù)雜, 而且需要寫很多代碼, 而 PostgreSQL 可以高效處理樹結(jié)構(gòu)。

5)有極其強(qiáng)悍的 SQL 編程能力

支持遞歸,有非常豐富的統(tǒng)計(jì)函數(shù)和統(tǒng)計(jì)語(yǔ)法支持。

MySQL:支持 CREATE PROCEDURE 和 CREATE FUNCTION 語(yǔ)句。存儲(chǔ)過(guò)程可以用 SQL 和 C++ 編寫。用戶定義函數(shù)可以用 SQL、C 和 C++ 編寫。

PostgreSQL:沒(méi)有單獨(dú)的存儲(chǔ)過(guò)程,都是通過(guò)函數(shù)實(shí)現(xiàn)的。用戶定義函數(shù)可以用 PL/pgSQL(專用的過(guò)程語(yǔ)言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 編寫。

6)外部數(shù)據(jù)源支持

可以把 70 種外部數(shù)據(jù)源 (包括 Mysql, Oracle, CSV, hadoop …) 當(dāng)成自己數(shù)據(jù)庫(kù)中的表來(lái)查詢。Postgres有一個(gè)針對(duì)這一難題的解決方案:一個(gè)名為“外部數(shù)據(jù)封裝器(Foreign Data Wrapper,F(xiàn)DW)”的特性。該特性最初由PostgreSQL社區(qū)領(lǐng)袖Dave Page四年前根據(jù)SQL標(biāo)準(zhǔn)SQL/MED(SQL Management of External Data)開發(fā)。FDW提供了一個(gè)SQL接口,用于訪問(wèn)遠(yuǎn)程數(shù)據(jù)存儲(chǔ)中的遠(yuǎn)程大數(shù)據(jù)對(duì)象,使DBA可以整合來(lái)自不相關(guān)數(shù)據(jù)源的數(shù)據(jù),將它們存入Postgres數(shù)據(jù)庫(kù)中的一個(gè)公共模型。這樣,DBA就可以訪問(wèn)和操作其它系統(tǒng)管理的數(shù)據(jù),就像在本地Postgres表中一樣。例如,使用FDW for MongoDB,數(shù)據(jù)庫(kù)管理員可以查詢來(lái)自文檔數(shù)據(jù)庫(kù)的數(shù)據(jù),并使用SQL將它與來(lái)自本地Postgres表的數(shù)據(jù)相關(guān)聯(lián)。借助這種方法,用戶可以將數(shù)據(jù)作為行、列或JSON文檔進(jìn)行查看、排序和分組。他們甚至可以直接從Postgres向源文檔數(shù)據(jù)庫(kù)寫入(插入、更細(xì)或刪除)數(shù)據(jù),就像一個(gè)一體的無(wú)縫部署。也可以對(duì)Hadoop集群或MySQL部署做同樣的事。FDW使Postgres可以充當(dāng)企業(yè)的中央聯(lián)合數(shù)據(jù)庫(kù)或“Hub”。

7)沒(méi)有字符串長(zhǎng)度限制

一般關(guān)系型數(shù)據(jù)庫(kù)的字符串有限定長(zhǎng)度8k左右,無(wú)限長(zhǎng) TEXT 類型的功能受限,只能作為外部大數(shù)據(jù)訪問(wèn)。而PostgreSQL的 TEXT 類型可以直接訪問(wèn),SQL語(yǔ)法內(nèi)置正則表達(dá)式,可以索引,還可以全文檢索,或使用xml xpath。MySQL 的各種text字段有不同的限制,要手動(dòng)區(qū)分 small text, middle text, large text… PostgreSQL 沒(méi)有這個(gè)限制,text 能支持各種大小。

8)支持圖結(jié)構(gòu)數(shù)據(jù)存儲(chǔ)

沒(méi)有具體使用過(guò),具體可以自己搜索下。參考鏈接:

9)支持窗口函數(shù)

窗口函數(shù)提供跨行相關(guān)的當(dāng)前查詢行集執(zhí)行計(jì)算的能力。僅當(dāng)調(diào)用跟著OVER子句的聚集函數(shù),作為窗口函數(shù);否則它們作為常規(guī)的聚合函數(shù)。窗口也是一種分組,但和 group by 的分組不同。窗口,可以提供分組之外,還可以執(zhí)行對(duì)每個(gè)窗口進(jìn)行計(jì)算??梢韵嘞癯墒莋roup by 后,然后對(duì)每個(gè)分組進(jìn)行計(jì)算,而不像Group by ,只是單純地分組。MySQL 不支持 OVER 子句, 而PostgreSQL支持。OVER 子句能簡(jiǎn)單的解決 “每組取 top 5” 的這類問(wèn)題。MySQL支持的SQL語(yǔ)法(ANSI SQL標(biāo)準(zhǔn))的很小一部分。不支持遞歸查詢、通用表表達(dá)式(Oracle的with 語(yǔ)句)或者窗口函數(shù)(分析函數(shù))。

10)對(duì)索引的支持更強(qiáng)

PostgreSQL 的可以使用函數(shù)和條件索引,這使得PostgreSQL數(shù)據(jù)庫(kù)的調(diào)優(yōu)非常靈活,mysql就沒(méi)有這個(gè)功能,條件索引在web應(yīng)用中很重要。對(duì)于索引類型:

MySQL:取決于存儲(chǔ)引擎。MyISAM:BTREE,InnoDB:BTREE。

PostgreSQL:支持 B-樹、哈希、R-樹和 Gist 索引。

InnoDB的表和索引都是按相同的方式存儲(chǔ)。也就是說(shuō)表都是索引組織表。這一般要求主鍵不能太長(zhǎng)而且插入時(shí)的主鍵最好是按順序遞增,否則對(duì)性能有很大影響。PostgreSQL不存在這個(gè)問(wèn)題。

索引類型方面,MySQL取決于存儲(chǔ)引擎。MyISAM:BTREE,InnoDB:BTREE。PostgreSQL支持 B-樹、哈希、R-樹和 Gist 索引。

11)集群支持更好

Mysql Cluster可能與你的想象有較大差異。開源的cluster軟件較少。復(fù)制(Replication)功能是異步的并且有很大的局限性。例如,它是單線程的(single-threaded),因此一個(gè)處理能力更強(qiáng)的Slave的恢復(fù)速度也很難跟上處理能力相對(duì)較慢的Master。

PostgreSQL有豐富的開源cluster軟件支持。plproxy 可以支持語(yǔ)句級(jí)的鏡像或分片,slony 可以進(jìn)行字段級(jí)的同步設(shè)置,standby 可以構(gòu)建WAL文件級(jí)或流式的讀寫分離集群,同步頻率和集群策略調(diào)整方便,操作非常簡(jiǎn)單。

另外,PostgreSQL的主備復(fù)制屬于物理復(fù)制,相對(duì)于MySQL基于binlog的邏輯復(fù)制,數(shù)據(jù)的一致性更加可靠,復(fù)制性能更高,對(duì)主機(jī)性能的影響也更小。對(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ù)制。

12)事務(wù)隔離做的更好

MySQL 的事務(wù)隔離級(jí)別 repeatable read 并不能阻止常見的并發(fā)更新, 得加鎖才可以, 但悲觀鎖會(huì)影響性能, 手動(dòng)實(shí)現(xiàn)樂(lè)觀鎖又復(fù)雜. 而 PostgreSQL 的列里有隱藏的樂(lè)觀鎖 version 字段, 默認(rèn)的 repeatable read 級(jí)別就能保證并發(fā)更新的正確性, 并且又有樂(lè)觀鎖的性能。

13)對(duì)于字符支持更好一些

MySQL 里需要 utf8mb4 才能顯示 emoji 的坑, PostgreSQL 沒(méi)這個(gè)坑。

14)對(duì)表連接支持較完整

對(duì)表連接支持較完整,MySQL只有一種表連接類型:嵌套循環(huán)連接(nested-loop),不支持排序-合并連接(sort-merge join)與散列連接(hash join)。PostgreSQL都支持。

15)存儲(chǔ)方式支持更大的數(shù)據(jù)量

PostgreSQL主表采用堆表存放,MySQL采用索引組織表,能夠支持比MySQL更大的數(shù)據(jù)量。

16)時(shí)間精度更高

MySQL對(duì)于時(shí)間、日期、間隔等時(shí)間類型沒(méi)有秒以下級(jí)別的存儲(chǔ)類型,而PostgreSQL可以精確到秒以下。

17)優(yōu)化器的功能較完整

MySQL對(duì)復(fù)雜查詢的處理較弱,查詢優(yōu)化器不夠成熟,explain看執(zhí)行計(jì)劃的結(jié)果簡(jiǎn)單。性能優(yōu)化工具與度量信息不足。

PostgreSQL很強(qiáng)大的查詢優(yōu)化器,支持很復(fù)雜的查詢處理。explain返回豐富的信息。提供了一些性能視圖,可以方便的看到發(fā)生在一個(gè)表和索引上的select、delete、update、insert統(tǒng)計(jì)信息,也可以看到cache命中率。網(wǎng)上有一個(gè)開源的pgstatspack工具。

18)序列支持更好

MySQL 不支持多個(gè)表從同一個(gè)序列中取 id, 而 PostgreSQL 可以。

19)對(duì)子查詢支持更好

對(duì)子查詢的支持。雖然在很多情況下在SQL語(yǔ)句中使用子查詢效率低下,而且絕大多數(shù)情況下可以使用帶條件的多表連接來(lái)替代子查詢,但是子查詢的存在在很多時(shí)候仍然不可避免。而且使用子查詢的SQL語(yǔ)句與使用帶條件的多表連接相比具有更高的程序可讀性。幾乎任何數(shù)據(jù)庫(kù)的子查詢 (subquery) 性能都比 MySQL 好。

20)增加列更加簡(jiǎn)單

MySQL表增加列,基本上是重建表和索引,會(huì)花很長(zhǎng)時(shí)間。PostgreSQL表增加列,只是在數(shù)據(jù)字典中增加表定義,不會(huì)重建表.

MySQL相對(duì)于PostgreSQL的優(yōu)勢(shì)

1)MySQL比PostgreSQL更流行

流行對(duì)于一個(gè)商業(yè)軟件來(lái)說(shuō),也是一個(gè)很重要的指標(biāo),流行意味著更多的用戶,意味著經(jīng)受了更多的考驗(yàn),意味著更好的商業(yè)支持、意味著更多、更完善的文檔資料。易用,很容易安裝。第三方工具,包括可視化工具,讓用戶能夠很容易入門。

2)回滾實(shí)現(xiàn)更優(yōu)

innodb的基于回滾段實(shí)現(xiàn)的MVCC機(jī)制,相對(duì)PG新老數(shù)據(jù)一起存放的基于XID的MVCC機(jī)制,是占優(yōu)的。新老數(shù)據(jù)一起存放,需要定時(shí)觸發(fā)VACUUM,會(huì)帶來(lái)多余的IO和數(shù)據(jù)庫(kù)對(duì)象加鎖開銷,引起數(shù)據(jù)庫(kù)整體的并發(fā)能力下降。而且VACUUM清理不及時(shí),還可能會(huì)引發(fā)數(shù)據(jù)膨脹。

3)在Windows上運(yùn)行更可靠

與PostgreSQL相比,MySQL更適宜在Windows環(huán)境下運(yùn)行。MySQL作為一個(gè)本地的Windows應(yīng)用程序運(yùn)行(在 NT/Win2000/WinXP下,是一個(gè)服務(wù)),而PostgreSQL是運(yùn)行在Cygwin模擬環(huán)境下。PostgreSQL在Windows下運(yùn)行沒(méi)有MySQL穩(wěn)定,應(yīng)該是可以想象的。

4)線程模式相比進(jìn)程模式的優(yōu)勢(shì)

MySQL使用了線程,而PostgreSQL使用的是進(jìn)程。在不同線程之間的環(huán)境轉(zhuǎn)換和訪問(wèn)公用的存儲(chǔ)區(qū)域顯然要比在不同的進(jìn)程之間要快得多。

進(jìn)程模式對(duì)多CPU利用率比較高。進(jìn)程模式共享數(shù)據(jù)需要用到共享內(nèi)存,而線程模式數(shù)據(jù)本身就是在進(jìn)程空間內(nèi)都是共享的,不同線程訪問(wèn)只需要控制好線程之間的同步。

線程模式對(duì)資源消耗比較少。所以MySQL能支持遠(yuǎn)比PostgreSQL多的更多的連接。但PostgreSQL中有優(yōu)秀的連接池軟件軟件,如pgbouncer和pgpool,所以通過(guò)連接池也可以支持很多的連接。

5)權(quán)限設(shè)置上更加完善

MySQL在權(quán)限系統(tǒng)上比PostgreSQL某些方面更為完善。PostgreSQL只支持對(duì)于每一個(gè)用戶在一個(gè)數(shù)據(jù)庫(kù)上或一個(gè)數(shù)據(jù)表上的 INSERT、SELECT和UPDATE/DELETE的授權(quán),而MySQL允許你定義一整套的不同的數(shù)據(jù)級(jí)、表級(jí)和列級(jí)的權(quán)限。對(duì)于列級(jí)的權(quán)限, PostgreSQL可以通過(guò)建立視圖,并確定視圖的權(quán)限來(lái)彌補(bǔ)。MySQL還允許你指定基于主機(jī)的權(quán)限,這對(duì)于目前的PostgreSQL是無(wú)法實(shí)現(xiàn)的,但是在很多時(shí)候,這是有用的。

6)存儲(chǔ)引擎插件化機(jī)制

MySQL的存儲(chǔ)引擎插件化機(jī)制,使得它的應(yīng)用場(chǎng)景更加廣泛,比如除了innodb適合事務(wù)處理場(chǎng)景外,myisam適合靜態(tài)數(shù)據(jù)的查詢場(chǎng)景。

7)適應(yīng)24/7運(yùn)行

MySQL可以適應(yīng)24/7運(yùn)行。在絕大多數(shù)情況下,你不需要為MySQL運(yùn)行任何清除程序。PostgreSQL目前仍不完全適應(yīng)24/7運(yùn)行,這是因?yàn)槟惚仨毭扛粢欢螘r(shí)間運(yùn)行一次VACUUM。

8)更加試用于簡(jiǎn)單的場(chǎng)景

PostgreSQL只支持堆表,不支持索引組織表,Innodb只支持索引組織表。

索引組織表的優(yōu)勢(shì):表內(nèi)的數(shù)據(jù)就是按索引的方式組織,數(shù)據(jù)是有序的,如果數(shù)據(jù)都是按主鍵來(lái)訪問(wèn),那么訪問(wèn)數(shù)據(jù)比較快。而堆表,按主鍵訪問(wèn)數(shù)據(jù)時(shí),是需要先按主鍵索引找到數(shù)據(jù)的物理位置。

索引組織表的劣勢(shì):索引組織表中上再加其它的索引時(shí),其它的索引記錄的數(shù)據(jù)位置不再是物理位置,而是主鍵值,所以對(duì)于索引組織表來(lái)說(shuō),主鍵的值不能太大,否則占用的空間比較大。

對(duì)于索引組織表來(lái)說(shuō),如果每次在中間插入數(shù)據(jù),可能會(huì)導(dǎo)致索引分裂,索引分裂會(huì)大大降低插入的性能。所以對(duì)于使用innodb來(lái)說(shuō),我們一般最好讓主鍵是一個(gè)無(wú)意義的序列,這樣插入每次都發(fā)生在最后,以避免這個(gè)問(wèn)題。

由于索引組織表是按一個(gè)索引樹,一般它訪問(wèn)數(shù)據(jù)塊必須按數(shù)據(jù)塊之間的關(guān)系進(jìn)行訪問(wèn),而不是按物理塊的訪問(wèn)數(shù)據(jù)的,所以當(dāng)做全表掃描時(shí)要比堆表慢很多,這可能在OLTP中不明顯,但在數(shù)據(jù)倉(cāng)庫(kù)的應(yīng)用中可能是一個(gè)問(wèn)題。

總結(jié)

MySQL從一開始就沒(méi)有打算做所有事情,因而它在功能方面有一定的局限性,并不能滿足一些先進(jìn)應(yīng)用程序的要求。MySQL對(duì)某些功能(例如引用、事務(wù)、審計(jì)等)的實(shí)現(xiàn)方式使得它與其他的關(guān)系型數(shù)據(jù)庫(kù)相比缺少了一些可靠性。對(duì)于簡(jiǎn)單繁重的讀取操作,使用PostgreSQL可能有點(diǎn)小題大做,同時(shí)性能也比MySQL這樣的同類產(chǎn)品要差。除非你需要絕對(duì)的數(shù)據(jù)完整性,ACID遵從性或者設(shè)計(jì)復(fù)雜,否則PostgreSQL對(duì)于簡(jiǎn)單的場(chǎng)景而言有點(diǎn)多余。

如何你確定只在MySQL和PostgreSQL中進(jìn)行選擇,以下規(guī)則總是有效的:

如果你的操作系統(tǒng)是Windows,你應(yīng)該使用MySQL。

當(dāng)絕對(duì)需要可靠性和數(shù)據(jù)完整性的時(shí)候,PostgreSQL是更好的選擇。

如果需要數(shù)據(jù)庫(kù)執(zhí)行定制程序,那么可擴(kuò)展的PostgreSQL是更好的選擇。

你的應(yīng)用處理的是地理數(shù)據(jù),由于R-TREES的存在,你應(yīng)該使用PostgreSQL。

如果你對(duì)數(shù)據(jù)庫(kù)并不了十分了解,甚至不知道事務(wù)、存儲(chǔ)過(guò)程等究竟是什么,你應(yīng)該使用MySQL。

MySQL與PostgreSQL比較 哪個(gè)數(shù)據(jù)庫(kù)更好

特性 MySQL PostgreSQL

實(shí)例 通過(guò)執(zhí)行 MySQL 命令(mysqld)啟動(dòng)實(shí)例。一個(gè)實(shí)例可以管理一個(gè)或多個(gè)數(shù)據(jù)庫(kù)。一臺(tái)服務(wù)器可以運(yùn)行多個(gè) mysqld 實(shí)例。一個(gè)實(shí)例管理器可以監(jiān)視 mysqld 的各個(gè)實(shí)例。

通過(guò)執(zhí)行 Postmaster 進(jìn)程(pg_ctl)啟動(dòng)實(shí)例。一個(gè)實(shí)例可以管理一個(gè)或多個(gè)數(shù)據(jù)庫(kù),這些數(shù)據(jù)庫(kù)組成一個(gè)集群。集群是磁盤上的一個(gè)區(qū)域,這個(gè)區(qū)域在安裝時(shí)初始化并由一個(gè)目錄組成,所有數(shù)據(jù)都存儲(chǔ)在這個(gè)目錄中。使用 initdb 創(chuàng)建第一個(gè)數(shù)據(jù)庫(kù)。一臺(tái)機(jī)器上可以啟動(dòng)多個(gè)實(shí)例。

數(shù)據(jù)庫(kù) 數(shù)據(jù)庫(kù)是命名的對(duì)象集合,是與實(shí)例中的其他數(shù)據(jù)庫(kù)分離的實(shí)體。一個(gè) MySQL 實(shí)例中的所有數(shù)據(jù)庫(kù)共享同一個(gè)系統(tǒng)編目。 數(shù)據(jù)庫(kù)是命名的對(duì)象集合,每個(gè)數(shù)據(jù)庫(kù)是與其他數(shù)據(jù)庫(kù)分離的實(shí)體。每個(gè)數(shù)據(jù)庫(kù)有自己的系統(tǒng)編目,但是所有數(shù)據(jù)庫(kù)共享 pg_databases。

數(shù)據(jù)緩沖區(qū) 通過(guò) innodb_buffer_pool_size 配置參數(shù)設(shè)置數(shù)據(jù)緩沖區(qū)。這個(gè)參數(shù)是內(nèi)存緩沖區(qū)的字節(jié)數(shù),InnoDB 使用這個(gè)緩沖區(qū)來(lái)緩存表的數(shù)據(jù)和索引。在專用的數(shù)據(jù)庫(kù)服務(wù)器上,這個(gè)參數(shù)最高可以設(shè)置為機(jī)器物理內(nèi)存量的 80%。 Shared_buffers 緩存。在默認(rèn)情況下分配 64 個(gè)緩沖區(qū)。默認(rèn)的塊大小是 8K??梢酝ㄟ^(guò)設(shè)置 postgresql.conf 文件中的 shared_buffers 參數(shù)來(lái)更新緩沖區(qū)緩存。

數(shù)據(jù)庫(kù)連接 客戶機(jī)使用 CONNECT 或 USE 語(yǔ)句連接數(shù)據(jù)庫(kù),這時(shí)要指定數(shù)據(jù)庫(kù)名,還可以指定用戶 id 和密碼。使用角色管理數(shù)據(jù)庫(kù)中的用戶和用戶組。 客戶機(jī)使用 connect 語(yǔ)句連接數(shù)據(jù)庫(kù),這時(shí)要指定數(shù)據(jù)庫(kù)名,還可以指定用戶 id 和密碼。使用角色管理數(shù)據(jù)庫(kù)中的用戶和用戶組。

身份驗(yàn)證 MySQL 在數(shù)據(jù)庫(kù)級(jí)管理身份驗(yàn)證。 基本只支持密碼認(rèn)證。 PostgreSQL 支持豐富的認(rèn)證方法:信任認(rèn)證、口令認(rèn)證、Kerberos 認(rèn)證、基于 Ident 的認(rèn)證、LDAP 認(rèn)證、PAM 認(rèn)證

加密 可以在表級(jí)指定密碼來(lái)對(duì)數(shù)據(jù)進(jìn)行加密。還可以使用 AES_ENCRYPT 和 AES_DECRYPT 函數(shù)對(duì)列數(shù)據(jù)進(jìn)行加密和解密??梢酝ㄟ^(guò) SSL 連接實(shí)現(xiàn)網(wǎng)絡(luò)加密。 可以使用 pgcrypto 庫(kù)中的函數(shù)對(duì)列進(jìn)行加密/解密。可以通過(guò) SSL 連接實(shí)現(xiàn)網(wǎng)絡(luò)加密。

審計(jì) 可以對(duì) querylog 執(zhí)行 grep。 可以在表上使用 PL/pgSQL 觸發(fā)器來(lái)進(jìn)行審計(jì)。

查詢解釋 使用 EXPLAIN 命令查看查詢的解釋計(jì)劃。 使用 EXPLAIN 命令查看查詢的解釋計(jì)劃。

備份、恢復(fù)和日志 InnoDB 使用寫前(write-ahead)日志記錄。支持在線和離線完全備份以及崩潰和事務(wù)恢復(fù)。需要第三方軟件才能支持熱備份。 在數(shù)據(jù)目錄的一個(gè)子目錄中維護(hù)寫前日志。支持在線和離線完全備份以及崩潰、時(shí)間點(diǎn)和事務(wù)恢復(fù)。 可以支持熱備份。

JDBC 驅(qū)動(dòng)程序 可以從 參考資料 下載 JDBC 驅(qū)動(dòng)程序。 可以從 參考資料 下載 JDBC 驅(qū)動(dòng)程序。

表類型 取決于存儲(chǔ)引擎。例如,NDB 存儲(chǔ)引擎支持分區(qū)表,內(nèi)存引擎支持內(nèi)存表。 支持臨時(shí)表、常規(guī)表以及范圍和列表類型的分區(qū)表。不支持哈希分區(qū)表。 由于PostgreSQL的表分區(qū)是通過(guò)表繼承和規(guī)則系統(tǒng)完成了,所以可以實(shí)現(xiàn)更復(fù)雜的分區(qū)方式。

索引類型 取決于存儲(chǔ)引擎。MyISAM:BTREE,InnoDB:BTREE。 支持 B-樹、哈希、R-樹和 Gist 索引。

約束 支持主鍵、外鍵、惟一和非空約束。對(duì)檢查約束進(jìn)行解析,但是不強(qiáng)制實(shí)施。 支持主鍵、外鍵、惟一、非空和檢查約束。

存儲(chǔ)過(guò)程和用戶定義函數(shù) 支持 CREATE PROCEDURE 和 CREATE FUNCTION 語(yǔ)句。存儲(chǔ)過(guò)程可以用 SQL 和 C++ 編寫。用戶定義函數(shù)可以用 SQL、C 和 C++ 編寫。 沒(méi)有單獨(dú)的存儲(chǔ)過(guò)程,都是通過(guò)函數(shù)實(shí)現(xiàn)的。用戶定義函數(shù)可以用 PL/pgSQL(專用的過(guò)程語(yǔ)言)、PL/Tcl、PL/Perl、PL/Python 、SQL 和 C 編寫。

觸發(fā)器 支持行前觸發(fā)器、行后觸發(fā)器和語(yǔ)句觸發(fā)器,觸發(fā)器語(yǔ)句用過(guò)程語(yǔ)言復(fù)合語(yǔ)句編寫。 支持行前觸發(fā)器、行后觸發(fā)器和語(yǔ)句觸發(fā)器,觸發(fā)器過(guò)程用 C 編寫。

系統(tǒng)配置文件 my.conf Postgresql.conf

數(shù)據(jù)庫(kù)配置 my.conf Postgresql.conf

客戶機(jī)連接文件 my.conf pg_hba.conf

XML 支持 有限的 XML 支持。 有限的 XML 支持。

數(shù)據(jù)訪問(wèn)和管理服務(wù)器 OPTIMIZE TABLE —— 回收未使用的空間并消除數(shù)據(jù)文件的碎片

myisamchk -analyze —— 更新查詢優(yōu)化器所使用的統(tǒng)計(jì)數(shù)據(jù)(MyISAM 存儲(chǔ)引擎)

mysql —— 命令行工具

MySQL Administrator —— 客戶機(jī) GUI 工具 Vacuum —— 回收未使用的空間

Analyze —— 更新查詢優(yōu)化器所使用的統(tǒng)計(jì)數(shù)據(jù)

psql —— 命令行工具

pgAdmin —— 客戶機(jī) GUI 工具

并發(fā)控制 支持表級(jí)和行級(jí)鎖。InnoDB 存儲(chǔ)引擎支持 READ_COMMITTED、READ_UNCOMMITTED、REPEATABLE_READ 和 SERIALIZABLE。使用 SET TRANSACTION ISOLATION LEVEL 語(yǔ)句在事務(wù)級(jí)設(shè)置隔離級(jí)別。 支持表級(jí)和行級(jí)鎖。支持的 ANSI 隔離級(jí)別是 Read Committed(默認(rèn) —— 能看到查詢啟動(dòng)時(shí)數(shù)據(jù)庫(kù)的快照)和 Serialization(與 Repeatable Read 相似 —— 只能看到在事務(wù)啟動(dòng)之前提交的結(jié)果)。使用 SET TRANSACTION 語(yǔ)句在事務(wù)級(jí)設(shè)置隔離級(jí)別。使用 SET SESSION 在會(huì)話級(jí)進(jìn)行設(shè)置。

MySQL相對(duì)于PostgreSQL的劣勢(shì):

MySQL

PostgreSQL

最重要的引擎InnoDB很早就由Oracle公司控制。目前整個(gè)MySQL數(shù)據(jù)庫(kù)都由Oracle控制。

BSD協(xié)議,沒(méi)有被大公司壟斷。

對(duì)復(fù)雜查詢的處理較弱,查詢優(yōu)化器不夠成熟

很強(qiáng)大的查詢優(yōu)化器,支持很復(fù)雜的查詢處理。

只有一種表連接類型:嵌套循環(huán)連接(nested-loop),不支持排序-合并連接(sort-merge join)與散列連接(hash join)。

都支持

性能優(yōu)化工具與度量信息不足

提供了一些性能視圖,可以方便的看到發(fā)生在一個(gè)表和索引上的select、delete、update、insert統(tǒng)計(jì)信息,也可以看到cache命中率。網(wǎng)上有一個(gè)開源的pgstatspack工具。

InnoDB的表和索引都是按相同的方式存儲(chǔ)。也就是說(shuō)表都是索引組織表。這一般要求主鍵不能太長(zhǎng)而且插入時(shí)的主鍵最好是按順序遞增,否則對(duì)性能有很大影響。

不存在這個(gè)問(wèn)題。

大部分查詢只能使用表上的單一索引;在某些情況下,會(huì)存在使用多個(gè)索引的查詢,但是查詢優(yōu)化器通常會(huì)低估其成本,它們常常比表掃描還要慢。

不存在這個(gè)問(wèn)題

表增加列,基本上是重建表和索引,會(huì)花很長(zhǎng)時(shí)間。

表增加列,只是在數(shù)據(jù)字典中增加表定義,不會(huì)重建表

存儲(chǔ)過(guò)程與觸發(fā)器的功能有限??捎脕?lái)編寫存儲(chǔ)過(guò)程、觸發(fā)器、計(jì)劃事件以及存儲(chǔ)函數(shù)的語(yǔ)言功能較弱

除支持pl/pgsql寫存儲(chǔ)過(guò)程,還支持perl、python、Tcl類型的存儲(chǔ)過(guò)程:pl/perl,pl/python,pl/tcl。

也支持用C語(yǔ)言寫存儲(chǔ)過(guò)程。

不支持Sequence。

支持

不支持函數(shù)索引,只能在創(chuàng)建基于具體列的索引。

不支持物化視圖。

支持函數(shù)索引,同時(shí)還支持部分?jǐn)?shù)據(jù)索引,通過(guò)規(guī)則系統(tǒng)可以實(shí)現(xiàn)物化視圖的功能。

執(zhí)行計(jì)劃并不是全局共享的, 僅僅在連接內(nèi)部是共享的。

執(zhí)行計(jì)劃共享

MySQL支持的SQL語(yǔ)法(ANSI SQL標(biāo)準(zhǔn))的很小一部分。不支持遞歸查詢、通用表表達(dá)式(Oracle的with 語(yǔ)句)或者窗口函數(shù)(分析函數(shù))。

都 支持

不支持用戶自定義類型或域(domain)

支持。

對(duì)于時(shí)間、日期、間隔等時(shí)間類型沒(méi)有秒以下級(jí)別的存儲(chǔ)類型

可以精確到秒以下。

身份驗(yàn)證功能是完全內(nèi)置的,不支持操作系統(tǒng)認(rèn)證、PAM認(rèn)證,不支持LDAP以及其它類似的外部身份驗(yàn)證功能。

支持OS認(rèn)證、Kerberos 認(rèn)證 、Ident 的認(rèn)證、LDAP 認(rèn)證、PAM 認(rèn)證

不支持database link。有一種叫做Federated的存儲(chǔ)引擎可以作為一個(gè)中轉(zhuǎn)將查詢語(yǔ)句傳遞到遠(yuǎn)程服務(wù)器的一個(gè)表上,不過(guò),它功能很粗糙并且漏洞很多

有dblink,同時(shí)還有一個(gè)dbi-link的東西,可以連接到oracle和mysql上。

Mysql Cluster可能與你的想象有較大差異。開源的cluster軟件較少。

復(fù)制(Replication)功能是異步的,并且有很大的局限性.例如,它是單線程的(single-threaded),因此一個(gè)處理能力更強(qiáng)的Slave的恢復(fù)速度也很難跟上處理能力相對(duì)較慢的Master.

有豐富的開源cluster軟件支持。

explain看執(zhí)行計(jì)劃的結(jié)果簡(jiǎn)單。

explain返回豐富的信息。

類似于ALTER TABLE或CREATE TABLE一類的操作都是非事務(wù)性的.它們會(huì)提交未提交的事務(wù),并且不能回滾也不能做災(zāi)難恢復(fù)

DDL也是有事務(wù)的。

PostgreSQL主要優(yōu)勢(shì):

1. PostgreSQL完全免費(fèi),而且是BSD協(xié)議,如果你把PostgreSQL改一改,然后再拿去賣錢,也沒(méi)有人管你,這一點(diǎn)很重要,這表明了PostgreSQL數(shù)據(jù)庫(kù)不會(huì)被其它公司控制。oracle數(shù)據(jù)庫(kù)不用說(shuō)了,是商業(yè)數(shù)據(jù)庫(kù),不開放。而MySQL數(shù)據(jù)庫(kù)雖然是開源的,但現(xiàn)在隨著SUN被oracle公司收購(gòu),現(xiàn)在基本上被oracle公司控制,其實(shí)在SUN被收購(gòu)之前,MySQL中最重要的InnoDB引擎也是被oracle公司控制的,而在MySQL中很多重要的數(shù)據(jù)都是放在InnoDB引擎中的,反正我們公司都是這樣的。所以如果MySQL的市場(chǎng)范圍與oracle數(shù)據(jù)庫(kù)的市場(chǎng)范圍沖突時(shí),oracle公司必定會(huì)犧牲MySQL,這是毫無(wú)疑問(wèn)的。

2. 與PostgreSQl配合的開源軟件很多,有很多分布式集群軟件,如pgpool、pgcluster、slony、plploxy等等,很容易做讀寫分離、負(fù)載均衡、數(shù)據(jù)水平拆分等方案,而這在MySQL下則比較困難。

3. PostgreSQL源代碼寫的很清晰,易讀性比MySQL強(qiáng)太多了,懷疑MySQL的源代碼被混淆過(guò)。所以很多公司都是基本PostgreSQL做二次開發(fā)的。

4. PostgreSQL在很多方面都比MySQL強(qiáng),如復(fù)雜SQL的執(zhí)行、存儲(chǔ)過(guò)程、觸發(fā)器、索引。同時(shí)PostgreSQL是多進(jìn)程的,而MySQL是線程的,雖然并發(fā)不高時(shí),MySQL處理速度快,但當(dāng)并發(fā)高的時(shí)候,對(duì)于現(xiàn)在多核的單臺(tái)機(jī)器上,MySQL的總體處理性能不如PostgreSQL,原因是MySQL的線程無(wú)法充分利用CPU的能力。

目前只想到這些,以后想到再添加,歡迎大家拍磚。

PostgreSQL與oracle或InnoDB的多版本實(shí)現(xiàn)的差別

PostgreSQL與oracle或InnoDB的多版本實(shí)現(xiàn)最大的區(qū)別在于最新版本和歷史版本是否分離存儲(chǔ),PostgreSQL不分,而oracle和InnoDB分,而innodb也只是分離了數(shù)據(jù),索引本身沒(méi)有分開。

PostgreSQL的主要優(yōu)勢(shì)在于:

1. PostgreSQL沒(méi)有回滾段,而oracle與innodb有回滾段,oracle與Innodb都有回滾段。對(duì)于oracle與Innodb來(lái)說(shuō),回滾段是非常重要的,回滾段損壞,會(huì)導(dǎo)致數(shù)據(jù)丟失,甚至數(shù)據(jù)庫(kù)無(wú)法啟動(dòng)的嚴(yán)重問(wèn)題。另由于PostgreSQL沒(méi)有回滾段,舊數(shù)據(jù)都是記錄在原先的文件中,所以當(dāng)數(shù)據(jù)庫(kù)異常crash后,恢復(fù)時(shí),不會(huì)象oracle與Innodb數(shù)據(jù)庫(kù)那樣進(jìn)行那么復(fù)雜的恢復(fù),因?yàn)閛racle與Innodb恢復(fù)時(shí)同步需要redo和undo。所以PostgreSQL數(shù)據(jù)庫(kù)在出現(xiàn)異常crash后,數(shù)據(jù)庫(kù)起不來(lái)的幾率要比oracle和mysql小一些。

2. 由于舊的數(shù)據(jù)是直接記錄在數(shù)據(jù)文件中,而不是回滾段中,所以不會(huì)象oracle那樣經(jīng)常報(bào)ora-01555錯(cuò)誤。

3. 回滾可以很快完成,因?yàn)榛貪L并不刪除數(shù)據(jù),而oracle與Innodb,回滾時(shí)很復(fù)雜,在事務(wù)回滾時(shí)必須清理該事務(wù)所進(jìn)行的修改,插入的記錄要?jiǎng)h除,更新的記錄要更新回來(lái)(見row_undo函數(shù)),同時(shí)回滾的過(guò)程也會(huì)再次產(chǎn)生大量的redo日志。

4. WAL日志要比oracle和Innodb簡(jiǎn)單,對(duì)于oracle不僅需要記錄數(shù)據(jù)文件的變化,還要記錄回滾段的變化。

PostgreSQL的多版本的主要劣勢(shì)在于:

1、最新版本和歷史版本不分離存儲(chǔ),導(dǎo)致清理老舊版本需要作更多的掃描,代價(jià)比較大,但一般的數(shù)據(jù)庫(kù)都有高峰期,如果我們合理安排VACUUM,這也不是很大的問(wèn)題,而且在PostgreSQL9.0中VACUUM進(jìn)一步被加強(qiáng)了。

2、由于索引中完全沒(méi)有版本信息,不能實(shí)現(xiàn)Coverage index scan,即查詢只掃描索引,直接從索引中返回所需的屬性,還需要訪問(wèn)表。而oracle與Innodb則可以;

進(jìn)程模式與線程模式的對(duì)比

PostgreSQL和oracle是進(jìn)程模式,MySQL是線程模式。

進(jìn)程模式對(duì)多CPU利用率比較高。

進(jìn)程模式共享數(shù)據(jù)需要用到共享內(nèi)存,而線程模式數(shù)據(jù)本身就是在進(jìn)程空間內(nèi)都是共享的,不同線程訪問(wèn)只需要控制好線程之間的同步。

線程模式對(duì)資源消耗比較少。

所以MySQL能支持遠(yuǎn)比oracle多的更多的連接。

對(duì)于PostgreSQL的來(lái)說(shuō),如果不使用連接池軟件,也存在這個(gè)問(wèn)題,但PostgreSQL中有優(yōu)秀的連接池軟件軟件,如pgbouncer和pgpool,所以通過(guò)連接池也可以支持很多的連接。


網(wǎng)頁(yè)名稱:包含postgresql劣勢(shì)的詞條
標(biāo)題來(lái)源:http://weahome.cn/article/dsdjcjd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部