關系型資料庫:
關系型資料庫,是指采用了關系模型來組織資料的資料庫,其以行和列的形式存儲資料,以便于使用者了解,關系型資料庫這一系列的行和列被稱為表,一組表組成了資料庫。使用者通過查詢來檢索資料庫中的資料,而查詢是一個用于限定資料庫中某些區域的執行代碼。關系模型可以簡單了解為二維表格模型,而一個關系型資料庫就是由二維表及其之間的關系組成的一個資料組織。
常見的關系型資料庫:mysql,oracle,SQL Server
存儲方式::行存儲,一個表裡每一個對象的記錄存儲一行,一行裡包括了該記錄的所有特征

優缺點以及應用場景:
優點:
1)複雜查詢可以用SQL語句友善的在一個表以及多個表之間做非常複雜的資料查詢。
2)事務支援使得對于安全性能很高的資料通路要求得以實作。
缺點:
1)不擅長大量資料的寫入處理
2)不擅長為有資料更新的表做索引或表結構(schema)變更
3) 字段不固定時應用不友善
4)不擅長對簡單查詢需要快速傳回結果的處理
使用場景:
1)需要做複雜處理的資料;
2)資料量不是特别大的資料;
3)對安全性要求高的資料;
4)資料格式單一的資料;
非關系型資料庫:
NoSQL,泛指非關系型的資料庫。随着網際網路web2.0網站的興起,傳統的關系資料庫在處理web2.0網站,特别是超大規模和高并發的SNS類型的web2.0純動态網站已經顯得力不從心,出現了很多難以克服的問題,而非關系型的資料庫則由于其本身的特點得到了非常迅速的發展。NoSQL資料庫的産生就是為了解決大規模資料集合多重資料種類帶來的挑戰,尤其是大資料應用難題。
常見的非關系型資料庫:
(1)鍵值對存儲(key-value):Redis鍵值對存儲,優勢:快速查詢,缺點:存儲資料缺少結構化。
(2)列存儲:Hbase,優勢:快速查詢,擴充性強。缺點:功能相對于局限。
(3)文檔資料庫存儲:MongoDB,早起應用多。優勢:要求不特别的嚴格。缺點:查詢性不高,缺少統一查詢文法。
(4)圖形資料庫存儲:應用于社交網絡,優勢:利用圖結構相關算法。缺點:需要整個圖計算才得出結果,不容易做分布式叢集方案。
存儲方式:
以列為機關進行資料的存儲,一列作為一個記錄,每個對象的記錄會存儲多行,各行相對獨立;
優缺點以及使用場景:
優點:
1)nosql資料庫簡單易部署,基本都是開源軟體,不需要像使用oracle那樣花費大量成本購買使用,相比關系型資料庫價格便宜。
2)nosql資料庫将資料存儲于緩存之中,關系型資料庫将資料存儲在硬碟中,自然查詢速度遠不及nosql資料庫。
3)nosql的存儲格式是key,value形式、文檔形式、圖檔形式等等,是以可以存儲基礎類型以及對象或者是集合等各種格式,而資料庫則隻支援基礎類型。
4)不支援Join處理,各個資料都是獨立設計的,很容易把資料分散在多個伺服器上,故減少了每個伺服器上的資料量,即使要處理大量資料的寫入,也變得更加容易,資料的讀入操作當然也同樣容易。
缺點:
1)無法對表進行複雜的計算,不支援join等功能。
使用場景:
1)海量資料存儲;
2)多格式的資料存儲;
3)對查詢速度要求快的資料存儲;
對非關系型資料庫中又該如何選擇合适的資料庫呢
redis是一個高性能的(key/value)分布式記憶體資料庫,
應用的場景:
(1) 緩存(資料查詢,短連接配接,新聞内容,商品内容等),使用最多
(2) 聊天室線上好友清單
(3) 任務隊列(秒殺,搶購,12306等)
(4) 應用排行榜
(5) 網站通路統計
(6) 資料過期處理(可以精确到毫秒)
(7) 分布式叢集架構中的session問題
Mongodb存儲的也是key/value,隻不過它的value是json類型,适合存儲對象類型的資料,
1)網站實時資料處理。它非常适合實時的插入、更新與查詢,并具備網站實時資料存儲所需的複制及高度伸縮性。
2)緩存。由于性能很高,它适合作為資訊基礎設施的緩存層。在系統重新開機之後,由它搭建的持久化緩存層可以避免下層的資料源過載。
3)高伸縮性的場景。非常适合由數十或數百台伺服器組成的資料庫,它的路線圖中已經包含對MapReduce引擎的内置支援。
關系型資料庫和非關系型資料庫的比較
差別 | 關系型資料庫 | 非關系型資料庫(Nosql) |
---|---|---|
存儲方式 | 表格式存儲。 存儲在表的行和列中。他們之間很容易關聯協作存儲,提取資料很友善 | 通常存儲在資料集中,就像文檔、鍵值對或者圖結構。 |
存儲結構 | 結構化資料。 資料表都預先定義了結構(列的定義),結構描述了資料的形式和内容。這一點對資料模組化至關重要,雖然預定義結構帶來了可靠性和穩定性(優點),但是修改這些資料比較困難(缺點)。 | 基于動态結構,使用與非結構化資料。因為Nosql資料庫是動态結構,可以很容易适應資料類型和結構的變化。 |
查詢方式 | 結構化查詢語言來操作資料庫(就是我們通常說的SQL) 關系型資料庫表中主鍵 關系型資料庫使用預定義優化方式(比如索引)來加快查詢操作 | 以塊為單元操作資料,使用的是非結構化查詢語言(UnQl),它是沒有标準的 Nosql中存儲文檔的ID 更簡單更精确的資料通路模式 |
事務 | 遵循ACID規則(原子性(Atomicity)、一緻性(Consistency)、隔離性(Isolation)、持久性(Durability)) 支援對事務原子性細粒度控制,并且易于復原事務。 | 遵循BASE原則(基本可用(Basically Availble)、軟/柔性事務(Soft-state )、最終一緻性(Eventual Consistency)) Nosql資料庫是在CAP(一緻性、可用性、分區容忍度)中任選兩項,因為基于節點的分布式系統中,很難全部滿足,是以對事務的支援不是很好,雖然也可以使用事務,但是并不是Nosql的閃光點。 |
性能 | 為了維護資料的一緻性付出了巨大的代價,讀寫性能比較差。在面對高并發讀寫性能非常差,面對海量資料的時候效率非常低。 | Nosql存儲的格式都是key-value類型的,并且存儲在記憶體中,非常容易存儲,而且對于資料的 一緻性是 弱要求。Nosql無需sql的解析,提高了讀寫性能。 |