關係型資料庫和非關係型資料庫介紹及優劣勢比較

雲數學院發表於2017-09-19

關係型資料庫和非關係型資料庫介紹及優劣勢比較

版權宣告:本文為yunshuxueyuan原創文章。
如需轉載請標明出處: http://www.cnblogs.com/sxt-zkys/
QQ技術交流群:299142667

關係型資料庫

關係模型指的就是二維表格模型,而一個關係型資料庫就是由二維表及其之間的聯絡所組成的一個資料組織。

關係型資料庫的優點

容易理解:二維表結構是非常貼近邏輯世界的一個概念

使用方便:通用的SQL語言使得操作關係型資料庫非常方便

易於維護:豐富的完整性大大減低了資料冗餘和資料不一致的概率

瓶頸

高併發讀寫需求

網站的使用者併發性非常高,往往達到每秒上萬次讀寫請求,對於傳統關係型資料庫來說,硬碟I/O是一個很大的瓶頸

海量資料的高效率讀寫

網站每天產生的資料量是巨大的,對於關係型資料庫來說,在一張包含海量資料的表中查詢,效率是非常低的

高擴充套件性和可用性

在基於web的結構當中,資料庫是最難進行橫向擴充套件的,當一個應用系統的使用者量和訪問量與日俱增的時候,資料庫卻沒有辦法像web server和app server那樣簡單的通過新增更多的硬體和服務節點來擴充套件效能和負載能力。對於很多需要提供24小時不間斷服務的網站來說,對資料庫系統進行升級和擴充套件是非常痛苦的事情,往往需要停機維護和資料遷移。

關係型資料庫的相於web應用缺陷

事務一致性

關係型資料庫在對事物一致性的維護中有很大的開銷,而現在很多web2.0系統對事物的讀寫一致性都不高,事務的一致性不那麼重要。

讀寫實時性

關係型資料庫為了維護一致性所付出的巨大代價就是其讀寫效能比較差,

對關聯式資料庫來說,插入一條資料之後立刻查詢,是肯定可以讀出這條資料的,但是對於很多web應用來說,並不要求這麼高的實時性,而併發讀寫能力要求極高,關係型資料庫無法應付,必須用新的一種資料結構儲存來代替關聯式資料庫。

固定的表結構

擴充套件性極差,系統的升級,功能的增加,往往意味著資料結構巨大變動,這一點關係型資料庫也難以應付,需要新的結構化資料儲存。

複雜SQL,特別是多表關聯查詢

任何大資料量的web系統,都非常忌諱多個大表的關聯查詢,以及複雜的資料分析型別的複雜SQL報表查詢,從需求以及產品階級角度,就避免了這種情況的產生。往往更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能極大的弱化了

非關係型資料庫

用於指代那些非關係型的,分散式的,且一般不保證遵循ACID原則的資料儲存系統。

非關係型資料庫提出另一種理念,例如,以鍵值對儲存,且結構不固定,每一個元組可以有不一樣的欄位,每個元組可以根據需要增加一些自己的鍵值對,這樣就不會侷限於固定的結構,可以減少一些時間和空間的開銷。使用這種方式,使用者可以根據需要去新增自己需要的欄位,這樣,為了獲取使用者的不同資訊,不需要像關係型資料庫中,要對多表進行關聯查詢。僅需要根據id取出相應的value就可以完成查詢。但非關係型資料庫由於很少的約束,他也不能夠提供像SQL所提供的where這種對於欄位屬性值情況的查詢。並且難以體現設計的完整性。他只適合儲存一些較為簡單的資料,對於需要進行較複雜查詢的資料,關係型資料庫顯的更為合適。

注:資料庫事務必須具備ACID特性,ACID是Atomic原子性,Consistency一致性,Isolation隔離性,Durability永續性。

關係型資料庫和非關係型資料庫比較

關係型資料庫的優勢:

1. 複雜查詢可以用SQL語句方便的在一個表以及多個表之間做非常複雜的資料查詢。

2. 事務支援使得對於安全效能很高的資料訪問要求得以實現。對於這兩類資料庫,對方的優勢就是自己的弱勢,反之亦然。

非關係型資料庫的優勢:

1. 效能NOSQL是基於鍵值對的,可以想象成表中的主鍵和值的對應關係,而且不需要經過SQL層的解析,所以效能非常高。

