[NoSQL](https://zh.wikipedia.org/wiki/NoSQL)
NoSQL是對不同于傳統的關系數據庫的數據庫管理系統的統稱。
兩者存在許多顯著的不同點,其中最重要的是NoSQL不使用SQL作為查詢語言。其數據存儲可以不需要固定的表格模式,也經常會避免使用SQL的JOIN操作,一般有水平可擴展性的特征。
## 發展歷史
NoSQL一詞最早出現于1998年,是Carlo Strozzi開發的一個輕量、開源、不提供SQL功能的關系數據庫[1]。
2009年,Last.fm的Johan Oskarsson發起了一次關于分布式開源數據庫的討論[2],來自Rackspace的Eric Evans再次提出了NoSQL的概念,這時的NoSQL主要指非關系型、分布式、不提供ACID的數據庫設計模式。
2009年在亞特蘭大舉行的"no:sql(east)"討論會是一個里程碑,其口號是"select fun, profit from real_world where relational=false;"。因此,對NoSQL最普遍的解釋是“非關聯型的”,強調Key-Value Stores和文檔數據庫的優點,而不是單純的反對RDBMS。
## 特點
當代典型的關系數據庫在一些數據敏感的應用中表現了糟糕的性能,例如為巨量文檔創建索引、高流量網站的網頁服務,以及發送流式媒體。[3]關系型數據庫的典型實現主要被調整用于執行規模小而讀寫頻繁,或者大批量極少寫訪問的事務。
NoSQL的結構通常提供弱一致性的保證,如最終一致性,或交易僅限于單個的數據項。不過,有些系統,提供完整的ACID保證在某些情況??下,增加了補充中間件層(例如,CloudTPS)[4]。有兩個成熟的系統有提供快照隔離的列存儲:像是Google基于過濾器系統的BigTable[5],和滑鐵盧大學開發的HBase[6]。這些系統,自主開發,使用類似的概念來實現多行(multi-row)分布式ACID交易的快照隔離(snapshot isolation)保證為基礎列存儲,無需額外的數據管理開銷,中間件系統部署或維護,減少了中間件層。
少數NoSQL系統部署了分布式結構,通常使用分布式散列表(DHT)將數據以冗余方式保存在多臺服務器上。依此,擴充系統時候添加服務器更容易,并且擴大了對服務器失效的承受能程度。[7]
##分類
1. 文檔存儲
| 名稱 | 語言 |
| --- | --- |
|BaseX| XQuery,Java|
|CouchDB| Erlang|
|eXist | XQuery|
|iBoxDB | Java,CSharp|
|Jackrabbit| Java|
|Lotus Notes| LotusScript,Java等|
|MarkLogic Server| XQuery|
|MongoDB |C++|
|OrientDB |Java|
|SimpleDB |Erlang|
|Terrastore |Java|
|ElasticSearch |Java|
|No2DB |C#|
2. 圖形關系存儲
| 名稱 | 語言 |
| --- | --- |
|AllegroGraph| SPARQL|
|DEX |Java , C#|
|Neo4j |Java|
|FlockDB| Scala|
3. 鍵-值(key‐value)存儲
**最終一致性的鍵-值存儲**
* Cassandra
* Dynamo
* Hibari
* Project Voldemort
* Riak
**架構性鍵-值儲存**
* GT.M
* InterSystem Globals
4. 主機式服務
**Key/value硬盤存儲**
* BigTable
* MemcacheDB
* LevelDB
* Tokyo Cabinet
* Tuple space
* TreapDB
**Key/value RAM存儲**
* Oracle Coherence
* memcached
* Citrusleaf database
* Velocity
* Redis
* Tuple space
**Key-value基于Paxos算法的存儲**
* Keyspace
5. 多數據庫
* OpenQM
* Rocket U2
* Revelation Software's OpenInsight
* Extensible Storage Engine(ESE/NT)
6. 時序型數據庫
| 名稱 | 語言 |
| --- | --- |
|Graphite |Python|
|InfluxDB |Go|
|Informix TimeSeries| Erlang|
|OpenTSDB |Java|
|RRDtool | C |
7. 對象數據庫[編輯]
* Versant Object Database
* db4o
* GemStone/S
* InterSystems Caché
* JADE
* Objectivity/DB
* ZODB
* ObjectStore
8. 列存儲[編輯]
* Cassandra
* HBase
* Hypertable
- 數據庫
- CAP定理
- 關系模型
- 關系數據庫
- NoSQL
- ODBC
- JDBC
- ODBC、JDBC和四種驅動類型
- mysql
- 安裝與配置
- CentOS 7 安裝 MySQL
- 優化
- 比較全面的MySQL優化參考
- 1、硬件層相關優化
- 1.1、CPU相關
- 1.2、磁盤I/O相關
- 2、系統層相關優化
- 2.1、文件系統層優化
- 2.2、其他內核參數優化
- 3、MySQL層相關優化
- 3.1、關于版本選擇
- 3.2、關于最重要的參數選項調整建議
- 3.3、關于Schema設計規范及SQL使用建議
- 3.4、其他建議
- 后記
- Mysql設計與優化專題
- ER圖,數據建模與數據字典
- 數據中設計中的范式與反范式
- 字段類型與合理的選擇字段類型
- 表的垂直拆分和水平拆分
- 詳解慢查詢
- mysql的最佳索引攻略
- 高手詳解SQL性能優化十條經驗
- 優化SQL查詢:如何寫出高性能SQL語句
- MySQL索引原理及慢查詢優化
- 數據庫SQL優化大總結之 百萬級數據庫優化方案
- 數據庫性能優化之SQL語句優化1
- 【重磅干貨】看了此文,Oracle SQL優化文章不必再看!
- MySQL 對于千萬級的大表要怎么優化?
- MySQL 數據庫設計總結
- MYSQL性能優化的最佳20+條經驗
- 數據操作
- 數據語句操作類型
- DCL
- 修改Mysql數據庫名的5種方法
- DML
- 連接
- 連接2
- DDL
- 數據類型
- 字符集
- 表引擎
- 索引
- MySQL理解索引、添加索引的原則
- mysql建索引的幾大原則
- 淺談mysql的索引設計原則以及常見索引的區別
- 常用工具簡介
- QA
- MySQL主機127.0.0.1與localhost區別總結
- 視圖(view)
- 觸發器
- 自定義函數和存儲過程的使用
- 事務(transaction)
- 范式與反范式
- 常用函數
- MySQL 數據類型 詳解
- Mysql數據庫常用分庫和分表方式
- 隔離級別
- 五分鐘搞清楚MySQL事務隔離級別
- mysql隔離級別及事務傳播
- 事務隔離級別和臟讀的快速入門
- 數據庫引擎中的隔離級別
- 事務隔離級別
- Innodb中的事務隔離級別和鎖的關系
- MySQL 四種事務隔離級的說明
- Innodb鎖機制:Next-Key Lock 淺談
- SQL函數和存儲過程的區別
- mongo
- MongoDB設置訪問權限、設置用戶
- redis
- ORM
- mybatis
- $ vs #
- mybatis深入理解(一)之 # 與 $ 區別以及 sql 預編譯
- 電商設計
- B2C電子商務系統研發——概述篇
- B2C電子商務系統研發——商品數據模型設計
- B2C電子商務系統研發——商品模塊E-R圖建模
- B2C電子商務系統研發——商品SKU分析和設計(一)
- B2C電子商務系統研發——商品SKU分析和設計(二)
- 數據庫命名規范--通用