目錄

What is NoSQL

關聯式資料庫(RDBMS)

目前常用的資料庫,完全遵守 ACID 原則,在任何情況下(Atomicity)都可保持每個Transaction不成功則roll back,(Consistency)資料一致性,(Isolation)讀寫不互相干擾,(Duration)資料永久性(EX:SQL Server,PostgreSQL,MySQL…等) 且僅能支援垂直擴充,假設要應用在大量的資料的時候,只能透過硬體的升級(CPU 升級、加 HDD、增加 RAM…等)

非關聯式資料庫(NOSQL)

NOSQL(Non-SQL,又為 Not only SQL) 稱為非關聯式資料庫,跟關聯式資料庫不一樣,不需要定義 schema且沒有關聯的關係(EX:MongoDB,Redis,MariaDB…)

  • 非關聯式資料庫特點:

    • 資料庫由 collection 組成
    • collection 中每筆資料為一份 document,document 的資料格式不需一致
    • CAP theorem 為概念設計
    • 常用於分散式雲端系統

    https://miro.medium.com/max/1400/1*zDFS4FVd1hBgIvmFm8FC7g.png

NoSQL v.s RDBMS

RDBMS

  • RDBMS 因具備 ACID 特性,且保證了資料的一致性,若資料需在任何情況下都穩定且一致,則推薦此類(EX: 金融系統)

NOSQL

  1. 由於 NOSQL 的 schema 不需要固定,且資料可以為任意結構,所以在 schema 需要頻繁變動或者是 schema 不固定的時候,NOSQL 提供更有彈性的開發
  2. 需要儲存大量資料,利用分散式系統以及雲端儲存的時候,由於 NOSQL 相較於 RDBMS 更容易做水平擴充 (horizontal scaling),且本身的設計就是分散式系統的設計,因此對於未來有大量擴充需求的系統,會更容易的去擴充,且擴充的成本也較低
  3. 具備水平擴充,較不會有Single Failed

NOSQL 類別

1. 資料形態(粗略分類)

  • Key-Value:
    • Key-Value資料庫是 NoSQL 資料庫中最大宗的類型,這類資料最大的特色就是採用Key-Value資料架構,取消了原本關聯式資料庫中常用的欄位架構(Schema),每筆資料各自獨立,所以,可以打造出分散式和高擴充能力的特性
    • 例如: Google BigTable,Hadoop HBase,Amazon Dynamo,Cassandra,Hypertable,Redis,Firebase
  • Document:
    • 也是一種key-value,限制 value 的結構為半結構化資料semi-structure,像是 JSON
    • 將資訊存儲在文檔中的資料庫,旨在將資料儲存為類似 JSON 的文件並對其進行查詢
    • 文件資料庫主要是用來儲存非結構性的文件,例如最常見的非結構化資料就是HTML網頁,一個HTML網頁結構不像一般表格那樣有固定的欄位,每個欄位有特定資料類型和大小,例如網頁裡有HeadBody結構,Body元素中可能會有10個段落,段落中會有文字、連結、圖片等,文件資料庫的資料結構往往是鬆散的樹狀結構
    • 例如:MongoDB,CouchDB,Lotus Notes
  • Wide-column(圖學架構):
    • 運用圖學架構來儲存節點間關係資料架構(基本的圖學資料包括了節點(Node)、關係(Relation)和屬性(Property)三種結構)
    • 以多個rawcolumn進行存取,將資料拆成小資料再進行組合,之後可透過column key / row key 進行關聯查詢(可有效的壓縮資料及取用同級的資料集)
    • 例如:Neo4j,InfoGrid,AllegroGrph,Sparksee

2. CAP定理 (Consistency, Availability, Partition Tolerance)

  • Consistency: 一致性,讀寫都會遵循 Atomicity 原則,等同於所有節點訪問同一份最新的資料副本
  • Availability: 可用性,每次請求都能獲取到非錯的響應,但是無法保證得到的資料為最新的
  • Partition Tolerance: 分區容錯性,電腦網路區分為相對獨立的子網,這些子網可以通過設計單獨優化,也可以是網絡設備的故障而導致,而分散式軟體必須設計成具有分區容錯性,也就是說,即使網路被分區後,仍然可以正常工作

根據定理,分散式系統只能滿足三項中的兩項而不可能滿足全部三項,因為在Available的情況下,Consistency與Partition Tolerance是互相矛盾的,因此大致的分類有 APCACP

  • AP: 只要節點可用就能持續運作
  • CA: 在沒有任何的例外下,都是可用並保證資料的一致性
  • CP: 在節點不穩定的時候不接受 request

參考資料