如何定義NoSQL

發表於2012-02-21

  本文的作者是著名的技術作家、敏捷軟體開發宣言的編寫人Martin Fowler,本文是他在編寫一本關於NoSQL的新書《NoSQL Distilled》時附帶寫出的一篇部落格。

  當我們開始著手寫《NosqlDistilled》的時候,我們遇到了一個棘手的問題——要寫什麼?究竟什麼是NoSQL資料庫?對這個概念我們沒有發現一個很權威的定義,沒有任何商標註冊,沒有標準化組織,甚至沒有一個宣言。

  NoSQL這個術語最初出現在2009年6月11日在舊金山由Johan Oskarsson組織的一個非正式的會議上。與會人員來自Voldemort,
Cassandra, Dynomite, HBase, Hypertable, CouchDB, VPork, 以及MongoDB的公司。這個詞迅速的被人們注意到,有人認為只有出席了這次會議的幾個資料庫公司的產品才是NoSQL。

  事實上,就是對NoSQL這個名字本身的理解也是有分歧的:很多NoSQL的倡導者認為它不僅僅指的是”No” to SQL,應該把它理解成Not Only SQL才對。對於此,我認為,應該從目前的資料庫生態環境中分離出一個獨立的資料庫型別,這樣對NoSQL的未來更有好處。當我們說“x 是一個NoSQL資料庫”時,我認為把NoSQL解釋成“Not Only”是愚蠢的,因為這會讓這個術語變得沒有價值。(因為這樣一來你實際上可以認為SQL Server也是一個NoSQL資料庫)。我們應該把NoSQL的“not only”做另外一種理解——儘管這個時候我更願意使用PolyglotPersistence這個詞。

  雖然有這麼多的討論,定義如何才是一個NoSQL資料庫仍然不那麼容易。難道所有不使用SQL的資料庫都有資格叫這個名字嗎?那如何看待那些更老的資料庫如IMSMUMPS呢?如何看待那些沒有SQL的關係型資料庫系統(例如早期的Ingres)?如果有人試圖在這最初的八種資料庫上外掛一個SQL介面呢?

  所以,對於我們這本書來說,我們採取的觀點是,NoSQL是目前的資料庫家族的外來者。它們有些通用的特徵,但沒有一個是被明確定義的。

  • 不使用關聯式資料庫模型(或SQL語言)
  • 開源
  • 針對大型叢集而設計
  • 基於21世紀網際網路特徵的需求
  • 沒有schema,可以在任何時候向一條記錄新增新欄位

  雖然在軟體產業裡我們已經習慣了這種模糊的邊界定義,但我承認當看到又多了這樣一個定義後,心裡還是有些不爽。但重要的是,在我們以後數十年的開發工作中,這些資料庫提供了我們重要的補充。在未來普遍使用的過程中,這些不清晰的定義頂多就像一個蚊子的叮咬。

英文原文:NosqlDefinition

相關文章