Diomidis Spinellis

為什麼選擇資料庫#

如果你的應用程式需要處理大量、持久且相互關聯的資料集,不要猶豫,把它存進關聯式資料庫(relational database)。過去 RDBMS 昂貴、稀少、複雜且笨重,但現在已不再如此:

  • 你使用的系統很可能已經安裝了一兩個 RDBMS
  • MySQL、PostgreSQL 等強大的 RDBMS 已作為**開源軟體(open source)**提供,購買成本不再是問題
  • **嵌入式資料庫(embedded database)**如 SQLite 和 HSQLDB 可以直接作為程式庫連結到應用程式中,幾乎不需要設定或管理,而且效率極高

資料庫的效能優勢#

當應用程式的資料量大於系統 RAM 時,經過索引的 RDBMS 表格會比程式庫的 map collection 快上數個數量級,因為後者會導致虛擬記憶體分頁劇烈抖動(thrashing)。現代資料庫可以輕鬆隨需求成長,也能從嵌入式資料庫擴展到更大的系統,甚至從免費開源切換到更強大的商用系統。

關聯式模型的強項#

使用 RDBMS 還有以下重要優勢:

  • 宣告式約束(declarative constraints):你可以用宣告式的方式描述資料的一致性約束,避免在邊界情況下忘記更新而產生懸空指標。例如指定「當使用者被刪除時,該使用者發送的訊息也應一併移除」
  • 高效的關聯連結:只需建立索引,就能在資料庫中的實體之間建立高效的連結,無需進行昂貴的類別欄位重構
  • 多應用程式並行存取:資料庫允許多個應用程式安全地存取你的資料,方便升級與並行使用
  • 多語言多平台開發:可以用最合適的語言與平台開發應用程式的各個部分,例如用 Java 寫 XML 後端、用 Ruby 寫稽核腳本、用 Processing 寫視覺化介面

SQL 的威力#

掌握 SQL 之後,撰寫以資料庫為中心的應用程式會是一件愉快的事。

  • 將資料正確正規化後,可以用可讀的 SQL 查詢高效擷取資料,不需要撰寫複雜程式碼
  • 一條 SQL 指令就能執行複雜的資料變更
  • 對於一次性的修改,甚至不需要寫程式——直接透過資料庫的 SQL 介面操作即可
  • SQL 介面也允許你用查詢來進行實驗,跳過一般程式語言的編譯-編輯循環

效能優化由資料庫代勞#

RDBMS 會努力優化你的 SQL 指令,讓你可以專注在應用程式的功能上,而非演算法調校。進階資料庫系統甚至能自動利用多核心處理器,隨著技術進步,你的應用程式效能也會跟著提升。