如何定義NoSQL
本文的作者是著名的技術作家、敏捷軟體開發宣言的編寫人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的資料庫都有資格叫這個名字嗎?那如何看待那些更老的資料庫如IMS 或 MUMPS呢?如何看待那些沒有SQL的關係型資料庫系統(例如早期的Ingres)?如果有人試圖在這最初的八種資料庫上外掛一個SQL介面呢?
所以,對於我們這本書來說,我們採取的觀點是,NoSQL是目前的資料庫家族的外來者。它們有些通用的特徵,但沒有一個是被明確定義的。
- 不使用關聯式資料庫模型(或SQL語言)
- 開源
- 針對大型叢集而設計
- 基於21世紀網際網路特徵的需求
- 沒有schema,可以在任何時候向一條記錄新增新欄位
雖然在軟體產業裡我們已經習慣了這種模糊的邊界定義,但我承認當看到又多了這樣一個定義後,心裡還是有些不爽。但重要的是,在我們以後數十年的開發工作中,這些資料庫提供了我們重要的補充。在未來普遍使用的過程中,這些不清晰的定義頂多就像一個蚊子的叮咬。
英文原文:NosqlDefinition
相關文章
- 如何學習NoSQL?SQL
- 如何定義良好的API?API
- 前端如何定義一個常量前端
- python如何定義函式Python函式
- 如何定義API業務模型? - henriqAPI模型
- 如何定義和建立架構架構
- 如何定義Xsd檔案
- 模型的列表定義中,使用函式時如何定義引數?模型函式
- SQL vs NoSQL:如何選擇?SQL
- php變數的型別是如何轉換的?常量如何定義?系統常量是如何定義的?PHP變數型別
- 敏捷開發中如何定義“完成”?敏捷
- 如何正確定義效能瓶頸
- 寶塔皮膚如何設定自定義404
- Python如何定義一個函式Python函式
- MacBook Pro如何自定義設定快捷鍵?Mac
- 如何定義專案的成功標準?
- 什麼是介面?如何定義介面?如何實現介面?
- JavaScript中是如何定義私有變數的JavaScript變數
- 二、自定義垂直ViewGroup如何設定marginView
- IT專案經理是如何定義“成功”的
- 如何在函式內部定義函式?函式
- NoSQLSQL
- Item定義
- 需求定義
- 如何自定義 3/4 層 DDoS 保護設定
- 在Java中是如何定義和宣告介面的?Java
- 如何提高程式碼複用性,定義骨架?
- CRM系統是如何定義銷售漏斗的?
- 開發者探討:獨立遊戲如何衡量和定義成功遊戲
- 如何優雅的定義統一響應物件物件
- 如何設定 GNOME 顯示自定義幻燈片
- js物件導向程式設計:如何定義常量?JS物件程式設計
- 如何刪除使用export定義過的變數?Export變數
- 如何藉助 NoSQL 提高 JPA 應用效能SQL
- 定義製造業操作(定義 MES/MOM 系統)
- 人工智慧如何定義下一代晶片?人工智慧晶片
- 什麼是Python函式?如何定義函式?Python函式
- 如何在Mac上設定自定義鎖屏訊息?Mac