近二十年來,隨著網際網路的興起,每天人們生成的資訊量也越來越大。關聯式資料庫在原始設計時,就需清楚定義關聯、存取的資料類型。如此一來,在資料的擴展性方面就沒辦法跟上現實的需求。
試想,若一間商店原本定義的商品格式如下:
name | price |
---|---|
ProductA | 588 |
回傳的 json 格式如下:
{
"name":"ProductA",
"price":588
}
若今天商家想要在商品欄位中增加一個 種類 Category 的欄位,若用關聯式資料庫的話,你可能會需要執行以下操作。
此外,在後端的資料庫內還沒有將以上的步驟執行完前,任何有種類相關資料的商品,都沒有辦法成功寫入資料庫。
非關聯式資料庫的查詢邏輯像是當你想從圖書館找一本書時,你會先用關鍵字從圖書館的系統中找出對應的文件編號。接著,你憑藉著這個編號把對應的書從架上取下來,但是每本書的所含的內容類型並不一定相同。
非關聯式資料庫,類似的資料可以存在一個 Collection 中,裡頭的每一筆資料則是一個 Document。每筆 Document 本身是以類似 JSON 模式的 key-value pair 去儲存資料,而且每個 Document 間的 key 並不需要完全相同。
{
"name":"ProductA",
"price":588
}
{
"name":"ProductB",
"price":900,
"rating":5
}
資料庫是可以同時允許這兩筆資料同時存在 Collection 中的,若你要再新增一筆如下的資料,也是沒問題的。
{
"name":"ProductC",
"price":588,
"description":"This is description."
}
換言之,NoSQL 非關聯式資料庫可謂避免了「資料結構」問題,但相對犧牲了彼此資料的一致性。