一篇文章帶你弄懂什么是 NoSQL
一、什么是 NoSQL
NoSQL是一類非 SQL(關系)數據庫,使用預定義表和列之外的其他數據模型。此類包含許多不同類型的數據庫以及數據存儲和操作的方法。
二、什么是 SQL
NoSQL與幾十年來事實上的標準關系 (SQL) 數據庫相對立。SQL 數據庫將數據存儲在由具有嚴格數據類型的列組成的預定義表中。表可以具有唯一性(表中行之間的關系)、檢查約束(驗證一行中的數據)或外鍵約束(不同表中數據之間的關系)。
示例關系數據模型:

SQL是一種標準查詢語言,用于定義、操作和搜索關系數據庫中的數據。
基本 SQL 查詢:
select customer_no, first_name, last_name, last_purchase
from customers
where address_state = 'CA'
為什么關系數據庫還不夠?
- 模式的靈活性——關系數據庫具有固定的模式,這意味著它們只能保存由數據庫管理員預定義的對象(在表中)和屬性(在列中)(寫入模式)。
- 開發中的敏捷性——必須在寫入數據之前定義模式使得開發數據庫的速度要慢得多。在 NoSQL 數據庫中,您可以只編寫數據并在需要讀取數據時擔心它們的數據格式(讀取模式),這使開發更加敏捷。
- 數據大小——許多 NoSQL 數據庫在構建時都考慮到了大規模數據,并且能夠存儲大量行或對象,從而犧牲了對其完整性的管理。
三、NoSQL 數據庫的類型
1、文檔數據庫
文檔數據庫將數據存儲在 JSON 文檔中,這些文檔是鍵值對的分層集合。文檔可能很復雜,并且包含子文檔和列表。
這是代表客戶的示例文檔:
{
"id": "1",
"name":{
"firstName":"John",
"lastName": "Doe"
},
"address":{
"street":"Lombard street",
"city": "San Francisco",
"state": "CA",
"country": "US",
}
}
流行的文檔數據庫:
- MongoDB
- DynamoDB
- Couchbase
- CouchDB
2、鍵值存儲
鍵值存儲是最基本的 NoSQL 數據庫,將數據存儲在簡單的鍵值對中(在最簡單的情況下,兩者都是純字符串),這意味著您可以在特定標簽下存儲一些值。

Redis的一個例子:
> set customer1 JohnDoe
流行的鍵值存儲:
- Redis
- Berkley DB
3、圖數據庫
圖數據庫將數據表示為由節點和關系構建的網絡。

流行的圖數據庫:
- Neo4J
- Giraph
4、寬列存儲
寬列存儲存儲類似于關系數據庫,它們將數據存儲在表中,但數據是按列物理組織的。寬列數據庫中的數據是稀疏的,這意味著空列不占用空間,并且允許在表中創建數百、數千甚至數百萬列。

流行的寬列數據庫:
- Apache Cassandra。
- Apache HBase。
- Google Bigtable。



























