給PostgreSQL愛好者的參考資料

出處 http://blog.163.com/digoal@126/blog/static/163877040201172183022203/


給PostgreSQL愛好者的參考資料  

2011-08-21 08:32:39|  分類: PostgreSQL|舉報|字號 訂閱

推薦書籍:

概念書籍:

《PostgreSQL Introduction and Concepts》

開發書籍:

《PostgreSQL開發必備參考手冊》

管理類書籍:

《PostgreSQL 9 Administration Cookbook》

《PostgreSQL 9.0 High Performance》

《PostgreSQL Server Programming》

《How PostgreSQL Processes a Query》

瞭解內核 : 

    http://www.postgresql.org/developer/backend/

    http://wiki.postgresql.org/wiki/Backend_flowchart

《數據庫查詢優化器的藝術:原理解析與SQL性能優化》 - 海翔老師

《 PostgreSQL 內核分析》 - 彭老師

官方手冊:

http://www.postgresql.org/docs/

翰高翻譯的中文手冊:

http://www.highgo.com.cn/hgdb/docs

培訓類PPT:

《PostgreSQL Inside 系列》 

《PostgreSQL DBA培訓PPT》


代碼樹:

http://doxygen.postgresql.org/

代碼提交集:

https://commitfest.postgresql.org/

項目GIT:

http://git.postgresql.org

PostgreSQL GITHUB鏡像

https://github.com/postgres/postgres

PostgreSQL JDBC 驅動:


http://jdbc.postgresql.org

http://jdbc.postgresql.org/development/privateapi/

PostgreSQL ODBC 驅動:

http://www.postgresql.org/ftp/odbc/versions/src/

PostgreSQL 擴展插件:


http://pgfoundry.org

http://pgxn.org/


GUI工具(pgAdmin):

http://www.pgadmin.org/

安全漏洞:

http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=postgresql

中文社區:

http://bbs.pgsqldb.com

中文官網

http://www.postgres.cn

國外FAQ社區, BLOG:


http://www.pgcon.org/

https://www.postgresql.us/

http://www.itpug.org/

http://www.pgug.de/

http://www.diapug.org/

http://stackoverflow.com/questions/tagged/postgresql


http://momjian.us

http://www.pgexperts.com

http://blog.2ndquadrant.com/en

其他推薦網站:

http://db.cs.berkeley.edu

http://mariposa.cs.berkeley.edu/

http://www.postgresql.org


http://wiki.postgresql.org/wiki/Todo

http://wiki.postgresql.org/wiki/Development_information

http://wiki.postgresql.org

http://www.pgbuildfarm.org

https://github.com/aggregateknowledge/postgresql-hll

http://www.postgis.org/

http://workshops.opengeo.org/postgis-intro/

http://www.opengeospatial.org/

http://code.google.com

https://developers.google.com/

http://www.perzl.org/aix/

http://db-engines.com/en/

http://pgmag.org/

http://planet.postgresql.org/

http://www.cybertec.at/

http://www.translattice.com/

http://citusdata.com/

http://www.dbms2.com/

http://www.informationweek.com/

http://www.infoq.com/

http://www.actian.com/

http://aws.amazon.com/redshift/

http://sourceforge.net/projects/postgres-xc/

http://www.postgres-xl.org/

http://madlib.net/

http://research.google.com/index.html

http://postgresql.1045698.n5.nabble.com/

http://blog.163.com/digoal%40126


推薦PostgreSQL 專業QQ羣:

3336901


書籍打包下載:

如有需要請聯繫QQ: 276732431, 或留言留下您的郵箱. 文件超過100MB, 郵箱需要支持大附件才能接收. 

或者到以下網盤下載.

http://yun.baidu.com/share/link?shareid=3626307544&uk=1982970774


PostgreSQL 培訓視頻

http://www.tudou.com/home/digoal

視頻下載地址

http://blog.163.com/digoal@126/blog/static/16387704020141229159715/

PostgreSQL TODO & 軟肋, 

大多數軟件都有坑, 如果把握不好, 那就掉坑裏去了, PostgreSQL亦如此, 爲避免初次接觸PostgreSQL的朋友掉坑裏去, 這裏羅列了一些PostgreSQL的軟肋和TODO, 大家可以參考一下.

todo

