PostgreSQL worst practices
講者是 PostgreSQL-Consulting LLC 的 CEO,這篇簡報分享的是「PostgreSQL 最差實踐」。
以下摘錄幾點分項說明:
1. Move joins to your application
不要在資料庫 JOIN,而是移至 Application 進行。
評: 通常 DBA 設計資料庫時未必會考慮外部接口需求,此時資料庫進行 JOIN 會比 Application 好。但講師沒提的是,當結構與外部接口整合時,Application 處理 JOIN 會比資料庫有效得多。然後為什麼一定要用 JOIN ?要用 JOIN 是因為你結構設計的關係,有不需要 JOIN 的結構設計。
2. Be in trend, be schema-less
不要設計資料庫結構 (Schema),改用 JSONB。
評: 很多人為了彈性直接使用 JSONB,但往往這可能是災難的開始,優秀結構 Schema 設計仍然有好處。
3. Use ORM
無論如何,請使用 ORM。
評: ORM 使用不當很容易變成災難,如果不想寫 Pure SQL,我個人建議可以選擇 SQL Builder。
4. Try to create as many indexes as you can
建愈多 Index 愈好。
評: 相信很多人都知道不是愈多 Index 就愈好。
5. Always keep all your time series data
保留所有時間序列的資料。
評: 不是所有,而是按級分置儲存。
6. Turn autovacuum off
關閉 autovacuum。
評: 通常想早點升天的才會關閉 autovacuum。
7. Keep master and slave on different hardware
Master 和 Slave 使用不同等級的硬體。
評: 千萬不要,相信我,請盡量用一樣的硬體。
8. Never use Foreign Keys
不要使用 Foreign Keys。
評: 如果需要高度正確一致性需求,仍然建議使用 Foreign Key。
9. Always use text type for all columns
所有欄位都用 text 資料型態。
評: DBA 瘋了才會這麼做。
10. Postgres likes long transactions
PostgreSQL 喜歡長事務處理。
評: 別傻了,東西不是愈長愈好。
11. Put a synchronous replica to remote DC
異地數據中心的資料副本採用同步策略。
評: 如果你超級信任你的雲平台,可以這麼做。
最後
以上,請記得簡報分享的是「最差實踐」。