講者是 PostgreSQL-Consulting LLC 的 CEO,這篇簡報分享的是「PostgreSQL 最差實踐」。

PostgreSQL worst practices

以下摘錄幾點分項說明:

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

異地數據中心的資料副本採用同步策略。

評: 如果你超級信任你的雲平台,可以這麼做。

最後

以上,請記得簡報分享的是「最差實踐」。