如何選擇高速存儲、查詢數據庫

做者:方圓
連接:https://www.zhihu.com/question/20010554/answer/15863274
來源:知乎
著做權歸做者全部,轉載請聯繫做者得到受權。 mysql

1、 PostgreSQL 的穩定性極強, Innodb 等引擎在崩潰、斷電之類的災難場景下抗打擊能力有了長足進步,然而不少 MySQL 用戶都遇到過Server級的數據庫丟失的場景——mysql系統庫是MyISAM的,相比之下,PG數據庫這方面要好一些。
2、任何系統都有它的性能極限,在高併發讀寫,負載逼近極限下,PG的性能指標仍能夠維持雙曲線甚至對數曲線,到頂峯以後再也不降低,而 MySQL 明顯出現一個波峯後下滑(5.5版本以後,在企業級版本中有個插件能夠改善不少,不過須要付費)。
3、PG 多年來在 GIS 領域處於優點地位,由於它有豐富的幾何類型,實際上不止幾何類型,PG有大量字典、數組、bitmap 等數據類型,相比之下mysql就差不少,instagram就是由於PG的空間數據庫擴展POSTGIS遠遠強於MYSQL的my spatial而採用PGSQL的。
4、PG 的「無鎖定」特性很是突出,甚至包括 vacuum 這樣的整理數據空間的操做,這個和PGSQL的MVCC實現有關係。
5、PG 的可使用函數和條件索引,這使得PG數據庫的調優很是靈活,mysql就沒有這個功能,條件索引在web應用中很重要。
6、PG有極其強悍的 SQL 編程能力(9.x 圖靈完備,支持遞歸!),有很是豐富的統計函數和統計語法支持,好比分析函數(ORACLE的叫法,PG裏叫window函數),還能夠用多種語言來寫存儲過程,對於R的支持也很好。這一點上MYSQL就差的很遠,不少分析功能都不支持,騰訊內部數據存儲主要是MYSQL,可是數據分析主要是HADOOP+PGSQL(聽李元佳說過,可是沒有驗證過)。
7、PG 的有多種集羣架構能夠選擇,plproxy 能夠支持語句級的鏡像或分片,slony 能夠進行字段級的同步設置,standby 能夠構建WAL文件級或流式的讀寫分離集羣,同步頻率和集羣策略調整方便,操做很是簡單。
8、通常關係型數據庫的字符串有限定長度8k左右,無限長 TEXT 類型的功能受限,只能做爲外部大數據訪問。而 PG 的 TEXT 類型能夠直接訪問,SQL語法內置正則表達式,能夠索引,還能夠全文檢索,或使用xml xpath。用PG的話,文檔數據庫均可以省了。
九,對於WEB應用來講,複製的特性很重要,mysql到如今也是異步複製,pgsql能夠作到同步,異步,半同步複製。還有mysql的同步是基於binlog複製,相似oracle golden gate,是基於stream的複製,作到同步很困難,這種方式更加適合異地複製,pgsql的複製基於wal,能夠作到同步複製。同時,pgsql還提供stream複製。
十,pgsql對於numa架構的支持比mysql強一些,比MYSQL對於讀的性能更好一些,pgsql提交能夠徹底異步,而mysql的內存表不夠實用(由於表鎖的緣由)
最後說一下我感受 PG 不如 MySQL 的地方。
第一,MySQL有一些實用的運維支持,如 slow-query.log ,這個pg確定能夠定製出來,可是若是能夠配置使用就更好了。
第二是mysql的innodb引擎,能夠充分優化利用系統全部內存,超大內存下PG對內存使用的不那麼充分,
第三點,MySQL的複製能夠用多級從庫,可是在9.2以前,PGSQL不能用從庫帶從庫。
第四點,從測試結果上看,mysql 5.5的性能提高很大,單機性能強於pgsql,5.6應該會強更多.
第五點,對於web應用來講,mysql 5.6 的內置MC API功能很好用,PGSQL差一些。
另一些:
pgsql和mysql都是背後有商業公司,並且都不是一個公司。大部分開發者,都是拿工資的。
說mysql的執行速度比pgsql快不少是不對的,速度接近,並且不少時候取決於你的配置。
對於存儲過程,函數,視圖之類的功能,如今兩個數據庫均可以支持了。
另外多線程架構和多進程架構之間沒有絕對的好壞,oracle在unix上是多進程架構,在windows上是多線程架構。
不少pg應用也是24/7的應用,好比skype. 最近幾個版本VACUUM基本不影響PGSQL 運行,8.0以後的PGSQL不須要cygwin就能夠在windows上運行。
至於說對於事務的支持,mysql和pgsql都沒有問題。 git

 

MySQL 處理樹狀回覆的設計會很複雜, 並且須要寫不少代碼, 而 Pg 能夠高效處理樹結構:  http://www.slideshare.net/quipo/trees-in-the-database-advanced-data-structures github

它能夠高效處理圖結構, 輕鬆實現 "朋友的朋友的朋友" 這種功能: web

FDW--它能夠把 70 種外部數據源 (包括 Mysql, Oracle, CSV, hadoop ...) 當成本身數據庫中的表來查詢:  https://wiki.postgresql.org/wiki/FDW?nocache=1 正則表達式

 

 

 

postgres數據庫 性能測試:http://blog.csdn.net/bigbigtreewhu/article/details/51545288 sql

postrgres數據庫 高可用性,負載均衡,複製與集羣方案介紹  : https://my.oschina.net/liuyuanyuangogo/blog/497746 數據庫

 

阿里SQL介紹:  http://www.infoq.com/cn/news/2016/09/AliSQL-ali-cloud-AliSQL編程

TokuDB的特色驗證 : http://www.tuicool.com/articles/vAbIFjbwindows

阿里SQL測試報告樣例 : https://github.com/alibaba/AliSQL/wiki/AliSQL-Performance-benchmark數組

阿里SQL秒殺場景測試報告樣例:  https://github.com/alibaba/AliSQL/wiki/AliSQL-Performance-benchmark-for-inventory

相關文章
相關標籤/搜索