2. 可擴充套件性同樣也是因為基於鍵值對,資料之間沒有耦合性,所以非常容易水平擴充套件。

非關係型資料庫分類

除了一些共性外,很大一部分都是針對某些特定的應用需求出現的,因此,對於該類應用,具有極高的效能。依據結構化方法以及應用場合的不同,主要分為以下幾類:

面向高效能併發讀寫的key-value資料庫:

key-value資料庫的主要特點即使具有極高的併發讀寫效能,Redis,Tokyo Cabinet,Flare就是這類的代表

面向海量資料訪問的面向文件資料庫:

這類資料庫的特點是,可以在海量的資料中快速的查詢資料,典型代表為MongoDB以及CouchDB

面向可擴充套件性的分散式資料庫:

這類資料庫想解決的問題就是傳統資料庫存在可擴充套件性上的缺陷,這類資料庫可以適應資料量的增加以及資料結構的變化

Hbase的優點

1.列的可以動態增加,並且列為空就不儲存資料,節省儲存空間.

2.Hbase自動切分資料,使得資料儲存自動具有水平scalability.

3.Hbase可以提供高併發讀寫操作的支援

4.對海量資料高效儲存和訪問

5.高可擴充套件性和高可用性,線性擴充套件

6.表的格式不是固定的,通過鍵值對儲存,減少時間空間開銷

7.隨機讀寫

8當行數小於10000的時候,開銷和行數成正比。但是超過50000行時,無論是順序還是隨機的插入操作,效能都會逐漸變好

Hbase的缺點

1 不能支援條件查詢,只支援按照Row key來查詢.

2 暫時不能支援Master server的故障切換

3 沒有表與表之間的關聯查詢

Redis的優點

1. Redis不僅僅支援簡單的k/v型別的資料,同時還提供list,set,zset,hash等資料結構的儲存。(Redis只會快取所有的 key的資訊)

2. Redis支援資料的備份,即master-slave模式的資料備份。

3. Redis支援資料的持久化,可以將記憶體中的資料保持在磁碟中,重啟的時候可以再次載入進行使用。

4. Redis使用最佳方式是全部資料in-memory。

 

Redis的缺點

1. Redis不具備自動容錯和恢復功能,主機從機的當機都會導致前端部分讀寫請求失敗,需要等待機器重啟或者手動切換前端的IP才能恢復。

2. 主機當機,當機前有部分資料未能及時同步到從機,切換IP後還會引入資料不一致的問題,降低了系統的可用性。

3. redis的主從複製採用全量複製,複製過程中主機會fork出一個子程式對記憶體做一份快照,並將子程式的記憶體快照儲存為檔案傳送給從機,這一過程需要確保主機有足夠多的空餘記憶體。若快照檔案較大,對叢集的服務能力會產生較大的影響,而且複製過程是在從機新加入叢集或者從機和主機網路斷開重連時都會進行,也就是網路波動都會造成主機和從機間的一次全量的資料複製,這對實際的系統運營造成了不小的麻煩。

4. Redis較難支援線上擴容,在叢集容量達到上限時線上擴容會變得很複雜。為避免這一問題,運維人員在系統上線時必須確保有足夠的空間,這對資源造成了很大的浪費。

memcached的缺點

1、 資料是儲存在記憶體當中的,一旦服務程式重啟,資料會全部丟失

2、 Memcached以root許可權執行,而且Memcached本身沒有任何許可權管理和認證功能,安全性不足

Redis和memcached比較

1、 Redis和Memcache都是將資料存放在記憶體中,都是記憶體資料庫。不過memcache還可用於快取其他東西,例如圖片、視訊等等;

2、 Redis不僅僅支援簡單的k/v型別的資料,同時還提供list,set,hash

3、 虛擬記憶體--Redis當實體記憶體用完時,可以將一些很久沒用到的value 交換到磁碟;

4、 過期策略--memcache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通過例如expire 設定,例如expire name 10;

5、 分散式--設定memcache叢集,利用magent做一主多從;redis可以做一主多從。都可以一主一從;

6、 儲存資料安全--memcache掛掉後,資料沒了;redis可以定期儲存到磁碟(持久化);

7、 災難恢復--memcache掛掉後,資料不可恢復; redis資料丟失後可以通過aof恢復;

8、 Redis支援資料的備份,即master-slave模式的資料備份;

