Try   HackMD

關聯式資料庫(RDBMS)與非關聯式資料庫(NoSQL)的比較 - 筆記

tags: database Interview Preparation

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類型

  1. Key-Value
  • 以key-value pair的形式儲存資料,key和value可以是任何形式(數字、字串、物件)
  • key必須是獨一無二的,也就是說這種類型的資料庫最適合存放有獨一無二的key的資料,例如ID。
  • 每筆資料各自獨立
  • Amazon DynamoDBRedis都是這類型的資料庫
  1. 文件資料庫 (Document)
  • 文件資料庫的資料,將資料儲存在分層結構(hierarchical structures)的文件中
  • 適合儲存非結構化資料,如HTML
  • 支援的文件格式多,如JSON, BSON, XML, and YAML等
  • 文件資料庫的模型被認為是key-value資料庫的延伸,但資料查詢並非僅依賴單一的key
  • 文件資料庫中的資料結構範例如下(JSON):
​[
​   {
​       "year" : 2013,
​       "title" : "Turn It Down, Or Else!",
​       "info" : {
​           "directors" : [ "Alice Smith", "Bob Jones"],
​           "release_date" : "2013-01-18T00:00:00Z",
​           "rating" : 6.2,
​           "genres" : ["Comedy", "Drama"],
​           "image_url" : "http://ia.media-imdb.com/images/N/O9ERWAU7FS797AJ7LU8HN09AMUP908RLlo5JF90EWR7LJKQ7@@._V1_SX400_.jpg",
​           "plot" : "A rock band plays their music at high volumes, annoying the neighbors.",
​           "actors" : ["David Matthewman", "Jonathan G. Neff"]
​       }
​   },
​   {
​       "year": 2015,
​       "title": "The Big New Movie",
​       "info": {
​           "plot": "Nothing happens at all.",
​           "rating": 0
​       }
​   }
]
  • MongoDB是一種受歡迎的文件資料庫
  1. 圖形資料庫 (Graph)
  • 顧名思義,運用圖形結構儲存資料,在圖形結構中,資料存在節點(node/verticle)中,並且透過邊(edge)或線(line/links)進行連結、建立關係。
  • 相較於關聯式資料庫,圖形資料庫的好處是建立、管理、查詢上都相對簡便
  • Neo4j是一種熱門的圖形資料庫
  1. 單欄式資料庫 (Column Oriented)
  • 儲存資料的方式和關聯式資料庫類似,但是在單欄式資料庫中,資料是以欄(column)的方式儲存,如下表:

    Row-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
ID Amount
1 20
2 3
3 11
ID Price
1 50
2 20
3 35
  • 例如上表中我們要取得產品價格的資料,在關聯式資料庫中必須將資料從各列拉出來,而在單欄式資料庫中,只需要加總價格資料表即可。單欄式資料庫的好處是可以快速擷取資料,可以減少需要載入的資料量,進行橫向擴展(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 →
 本站內容僅為個人學習記錄,如有錯誤歡迎留言告知、交流討論!