NoSQL 定義

2012 年 1 月 9 日

我們開始著手撰寫 Nosql Distilled 時,就面臨了一個棘手的難題 - 我們在寫什麼?什麼才是 NoSQL 資料庫?這個概念沒有明確的定義、沒有商標、沒有標準組織,甚至沒有宣言。

這個術語最初出現在 2009 年 6 月 11 日 由 Johan Oskarsson 在舊金山舉辦的 非正式聚會 上。[1]在該場次中,有來自 Voldemort、Cassandra、Dynomite、HBase、Hypertable、CouchDB 和 MongoDB 的簡報。這個術語迅速流行起來,很少有人會爭辯說只有在該次會議中提到的資料庫才應該稱為 NoSQL。

事實上,這個名稱本身就常常出現轉折:許多 NoSQL 的倡議者表示,這並不表示「不」使用 SQL,而是表示不只使用 SQL。在這一點上,我認為將個別資料庫與 NoSQL 倡議者認為未來的生態系統區分開來是有用的。當我們說「x 是 NoSQL 資料庫」時,我認為將 NoSQL 解釋為「不只」是愚蠢的,因為那會讓這個術語失去意義。(你可能會合理地爭辯說 SQL Server(假設)是一個 NoSQL 資料庫。)所以我認為最好說「NoSQL 資料庫」是一個「no-sql」資料庫。你應該另外將 NoSQL 生態系統解釋為「不只」 - 儘管我比較喜歡使用 PolyglotPersistence 這個術語。[2]

即使解決了這個問題,要定義 NoSQL 資料庫仍然不容易。任何不使用 SQL 的資料庫都符合資格嗎?像 IMSMUMPS 這種較舊的資料庫技術如何?沒有 SQL 的關聯式系統(例如早期的 Ingres)呢?如果有人設法將 SQL 介面栓接到原始七重奏之一上會發生什麼事?

因此,在我們的書中,我們認為 NoSQL 是指最近資料庫的特定熱潮。這些資料庫之間有一些共同的特徵,但沒有任何特徵是定義性的。

  • 不使用關聯式模型(或 SQL 語言)
  • 開源
  • 設計為在大型叢集上執行
  • 基於 21 世紀網路屬性的需求
  • 沒有架構,允許在沒有控制的情況下將欄位新增到任何記錄

雖然我習慣了軟體產業中定義的模糊界線,但我承認我的心又沉了一下。但重要的是,這些資料庫為我們在未來幾十年建構應用程式的方式提供了重要的附加功能。缺乏明確的定義將不會對它們未來的成功造成任何影響。

備註

1: 儘管這是我們現在使用「NoSQL」的起源,但這並不是第一次有人使用「NoSQL」這個詞。這個詞最早用於 90 年代後期的 開源關聯式資料庫 的名稱,這是由 Carlo Strozzi 領導的專案。這個名稱並沒有引起太多關注,除了術語上的巧合之外,與當今用法的「NoSQL」沒有任何關係。

2: 如果我們採用「不只」的詮釋,那麼我們應該寫「NOSQL」而不是「NoSQL」。我幾乎總是看到它寫成「NoSQL」。