1. 程式人生 > >【redis】關係型資料庫 VS 非關係型資料庫

【redis】關係型資料庫 VS 非關係型資料庫

一、關係型資料庫?

1.概念

 關係型資料庫是指採用了關係模型來組織資料的資料庫。簡單來說,關係模式就是二維表格模型。

主要代表:SQL Server,Oracle,Mysql,PostgreSQL。

2.優點

(1).容易理解,二維表的結構非常貼近現實世界,二維表格,容易理解。

(2)使用方便,通用的sql語句使得操作關係型資料庫非常方便。

(3)易於維護,資料庫的ACID屬性,大大降低了資料冗餘和資料不一致的概率。

3.瓶頸

(1 )海量資料的讀寫效率。

     對於網站的併發量高,往往達到每秒上萬次的請求,對於傳統關係型資料庫來說,硬碟I/o是一個很大的挑戰。

(2) 高擴充套件性和可用性。

   在基於web的結構中,資料庫是最難以橫向拓展的,當一個應用系統的使用者量和訪問量與日俱增的時候,資料庫沒有辦法像web Server那樣簡單的通過新增更多的硬體和服務節點來拓展效能和負載能力。

二、從關係型到非關係型

    關係型資料庫的最大優點就是事務的一致性,這個特性,使得關係型資料庫中可以適用於一切要求一致性比較高的系統中。比如:銀行系統。

    但是在網頁應用中,對這種一致性的要求不是那麼的嚴格,允許有一定的時間間隔,所以關係型資料庫這個特點不是那麼的重要了。相反,關係型資料庫為了維護一致性所付出的巨大代價就是讀寫效能比較差。而像微博、facebook這類應用,對於併發讀寫能力要求極高,關係型資料庫已經無法應付。所以必須用一種新的資料結構儲存來替代關係型資料庫。所以非關係型資料庫應用而生。

三、非關係型

1.概念

   NoSQL非關係型資料庫,主要指那些非關係型的、分散式的,且一般不保證ACID的資料儲存系統,主要代表MongoDB,Redis、CouchDB。

   NoSQL提出了另一種理念,以鍵值來儲存,且結構不穩定,每一個元組都可以有不一樣的欄位,這種就不會侷限於固定的結構,可以減少一些時間和空間的開銷。使用這種方式,為了獲取使用者的不同資訊,不需要像關係型資料庫中,需要進行多表查詢。僅僅需要根據key來取出對應的value值即可。

2.分類

 非關係資料庫大部分是開源的,實現比較簡單,大都是針對一些特性的應用需求出現的。根據結構化方法和應用場景的不同,分為以下幾類。

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

主要特點是具有極高的併發讀寫效能,例如Redis、Tokyo Cabint等。

(2)面向海量資料訪問的面向文件資料庫

特點是,可以在海量的資料庫快速的查詢資料。例如MongoDB以及CouchDB.

(3)面向可拓展的分散式資料庫

解決的主要問題是傳統資料庫的擴充套件性上的缺陷。

3.缺點

  但是由於Nosql約束少,所以也不能夠像sql那樣提供where欄位屬性的查詢。因此適合儲存較為簡單的資料。有一些不能夠持久化資料,所以需要和關係型資料庫結合。

四、對比

1.儲存上?

Sql通常以資料庫表的形式儲存,例如儲存使用者資訊,SQL中增加外部關係的話,需要在原表中增加一個外來鍵,來關聯外部資料表。如下:

NoSql採用key-value的形式儲存

2.事務?

  SQL中如果多張表需要同批次被更新,即如果其中一張表跟新失敗的話,其他表也不會更新成功。這種場景可以通過事務來控制,可以在所有命令完成之後,再統一提交事務。在Nosql中沒有事務這個概念,每一個數據集都是原子級別的。

3.資料表 VS 資料集

  關係型是表格型的,儲存在資料表的行和列中。彼此關聯,容易提取。而非關係型是大塊儲存在一起。

4.預定義結構 VS 動態結構

   在sql中,必須定義好地段和表結構之後,才能夠新增資料,例如定義表的主鍵、索引、外來鍵等。表結構可以在定義之後更新,但是如果有比較大的結構變更,就會變的比較複雜。

   在Nosql資料庫中,資料可以在任何時候任何地方新增。不需要預先定義。

5.儲存規範 VS 儲存程式碼

   關係型資料庫為了規範性,把資料分配成為最小的邏輯表來儲存避免重複,獲得精簡的空間利用。但是多個表之間的關係限制,多表管理就有點複雜。

   當然精簡的儲存可以節約寶貴的資料儲存,但是現在隨著社會的發展,磁碟上付出的代價是微不足知道的。

非關係型是平面資料集合中,資料經常可以重複,單個數據庫很少被分開,而是儲存成為一個整體,這種整塊讀取資料效率更高。

6.縱向拓展 VS 橫向拓展

   為了支援更多的併發量,SQL資料採用縱向擴充套件,提高處理能力,通過提高計算機效能來提高處理能力。

    NoSql通過橫向拓展,非關係型資料庫天然是分散式的,所以可以通過叢集來實現負載均衡。

7.其他方面

  比如:關係型是結構化查詢語言,NoSql是採用更簡單而且精確的資料訪問方式;SQl資料庫大多比較昂貴,而NoSql大多是開源的。

五、選擇?

目前許多大型網際網路都會選用MySql+NoSql的組合方案,因為SQL和NoSql都有各自的優缺點。

關係型資料庫適合儲存結構化資料,比如:使用者的賬號、地址:

(1)這些資料通常需要做結構化查詢,比如說Join,這個時候,關係型資料庫就要勝出一籌。

(2)這些資料的規模、增長的速度通常是可以預期的。

(3)事務性、一致性,適合儲存比較複雜的資料。

NoSql適合儲存非結構化資料,比如:文章、評論:

(1)這些資料通常用於模糊處理,例如全文搜尋、機器學習,適合儲存較為簡單的資料。

(2)這些資料是海量的,並且增長的速度是難以預期的。

(3)按照key獲取資料效率很高,但是對於join或其他結構化查詢的支援就比較差。

六、推薦:

總結:

  SQL資料庫依然強大,可以可靠的處理事務並且保持事務的完整性,只有你的資料非常大,操作擴充套件需要更加分散式的系統時,才考慮NoSql資料庫。