Mysql

離線客戶端使用 SQLite 時,伺服器最好使用 MySQL 或 PostgreSQL?

  • September 7, 2017

我正在開發一個使用嵌入式 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 對視窗/分析函式和公用表表達式(CTEs - 也稱為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) - 不需要像SphinxLucene這樣的輔助工具。

如果您正在(ab)使用 SQLite 的“眾所周知的怪癖”,即它“不強制執行類型檢查”——複製時會遇到問題——儘管 MySQL 也會遇到同樣的問題。

引用自:https://dba.stackexchange.com/questions/185286