關係型數據庫和非關係型數據庫介紹及優劣勢比較

關係型數據庫和非關係型數據庫介紹及優劣勢比較前端

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

關係型數據庫

關係模型指的就是二維表格模型,而一個關係型數據庫就是由二維表及其之間的聯繫所組成的一個數據組織。程序員

關係型數據庫的優勢web

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

使用方便:通用的SQL語言使得操做關係型數據庫很是方便sql

易於維護:豐富的完整性大大減低了數據冗餘和數據不一致的機率mongodb

瓶頸數據庫

高併發讀寫需求編程

網站的用戶併發性很是高,每每達到每秒上萬次讀寫請求,對於傳統關係型數據庫來講,硬盤I/O是一個很大的瓶頸windows

海量數據的高效率讀寫

網站天天產生的數據量是巨大的,對於關係型數據庫來講,在一張包含海量數據的表中查詢,效率是很是低的

高擴展性和可用性

在基於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的缺點

一、 數據是保存在內存當中的,一旦服務進程重啓,數據會所有丟失

二、 Memcached以root權限運行,並且Memcached自己沒有任何權限管理和認證功能,安全性不足

Redis和memcached比較

一、 Redis和Memcache都是將數據存放在內存中,都是內存數據庫。不過memcache還可用於緩存其餘東西,例如圖片、視頻等等;

二、 Redis不只僅支持簡單的k/v類型的數據,同時還提供list,set,hash

三、 虛擬內存--Redis當物理內存用完時,能夠將一些好久沒用到的value 交換到磁盤;

四、 過時策略--memcache在set時就指定,例如set key1 0 0 8,即永不過時。Redis能夠經過例如expire 設定,例如expire name 10;

五、 分佈式--設定memcache集羣,利用magent作一主多從;redis能夠作一主多從。均可以一主一從;

六、 存儲數據安全--memcache掛掉後,數據沒了;redis能夠按期保存到磁盤(持久化);

七、 災難恢復--memcache掛掉後,數據不可恢復; redis數據丟失後能夠經過aof恢復;

八、 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)語言,這是對習慣於企業級數據庫的程序員的最大限制;

相關文章
相關標籤/搜索