支援矩陣收斂史:告別 MySQL 與 SQLite 的決策帳
基底範本最初的野心是「三種資料庫都支援」:postgres、mysql、sqlite。半年後我把矩陣收斂成 postgres only——這篇記下這筆決策帳,因為「刪掉支援」比「增加支援」難談,也更值得談。
MySQL 先退場
翻遍部署紀錄:從來沒有一個場景真的用 mysql,driver 甚至沒安裝過。它卻在真實地收租:
- 沒有 partial index——jobs 去重的「唯一性只覆蓋未完成狀態」設計,被迫繞成程式邏輯改寫欄位的迂迴版。
- UPDATE 的
affected是「changed」語意(值沒變就不算)——併發控制的判斷要多繞一層。
為一個想像中的用戶,讓所有真實用戶的設計變醜——這筆帳一算清楚,退場毫無懸念。刪掉繞道那天,jobs 的去重契約直接刻進了索引定義裡,程式碼少了一坨,語意深了一層。
SQLite 隨後
sqlite 的實際工作只剩承載 e2e 測試。但測試打的引擎跟生產不同,等於併發行為、鎖語意、SQL 方言全都測了個寂寞。e2e 改打真 postgres 後,sqlite 的最後一個存在理由消失——退場換到:刪除整層雙 driver 分支、原生模組依賴減一、e2e 有了真併發。
帶走的原則
支援矩陣是負債表,不是功能清單。 每多支援一個引擎,就是每個新功能都要在最弱的交集裡設計——你付出的不是「多一份適配程式碼」,而是永遠不能使用超出交集的能力。沒有真實需求撐著的相容性,砍掉的那天全是紅利。留一份「重新加回去要做什麼」的路線圖文件,把門留著——但門票錢,等真的有人要進來再付。
讀到這裡若有一點收穫,替這顆種子澆一次水——匿名、一人一次。
⇄ 被這些筆記引用