幾個 MySQL 跳 PostgreSQL 的心得

我的 DBA 程度很遜(好吧,因為我樣樣都沾一點醬油,所以樣樣都很遜),這篇請不要期望有太多有營養的東西。

真正開始轉用 PostgreSQL 是因為它的 ltree 實在太好用,由於我的工作緣故需要能高效處理一個巨大階層樹結構(也就是物種名錄)的機制,而 MySQL 的解決方案我都覺得太迂迴、太阿雜,所以在我看到 ltree 之後,我就改投 PostgreSQL 麾下了。

我對各個 taxon 名稱予以 MD5 編碼後,再將階層存成 lable path,並建好索引。這樣處理一份有數十萬筆 taxa 的資料集,要找出任一 taxon 之下的全部子 taxon,在 PostgreSQL server 經過適當參數設定調校的環境下(見後述),瞬間就可得出結果。我當然是非常滿意。

之後我又用了 JSON 資料類型存一些 hash, array 的資料,發現我幾乎可以將 PostgreSQL 當作 MongoDB 的同質替代品來用,且沒有 32-bit 的最大容量限制,在我這裡迫於各種(我不知道的)因素未能安裝 x86-64 Linux 的伺服器,也能受惠於 JSON 式資料表述法的便利性。

一開始我用 MySQL 的觀念來用 PostgreSQL 當然是常常碰壁,譬如認證、權限系統的差異,譬如資料庫到資料表間還有層 schema。但是透過 pgAdmin 的輔助(如同 phpMyAdmin 在 MySQL 上的管理工具一哥/一姐地位),還有 PostgresSQL 明確的錯誤訊息以及詳盡的文件,適應也只是幾天內就搞定的小問題。

比較難的反而是當初要跨過自己設下的、懷疑是否真有必要「重複學習另一套資料庫軟體」的心理門檻。

至於效能,把 shared_buffers, temp_buffers, effective_cache_size 這三個預設值實在太過保守的參數調高,立即就拉上來了。這還是我在 ASUS EeeBox B202 開發機上 (Intel Atom N270, 2GB RAM) 跑出來的表現,拿到 production 的伺服器上跑就更猛了。

CC BY-SA 4.0 This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Leave a Reply

Your email address will not be published. Required fields are marked *