1. http://wiki.postgresql.org/wiki/Todo

2. 基於WAL的多主複製(9.4可能會實現)

3. 多CPU資源利用, 如並行查詢

4. shared nothing 架構(目前需要插件來實現如plproxy, pgpool-ii)

5. 基於塊的增量基礎備份(目前只有基於WAL的增量備份)

6. query cache, 如count(*)性能提升

7. toast 閾值可配置(目前只能在編譯時指定)

8. 使用ssd作爲二級緩存

9. PostgreSQL 目前一個集羣只支持1個block_size, 這種不利於複雜場景的使用, 例如我們在同一個數據庫中有大量的OLTP請求, 同時還有大數據的頻繁導入需求的情況下, 選擇小的block_size或者大的block_size都不合適, 如果能針對每個表指定不同的block_size的話可以很好的解決這一的問題.  當然如果數據庫中存在不同大小的block_size, 那麼隨之而來的改動是非常大的, 例如shared buffer也必須兼容不同大小的block size.

在Oracle 9中, 支持一個數據庫中存在不同的數據塊大小. 

10. PostgreSQL的配置文件是直接編輯的, 沒有像oracle這樣的spfile, 當然9.4會支持alter system來修改, 但是<=9.3的沒有, 修改文件容易出錯, 不安全, 錯誤的話會導致數據庫集羣無法啓動.

11. 目前開源的postgresql不支持函數加密. 安全性較低.

12. 目前移動表空間(如alter table tbl set tablespace newtbs;)會產生大量的XLOG, 這個應該是可以優化的.

13. 流複製異步模式下, failover後, 可能因爲主備xlog的差異需要重做standby. 目前可以通過rsync減少網絡傳輸, 或者zfs snapshot來將OLD PRIMARY回退到以前的狀態達到切換成standby的目的. 

14. 沒有表空間配額限制, 目前只能通過文件系統使用配額來簡單的限制.

15. 沒有rotate table, 類似mongoDB的capped collection. 限制記錄條數, 空間, 或記錄時長, 超過限制就覆蓋最早的記錄 .

16. pg-xc, pg-xl的數據重分佈需要將數據從所有的數據節點加載到coordinator後, 在按照重分佈算法分發到新的所有節點.

17. 同步流複製的一點可能可以改進的地方, 例如只有一臺standby時, 如果standby異常或網絡原因導致XLOG無法同步複製到standby並返回feedback的話, 那麼在同步提交隊列中等待提交的xact將處於等待狀態, 一般的做法是使用2個或2個以上的standby來防止1個STANDBY故障時可以自動將同步standby節點向下轉移, XACT不需要等待. 那麼是不是可以有得選擇, 例如在等待多少秒之後自動切換成異步模式.

18. 目前沒有比較好的讀寫分離或shared-nothing解決方案, 例如

1. 通過中間件pgpool-II構建讀寫分離, 但是pgpool-II目前穩定性, 性能(tps)都不盡人意.

2. 使用pg-xc構建的shared-nothing, 性能(TPS)損耗太大, 同時全局一致性還原(PITR)目前還只有停留在創建barriers, 粒度無法達到gxid的粒度(因爲每個節點各管各自的XID).

3. 使用plproxy構建shared-nothing, 性能損失小, 但是沒有跨節點事務能力, 當然如果應用層願意使用 2PC來實現的話, 也是可以的. 另外, 接口必須是PLPROXY函數, 所以對應用來說適配較差.

軟肋

1. 讀寫併發管理通過新增行版本實現, 會帶來垃圾數據, 對於非HOT更新的話, 還會引起索引更新, 導致索引更容易膨脹.

2. 顯然這種MVCC機制不利於頻繁更新的應用場景, 同一條記錄被更新10次的話, 會產生10個版本的寫xlog和heap page的IO, 同時在VACUUM的時候還需要寫xlog以及heap page的IO. 這10個版本可能並不會同時存在, 但是卻實實在在的產生了這些寫IO.

3. 通過xid來識別版本, 且xid是32位存儲, XID是需要複用的, 所以經過一定的事務分配後需要freeze, 當然此MVCC機制的好處也是有的, 例如鎖粒度很小, 容易實現repeatable read和ssi. 會話層可實現跨越會話的一致性鏡像等.

