RDBMS vs. NOSQL | 關聯式資料庫vs. 非關聯式資料庫
文章推薦指數: 80 %
RDBMS (Relational Database Management System) 又為關聯式資料庫管理系統,意即資料庫是由多個資料表(Table)所組成,並且可以將資料表關聯起來,去 ...
GetstartedOpeninappHsSigninGetstartedAboutGetstartedOpeninappRDBMSvs.NOSQL|關聯式資料庫vs.非關聯式資料庫HsJul27·6minread本篇文章中,會先簡單解釋RDBMS還有NOSQL是什麼,接著整理出RDBMS與NOSQL兩種類型資料庫的區別、優缺點、以及實務上該怎麼去做選擇。
因為在解釋資料庫時有非常多名詞觀念在其中,本篇將聚焦在兩者的比較上,其他較詳項的內容在其他篇幅做更詳細的解釋吧。
前言有鑒於最近參加了幾場軟體工程師的面試,可以發現,只要在工作要求中有提到資料庫的話,RDBMS與NOSQL相關的問題,幾乎都是面試必考題。
包含『RDBMS是什麼』、『NOSQL是什麼』、『兩者的區別是什麼』、『為什麼要用RDBMS』…等等延伸的問題。
因此全面性的了解這兩種主流資料庫的區別、有缺點與使用情境之後,才能在實務或是面試上,有更好更正確且更合理的答案!那就廢話不多說,以下進入正題!關聯式資料庫(RDBMS)RDBMS(RelationalDatabaseManagementSystem)又為關聯式資料庫管理系統,意即資料庫是由多個資料表(Table)所組成,並且可以將資料表關聯起來,去連結多個資料表之間的關係。
諸如MySQL,PostgreSQL,MSSQL,…都是關聯式資料庫。
以下列出幾個關聯式資料庫的特點:由資料表(Table)組成,其中row代表一筆資料,column代表資料欄位名稱Schema必須先定義好,並且只接受同樣格式資料的插入與修改。
往後如果要修改schema,必須對於已存在的資料做相對應的處理較為麻煩可以使用JOIN來連結多個資料表,做較複雜的查詢具備ACID特性使用SQL(StructuredQueryingLanguage)來管理及查詢資料https://drawsql.app/非關聯式資料庫(NOSQL)NOSQL(Non-SQL,又為NotonlySQL)稱為非關聯式資料庫,跟關聯式資料庫不一樣,不需要定義schema、沒有關聯的關係。
諸如MongoDB,Redis,…都是非關聯式資料庫的一種。
以下為非關聯式資料庫的幾個特點:資料庫由collection組成collection中每筆資料為一份document,document的資料格式不需一致以CAPtheorem為概念設計常用於分散式雲端系統什麼時候要用RDBMS?什麼時候要用NOSQL?在實務上,並沒有一個標準答案去說該用哪一種資料庫,必須依照使用情境與需求,分析RDBMS&NOSQL的特性,進而去選擇最適合的資料庫來使用。
為什麼使用RDBMS?需要確保ACID特性的情境。
RDBMS類型的資料庫,保證了ACID,保證了資料的一致性。
舉例在金融類型的應用,你會希望匯入匯出的錢,能夠同步一致的更新到資料庫上,以防重複扣款或是餘額顯示錯誤等等的狀況。
而NOSQL是沒有保證ACID的,所以在這種情況下,RDBMS相較於NOSQL更適合。
為什麼使用NOSQL?由於NOSQL的schema不需要固定,且資料可以為任意結構。
所以在schema需要頻繁變動或者是schema不固定的時候,NOSQL提供更有彈性的開發。
比如在開發初期,schema會需要頻繁更新,這時候NOSQL就比較適合。
需要儲存大量資料,利用分散式系統以及雲端儲存的時候。
由於NOSQL相較於RDBMS更容易做horizontalscaling,且本身的設計就是分散式系統的設計。
因此對於未來有大量擴充需求的系統,會更容易的去擴充,且擴充的成本也較低。
NOSQL比RDBMS快嗎?RDBMS以及NOSQL在查詢上最主要的差別在於,RDBMS可以執行較複雜的查詢,因為RDBMS具有關聯的特性,例如有顧客、商品、銷售員三個資料表,分別儲存顧客的個人資料、商品的詳細價格與類別以及銷售員的個人資料,RDBMS此時可以將三個表依照指定邏輯將他們關聯起來,建立一個含有某個顧客,從某個銷售員手上,購買的某個商品,這樣子的一個資料表。
因此RDBMS在查詢上,可能需要跟很多資料表做關聯,等於是多查詢了很多個資料表,因此查詢的時間相對比較長。
對比的NOSQL,因為不包含任何關聯,單筆資料查詢後的所有需要的資料,都存在這一筆資料中,不需要做其他額外的查詢,相較之下會比RDBMS快。
為什麼RDBMS的擴充性(scalability)比較低?RDBMS比較容易做verticalscaling,verticalscaling意思是將單一台server做硬體的升級(例如增加CPU,memory…等等),花費相較於horizontalscaling高。
至於為什麼RDBMS較不容易做horizontalscaling呢?一個原因是RDBMS具有ACID的特性,因此當一個transaction要修改某個資料時,會將其他也要操作這個資料的transaction先lock住,以防racecondition,接著等到這個transaction做完後,才同意讓其他transaction繼續進行下去。
所以這樣的機制下,會降低到資料庫的效能。
也因為上述的狀況,假設今天要將RDBMS做horizontalscaling的擴充,這時需要被lock的Table可能分佈在不同的server上面,這時要找出哪些Table要被lock,以及該Table在哪一台server上面,都會嚴重降低資料庫效能,而且系統的複雜度也遠比單一台server要複雜許多!對比之下,NOSQL本身就是基於分散式系統架構,且不具備ACID的特性,因此更適合horizontalscaling。
在做水平擴充之後,只需要把資料分散儲存到各個server中,不用去處理資料之間的關聯性。
比起關聯式資料庫,能夠更簡單的做到horizontalscaling。
結論本篇文章總結了一些RDBMSvsNOSQL常見的問題。
事實上,關於兩者的優劣、該如何取捨,其實還有非常的多能夠探討的議題,這裡寫的只是大概念的想法,其中像是ACID,CAP等等的觀念,就需要另外去找更詳細及全面的解釋。
這裡提供一些問題的觀點,希望能對大家有幫助^^HsSoftwareengineerinTaiwanFollow22 2資料庫DatabaseNoSQLRdbmsBackendMorefromHsFollowSoftwareengineerinTaiwan
延伸文章資訊
- 1了解NoSQL不可不知的5項觀念 - iThome
其實,NoSQL資料庫包括十幾種資料庫系統,也很不像關聯式資料庫那樣有一 ... 開源社群重新使用NoSQL這個名詞來代表這些分散式非關聯式資料庫的統稱。
- 2關聯式資料庫VS 非關聯式資料庫(上) - LSYuCode
近幾年因應大數據的興起,越來越多人奔向非關聯式資料庫(NoSQL) 資料庫的懷抱,這是為什麼呢? 首先NoSQL 所代表的含意並不是No SQL"而是" Not Only ...
- 3什麼是NoSQL?| 非關聯式資料庫,彈性的結構描述資料模型
NoSQL 資料庫是為特定資料模型而建立,並且具有構建新型應用程式的彈性結構描述。NoSQL 資料庫在開發的容易性、功能性和大規模效能方面廣受肯定。本頁提供的資源內容,可 ...
- 4關聯式資料庫VS 非關聯式資料庫 - 理工宅
沒有說一定要使用關聯式或非關聯式,好的情境用對方式,就會有如虎添翼效果,例如: NoSQL情境如下: App Server 不太需要有Transcation,Ex: 銀行 ...
- 5資料庫系統應用- 非關聯式資料庫 - iT 邦幫忙
一般在關聯式資料庫的通用查詢語言是SQL,但是NoSQL 相對來說就有與多不同的類型,分別是Key-Value、以及Graph。 Key-Value Database:利用鍵值的格式儲存資料,取...