關係型資料庫產品比較

sqlserver
優點:

1. 易用性、適合分散式組織的可伸縮性、用於決策支援的資料倉儲功能、與許多其他伺服器軟體緊密關聯的整合性、良好的價效比等;

2. SQLServer是一個具備完全Web支援的資料庫產品,提供了對可擴充套件標記語言 (XML)的核心支援以及在Internet上和防火牆外進行查詢的能力;

缺點:

1. 開放性 :SQL Server 只能windows上執行,穩定對資料庫十分重要。Windows9X系列產品偏重於桌面應用,NT server只適合小型企業而且windows平臺靠性安全性和伸縮性非常有限。
2. 伸縮性並行性 :SQL server 並行實施和共存模型併成熟難處理日益增多使用者數和    資料卷伸縮性有限;
3. 安全性:沒有獲得任何安全證照。
4. 效能 :SQL Server 多使用者時效能佳 ;
5. 客戶端支援及應用模式: 客戶端支援及應用模式。只支援C/S模式,SQL Server C  /S結構只支援windows客戶用ADO、DAO、OLEDB、ODBC連線;
6. 使用風險:SQL server 完全重寫程式碼經歷了長期測試斷延遲許多功能需要時間來證   明並十分相容;

Oracle
優點:

1. 開放性:Oracle 能所有主流平臺上執行(包括 windows)完全支援所有工業標準採用完全開放策略使客戶選擇適合解決方案對開發商全力支援;
2. 可伸縮性,並行性:Oracle 並行伺服器通過使組結點共享同簇工作來擴充套件windownt能力提供高用性和高伸縮性簇解決方案windowsNT能滿足需要使用者把資料庫移UNIXOracle並行伺服器對各種UNIX平臺叢集機制都有著相當高整合度;
3. 安全性:獲得最高認證級別的ISO標準認證。 
4. 效能高 保持開放平臺下TPC-D和TPC-C世界記錄;
5. 客戶端支援及應用模式:Oracle 多層次網路計算支援多種工業標準用ODBC、JDBC、OCI等網路客戶連線
6. 使用風險:Oracle 長時間開發經驗完全向下相容得廣泛應用地風險低

缺點:

對硬體的要求很高;
價格比較昂貴;
管理維護麻煩一些;
操作比較複雜,需要技術含量較高;

MySql

優點

1. 體積小、速度快、總體擁有成本低,開源

2. 支援多種作業系統

3. 是開源資料庫,提供的介面支援多種語言連線操作

4. MySql的核心程式採用完全的多執行緒程式設計。執行緒是輕量級的程式,它可以靈活地為使用者提供服務,而不過多的系統資源。用多執行緒和C語言實現的MySql能很容易充分利用CPU

5. MySql有一個非常靈活而且安全的許可權和口令系統。當客戶與MySql伺服器連線時,他們之間所有的口令傳送被加密,而且MySql支援主機認證

6. 支援ODBC for Windows, 支援所有的ODBC 2.5函式和其他許多函式, 可以用Access連線MySql伺服器, 使得應用被擴充套件

7. 支援大型的資料庫, 可以方便地支援上千萬條記錄的資料庫。作為一個開放原始碼的資料庫,可以針對不同的應用進行相應的修改

8. 擁有一個非常快速而且穩定的基於執行緒的記憶體分配系統,可以持續使用面不必擔心其穩定性

9. MySQL同時提供高度多樣性,能夠提供很多不同的使用者介面,包括命令列客戶端操作,網頁瀏覽器,以及各式各樣的程式語言介面,例如C+,Perl,Java,PHP,以及Python。你可以使用事先包裝好的客戶端,或者乾脆自己寫一個合適的應用程式。MySQL可用於Unix,Windows,以及OS/2等平臺,因此它可以用在個人電腦或者是伺服器上

缺點:

1. 不支援熱備份;

2. MySQL最大的缺點是其安全系統,主要是複雜而非標準,另外只有到調mysqladmi

來重讀使用者許可權時才發生改變;
3. 沒有一種儲存過程(Stored Procedure)語言,這是對習慣於企業級資料庫的程式設計師的最大限制;

 

版權宣告:本文為yunshuxueyuan原創文章。
如需轉載請標明出處:http://www.cnblogs.com/sxt-zkys/
QQ技術交流群:299142667

相關文章