如何定義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
相關文章
- PFMEA如何定義範圍?
- python如何定義函式Python函式
- 如何定義良好的API?API
- 前端如何定義一個常量前端
- 模型的列表定義中,使用函式時如何定義引數?模型函式
- php變數的型別是如何轉換的?常量如何定義?系統常量是如何定義的?PHP變數型別
- 如何正確定義效能瓶頸
- 敏捷開發中如何定義“完成”?敏捷
- grafana如何使用定義的變數Grafana變數
- [Vue] 如何定義全域性的方法?Vue
- Python如何定義一個函式Python函式
- 如何定義API業務模型? - henriqAPI模型
- MacBook Pro如何自定義設定快捷鍵?Mac
- 如何定義專案的成功標準?
- 二、自定義垂直ViewGroup如何設定marginView
- NoSQLSQL
- 什麼是介面?如何定義介面?如何實現介面?
- 如何在函式內部定義函式?函式
- 寶塔皮膚如何設定自定義404
- SAP Spartacus 如何重定義登入 Login Component
- JavaScript中是如何定義私有變數的JavaScript變數
- Springbean定義SpringBean
- 巨集定義
- 需求定義
- 聊聊 NoSQLSQL
- 如何提高程式碼複用性,定義骨架?
- CRM系統是如何定義銷售漏斗的?
- 如何設定 GNOME 顯示自定義幻燈片
- 雲端IDE如何重定義開發體驗IDE
- 在Qml 中定義訊號並如何觸發
- 如何自定義 3/4 層 DDoS 保護設定
- 如何優雅的定義統一響應物件物件
- 在Java中是如何定義和宣告介面的?Java
- Python私有變數如何定義?Python學習教程!Python變數
- 什麼是Python函式?如何定義函式?Python函式
- 如何選擇合適的NoSQL資料庫SQL資料庫
- 定義製造業操作(定義 MES/MOM 系統)
- XML Schema定義XML
- Linus 定義 LinuxLinux