4. 同樣MVCC帶來的問題, 在大數據庫中使用邏輯備份時(), 備份開始後產生的垃圾數據都無法被回收, 如果備份時間很長, 將導致數據庫膨脹比較厲害, 同時也會影響對象的freeze. 所以對大庫建議使用pitr備份方式. 

5. one-by-one的擴展數據塊使得對同一個對象進行大批量的並行數據導入的時候(例如並行COPY)會產生extend鎖等待問題. 影響導入性能. 參見 : http://blog.163.com/digoal@126/blog/static/163877040201392641033482

海翔老師發來一些互聯網上收集到的問題, 我謹表明下個人觀點.

PostgreSQL數據庫有一定了解, 或者嚐到甜頭的朋友大多都會有這樣的疑問, 爲什麼PostgreSQL好用卻沒有MySQL流行呢?

1 PGMySQL流行的原因

因爲沒有使用過MySQL, 所以不太好回答.


2 PG的優勢有哪些?(請例舉您認爲的最優優勢的5條,降序排列)

1. 社區活躍(每天都有commit, 每年全球大會, 每年全球地方性會議等), 運作穩定(主要貢獻者來自全球的諸多行業的諸多企業, 不會出現一家獨控的局面), git版本管理, wiki知識庫管理, BSD許可.


2. 血統純正, 以及豐富的第三方插件. PostgreSQL的分支只有1個, 不會出現分支衆多, 版本不統一的情況. 第三方插件非常多, 基本上都來自實際的需求.

postgreSQL插件的使用非常簡單, 因爲是模塊化形式的, 安裝好後, 加載到動態鏈接庫即可. (包括性能, 功能擴展, 融合, 管理等方面的插件.)


3. 流複製, 外部表接口, MPP, shared nothing

PG的流複製是基於塊的變更, 速度極其之快, 局域網內能實現毫秒級的延遲, 廣域網也不需要擔心網絡穩定性, 因爲是續傳的. 流複製可用於HA, 容災, 讀寫分離等場景.

9.4版本還會引入邏輯流複製, 可用於multi master的場景.

PG支持外部表接口, PG中可以直接讀寫其他數據源的數據, Oracle, MySQL. 適合混雜場景的使用, 或者數據遷移場景的使用.

MPP, PostgreSQL的第三方插件或者第三方商業軟件可以實現MPP的功能, 例如GreenPlum, PgPOOL-II, pg-xc, citusDB, postgres-xl等, 還可以結合HADOOP來使用.

shared nothing, postgresql第三方插件可以方便的實現shared nothing的功能, 例如plproxy, pgpool-ii, pg-xc等.


4. 數據類型豐富, 索引類型豐富, 可動態加載的模塊, 豐富的服務端函數

PG的數據類型非常的豐富, 同時支持自定義類型. 除了傳統的數據類型之外, 還支持例如range類型, IP類型, HSTORE類型, JSON類型, 

PG的索引訪問接口也非常豐富, 例如支持btree, hash, gist, gin, spgist等諸多索引訪問接口.

可動態加載的模塊, 用戶可自定義一些庫, 在需要使用時動態加載. 同時PG支持自定義鉤子應用的場景(_PG_init()).

豐富的服務端函數, 例如plpgsql, plpython, plperl, pltcl, pl-R, pljava, plv8, C等. 適用各種開發人員使用.


5. 兼容性, 穩定性, 可靠性, 性能, 後期維護, 審計需求等.

PG的兼容性非常好, 支持幾乎所有的硬件架構和操作系統.

穩定, 可靠, 性能卓越.

維護簡單, 諸多功能可以滿足審計需求.


3 PG在互聯網/傳統行業(有事務需求)/或其它行業的未來?

國內PG圈子越來越活躍, 包括傳統行業, 金融行業, 運營商, 互聯網行業, 政府都有使用. 

由於數據庫在業務系統中的重要性, 一般曾經未使用PG的公司會從不太重要的新項目着手嘗試使用PG, 嚐到甜頭後纔會有後續大規模應用的動作.

老的項目, 從其他數據庫遷移到PG的, 肯定是這些已有的數據庫無法滿足現階段或未來的需求. 例如可能是迫於成本的考慮, 又或者項目中依賴PG的一些特性.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章