關聯式資料庫(RDBMS)與非關聯式資料庫(NoSQL)的比較 - 筆記
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
本站筆記已同步更新到我的個人網站囉! 歡迎參觀與閱讀,體驗不同的視覺感受!
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
關聯式資料庫(RDBMS, Relational Database Management System)
RDBMS是什麼
資料以資料表(table)的形式存在資料庫中,資料表之間有事先定義的關係,資料表中的一欄(column)代表某項屬性、一列(row)代表一個實體相關屬性的數值,每個資料表都具有主鍵(primary key)方便查詢,並且資料表間的關係可以透過外鍵(foreign key)建立。
RDBMS的優點
- 資料完整性(Data Integrity):RDBMS具有ACID的特性,ACID代表(參考AWS關於RDBMS的介紹):
- 不可分割性 (Atomic):交易必須整體成功執行,若是交易有一部分操作失敗,整個交易都會失效
- 一致性 (Consistent):做為交易的一部分寫入資料庫的資料,必須遵守所有明定規則以及約束
- 獨立性 (Isolated):達成並行控制的重要關鍵,可以確保每一個交易都是獨立的
- 耐用性 (Durable):在一個交易成功完成後,對資料庫所做的變更都是永久性的
- 查詢複雜性:可以透過SQL語法,進行較複雜的查詢
- 語言標準化:不像NoSQL各種資料庫有各自的操作語法,RDBMS都可使用SQL(Structured Querying Language)語言進行資料查詢與管理。
- 資料庫正規化
- 安全性高
RDBMS的缺點
- 橫向擴展能力低,透過垂直擴展比較能發揮優勢,但是成本較高。
- 橫向擴展(Horizontal Scaling)可以想像成增加機器的數量,用不同的機器進行同一個服務,除了減緩單一機器的負擔,也可以避免當單一機器故障時,整個服務就無法使用的狀況。
- 垂直擴展(Vertical Scaling)在現有的硬體上進行升級,例如升級CPU、增加RAM等。
- 儲存與維護成本高
- 速度較慢,尤其當資料量龐大或多人同時使用服務的時候
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
非關聯式資料庫(NoSQL, Not only SQL)
NoSQL是什麼
不同於SQL系統,NoSQL中的資料儲存不需要定義schema、也沒有固定架構,不保證ACID的特性,常用於分散式雲端系統。
NoSQL的優點
- 橫向擴展能力佳 (Scalability):不必增加伺服器來擴大規模,可以透過分散式架構提供服務,以橫向擴展(Horizontal Scaling)的方式增加效能。
- 彈性較高 (Flexibility):NoSQL不像關聯式資料庫需要schema,可以隨意定義資料模型,因此NoSQL可以處理無特定結構或半結構式(semi-structured)的資料
- 速度優勢:因為NoSQL不包含資料關聯性,查詢速度相對較快。
NoSQL的缺點
- 資料完整度:不同於關聯式資料庫通常遵循ACID原則 (atomicity, consistency, isolation, durability)以確保資料的完整度,NoSQL較難提供ACID的保證,而是遵循BASE(basic availability, soft state, and eventual consistency) 的原則,並且可能犧牲資料的完整度。
- 語言標準化:不像關聯式資料庫大多可以使用SQL語言操作,NoSQL不同的資料庫有各自獨特的語言來管理資料。
- 查詢複雜性:NoSQL針對單一表格的查詢效果佳,但當資料複雜度增加,使用RDBMS的效果會更好。
常見的NoSQL類型
- Key-Value
- 以key-value pair的形式儲存資料,key和value可以是任何形式(數字、字串、物件…)
- key必須是獨一無二的,也就是說這種類型的資料庫最適合存放有獨一無二的key的資料,例如ID。
- 每筆資料各自獨立
- Amazon DynamoDB和Redis都是這類型的資料庫
- 文件資料庫 (Document)
- 文件資料庫的資料,將資料儲存在分層結構(hierarchical structures)的文件中
- 適合儲存非結構化資料,如HTML
- 支援的文件格式多,如JSON, BSON, XML, and YAML等
- 文件資料庫的模型被認為是key-value資料庫的延伸,但資料查詢並非僅依賴單一的key
- 文件資料庫中的資料結構範例如下(JSON):
- 圖形資料庫 (Graph)
- 顧名思義,運用圖形結構儲存資料,在圖形結構中,資料存在節點(node/verticle)中,並且透過邊(edge)或線(line/links)進行連結、建立關係。
- 相較於關聯式資料庫,圖形資料庫的好處是建立、管理、查詢上都相對簡便
- Neo4j是一種熱門的圖形資料庫
- 單欄式資料庫 (Column Oriented)
ID |
Product |
Amount |
Price |
1 |
Coffee |
20 |
50 |
2 |
Coke |
3 |
20 |
3 |
Milk |
11 |
35 |
Column-Oriented(單欄式資料庫)
ID |
Product |
1 |
Coffee |
2 |
Coke |
3 |
Milk |
- 例如上表中我們要取得產品價格的資料,在關聯式資料庫中必須將資料從各列拉出來,而在單欄式資料庫中,只需要加總價格資料表即可。單欄式資料庫的好處是可以快速擷取資料,可以減少需要載入的資料量,進行橫向擴展(Horizontal Scaling)提高傳輸量。
- Amazon Redshift是一種熱門的單欄式資料庫。
小結
RDBMS與NoSQL並沒有絕對的好壞,端看使用的時機與需求
參考資料
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
本站內容僅為個人學習記錄,如有錯誤歡迎留言告知、交流討論!