離線客戶端使用 SQLite 時,伺服器最好使用 MySQL 或 PostgreSQL?
我正在開發一個使用嵌入式 SQLite 進行本地儲存的應用程序。
我的應用程序會將更改複製到 Internet 伺服器(通過 REST/HTTP)。我可以在 MySQL/MariaDB 或 PostgreSQL 之間進行選擇。
我的數據庫非常“正常”,有很多表(~80),大部分只有幾列(最多~30),很多 M:N 關係,一些錶帶有文本數據(只有幾段長度)。我使用某種壓縮的 UUID 作為主鍵,因為它們必須是全域唯一的。
能夠進行不區分大小寫的全文搜尋幾乎是至關重要的。
我不會使用 JSON、觸發器和儲存函式/過程。
從特性和兼容性的角度來看(數據類型、NULL 的行為、LIKE、索引、BLOB 處理),我應該使用哪個 db-server?
我簡直是在對著我的螢幕**大喊“**使用 Postgresql! ”
SQLite 是 PostgreSQL 的門生。該連結是D. Richard Hipp(SQLite 的發明者,也是主要開發人員)在 PGCon 2014 上發表的演講。
此外,如果您查看SQLite wiki,您會發現以下行:
SQLite 使用 PostgreSQL 作為參考平台。“PostgreSQL 會做什麼”用於理解 SQL 標準。
$$ 9 $$$$ 10 $$一個主要的偏差是,除了主鍵之外,SQLite 不強制類型檢查。值的類型是動態的,不受模式的嚴格約束(儘管模式在儲存時會觸發轉換,如果這種轉換可能是可逆的)。SQLite 努力遵循 Postel 的規則。
PostgreSQL 支持
CHECK
約束,而 MySQL(令人震驚)不支持!MySQL 對視窗/分析函式和公用表表達式(CTE
s - 也稱為WITH
子句)的支持僅在 Beta 版中 - PostgreSQL 已經擁有它們多年!總的來說,從技術上講,PostgreSQL 是一個非常優秀的數據庫。
MySQL 之所以如此普及,很大程度上要歸功於運氣和良好的行銷——早在九十年代中期,它就在 Windows 上原生執行(PostgreSQL 現在也是如此),並在第一次網際網路繁榮之前採用 GPL。
即使這個問題不是專門針對 SQLite,我也會毫不猶豫地(99.9% 的情況)推薦 PostgreSQL 而不是 MySQL - PostgreSQL 還具有高級全文功能[1 , [2]](http://rachbelaid.com/postgres-full-text-search-is-good-enough/)並且也更適合這種功能- 開箱即用(感謝@a_horse_with_no_name) - 不需要像Sphinx或Lucene這樣的輔助工具。
如果您正在(ab)使用 SQLite 的“眾所周知的怪癖”,即它“不強制執行類型檢查”——複製時會遇到問題——儘管 MySQL 也會遇到同樣的問題。