關係型數據庫和非關係型數據庫的區別與聯繫

數據庫

一、概念

  1. 數據庫是以一定方式儲存在一起、能與多個用戶共享、具有儘可能小的冗餘度、與應用程序彼此獨立的數據集合

  2. 數據庫管理系統是一種操縱和管理數據庫的大型軟件,用於建立、使用和維護數據庫,簡稱DBMS。它對數據庫進行統一的管理和控制,以保證數據庫的安全性和完整性。

二、分類

  1. 關係型數據庫

  2. NOSQL

三、NoSQL與關係型數據庫的區別

  1. 存儲方式

    傳統的關係型數據庫採用表格的儲存方式, 數據以行和列的方式進行存儲,要讀取和查詢都十分方便。

    非關係型數據不適合這樣的表格存儲方式,通常以數據集的方式,大量的數據集中存儲在一起,類似於鍵值對、圖結構或者文檔

  2. 存儲結構

    關係型數據庫按照結構化的方法存儲數據, 每個數據表都必須對各個字段定義好(也就是先定義好表的結構),再根據表的結構存入數據,這樣做的好處就是由於數據的形式和內容在存入數據之前就已經定義好了,所以整個數據表的可靠性和穩定性都比較高,但帶來的問題就是一旦存入數據後,如果需要修改數據表的結構就會十分困難。

    NoSQL數據庫由於面對的是大量非結構化的數據的存儲,它採用的是動態結構,對於數據類型和結構的改變非常的適應,可以根據數據存儲的需要靈活的改變數據庫的結構。

  3. 存儲規範

    關係型數據庫爲了避免重複、規範化數據以及充分利用好存儲空間,把數據按照最小關係表的形式進行存儲,這樣數據管理的就可以變得很清晰、一目瞭然,當然這主要是一張數據表的情況。如果是多張表情況就不一樣了,由於數據涉及到多張數據表,數據表之間存在着複雜的關係,隨着數據表數量的增加,數據管理會越來越複雜。

    NoSQL數據庫的數據存儲方式是用平面數據集的方式集中存放,雖然會存在數據被重複存儲,從而造成存儲空間被浪費的問題(從當前的計算機硬件的發展來看,這樣的存儲空間浪費的問題微不足道),但是由於基本上單個數據庫都是採用單獨存放的形式,很少採用分割存放的方式,所以這樣數據往往能存成一個整體,這對於數據的讀寫提供了極大的方便。

  4. 擴展方式

    關係型數據庫將數據存儲在數據表中,數據操作的瓶頸出現在多張數據表的操作中,而且數據表越多這個問題越嚴重,如果要緩解這個問題,只能提高處理能力,也就是選擇速度更快性能更高的計算機,這樣的方法雖然可以一定的拓展空間,但這樣的拓展空間一定有非常有限的,也就是關係型數據庫只具備縱向擴展能力。

    NoSQL數據庫由於使用的是數據集的存儲方式,它的存儲方式一定是分佈式的,它可以採用橫向的方式來開展數據庫,也就是可以添加更多數據庫服務器到資源池,然後由這些增加的服務器來負擔數據量增加的開銷。

  5. 查詢方式

    關係型數據庫採用結構化查詢語言(即SQL)來對數據庫進行查詢,SQL早已獲得了各個數據庫廠商的支持,成爲數據庫行業的標準,它能夠支持數據庫的CRUD(增加,查詢,更新,刪除)操作,具有非常強大的功能,SQL可以採用類似索引的方法來加快查詢操作。

    NoSQL數據庫使用的是非結構化查詢語言(UnQL),它以數據集(像文檔)爲單位來管理和操作數據,由於它沒有一個統一的標準,所以每個數據庫廠商提供產品標準是不一樣的,NoSQL中的文檔Id與關係型表中主鍵的概念類似,NoSQL數據庫採用的數據訪問模式相對SQL更簡單而精確。

  6. 規範化

    在數據庫的設計開發過程中開發人員通常會面對同時需要對一個或者多個數據實體(包括數組、列表和嵌套數據)進行操作,這樣在關係型數據庫中,一個數據實體一般首先要分割成多個部分,然後再對分割的部分進行規範化,規範化以後再分別存入到多張關係型數據表中,這是一個複雜的過程。好消息是隨着軟件技術的發展,相當多的軟件開發平臺都提供一些簡單的解決方法,例如,可以利用ORM層(也就是對象關係映射)來將數據庫中對象模型映射到基於SQL的關係型數據庫中去以及進行不同類型系統的數據之間的轉換。

    對於NoSQL數據庫則沒有這方面的問題,它不需要規範化數據,它通常是在一個單獨的存儲單元中存入一個複雜的數據實體。

  7. 事務性

    關係型數據庫強調ACID規則(原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)),可以滿足對事務性要求較高或者需要進行復雜數據查詢的數據操作,而且可以充分滿足數據庫操作的高性能和操作穩定性的要求。並且關係型數據庫十分強調數據的強一致性,對於事務的操作有很好的支持。關係型數據庫可以控制事務原子性細粒度,並且一旦操作有誤或者有需要,可以馬上回滾事務。而NoSQL數據庫強調BASE原則(基本可用(Basically Availble)、軟狀態(Soft-state)、最終一致性(Eventual Consistency)),它減少了對數據的強一致性支持,從而獲得了基本一致性和柔性可靠性,並且利用以上的特性達到了高可靠性和高性能,最終達到了數據的最終一致性。

    NoSQL數據庫雖然對於事務操作也可以使用,但由於它是一種基於節點的分佈式數據庫,對於事務的操作不能很好的支持,也很難滿足其全部的需求,所以NoSQL數據庫的性能和優點更多的體現在大數據的處理和數據庫的擴展方面。

  8. 讀寫性能

    關係型數據庫十分強調數據的一致性,併爲此降低讀寫性能付出了巨大的代價,雖然關係型數據庫存儲數據和處理數據的可靠性很不錯,但一旦面對海量數據的處理的時候效率就會變得很差,特別是遇到高併發讀寫的時候性能就會下降的非常厲害。

    NoSQL數據庫相對關係型數據庫優勢最大的恰恰是應對大數據方面,也就是對於大量的每天都產生非結構化的數據能夠高性能的讀寫,這是因爲NoSQL數據庫是按key-value類型進行存儲的,以數據集的方式存儲的,因此無論是擴展還是讀寫都非常容易,並且NoSQL數據庫不需要關係型數據庫繁瑣的解析,所以NoSQL數據庫大數據管理、檢索、讀寫、分析以及可視化方面具有關係型數據庫不可比擬的優勢。

  9. 授權方式

    關係型數據庫常見的有Oracle,SQLServer,DB2,Mysql,除了Mysql大多數的關係型數據庫如果要使用都需要支付一筆價格高昂的費用,即使是免費的Mysql性能也受到了諸多的限制。

    對於NoSQL數據庫,比較主流的有redis,HBase,MongoDb,memcache等產品,通常都採用開源的方式,不需要像關係型數據庫那樣,需要一筆高昂的花費。

關係型數據庫

一、概念

  1. 在一個給定的應用領域中,所有實體實體之間聯繫的集合構成一個關係數據庫。

  2. 關係數據庫的型與值

    關係數據庫的型稱爲關係數據庫模式,是對關係數據庫的描述,若干域的定義,在這些域上定義的若干關係模式;

    關係數據庫的值是這些關係模式在某一時刻對應的關係的集合,通常簡稱爲關係數據庫。

二、分類

  1. 桌面數據庫

    例如Access、FoxPro和dBase等

    桌面數據庫用於小型的、單機的應用程序,它不需要網絡和服務器,實現起來比較方便,但它只提供數據的存取功能。

  2. 客戶/服務器數據庫

    例如SQL Server、Oracle和Sybase等

    客戶/服務器數據庫主要適用於大型的、多用戶的數據庫管理系統,應用程序包括兩部分:一部分駐留在客戶機上,用於向用戶顯示信息及實現與用戶的交互;另一部分駐留在服務器中,主要用來實現對數據庫的操作和對數據的計算處理。

三、關係模型結構

  1. 單一的數據結構----關係(表文件)

    關係數據庫的表採用二維表格來存儲數據,是一種按行與列排列的具有相關信息的邏輯組,它類似於Excle工作表。

    一個數據庫可以包含任意多個數據表。

    在用戶看來,一個關係模型的邏輯結構是一張二維表,由行和列組成。這個二維表就叫關係,通俗地說,一個關係對應一張表。

  2. 元組(記錄)

    表中的一行即爲一個元組,或稱爲一條記錄。

  3. 屬性(字段)

    數據表中的每一列稱爲一個字段,表是由其包含的各種字段定義的,每個字段描述了它所含有的數據的意義,數據表的設計實際上就是對字段的設計。

    創建數據表時,爲每個字段分配一個數據類型,定義它們的數據長度和其他屬性。

    字段可以包含各種字符、數字、甚至圖形。

    如錯誤!未找到引用源。

  4. 屬性值

    行和列的交叉位置表示某個屬性值,如“數據庫原理”就是課程名稱的屬性值。

  5. 主碼

    主碼(也稱主鍵或主關鍵字),是表中用於唯一確定一個元組的數據。

    關鍵字用來確保表中記錄的唯一性,可以是一個字段或多個字段,常用作一個表的索引字段。

    每條記錄的關鍵字都是不同的,因而可以唯一地標識一個記錄,關鍵字也稱爲主關鍵字,或簡稱主鍵。

    如錯誤!未找到引用源。

  6. 屬性的取值範圍。

  7. 關係模式

    關係的描述稱爲關係模式。

    對關係的描述,一般表示爲:關係名(屬性1,屬性2…屬性n)。

    例如上面的關係可描述爲:課程(課程號、課程名稱、學分、任課老師)。

非關係型數據庫

一、概念

  1. 非關係型數據庫是分佈式的非關係型的不保證遵循ACID原則的數據存儲系統。

  2. NoSQL最常見的解釋是“non-relational”, “Not Only SQL”也被很多人接受。

二、分類

  1. 鍵值對存儲(key-value)

    代表軟件:Redis

    優點:查找速度快

    缺點:數據無結構化,通常只被當作字符串或者二進制數據

    應用場景:內容緩存,主要用於處理大量數據的高訪問負載,也用於一些日誌系統等等。

    數據模型:Key 指向 Value 的鍵值對,通常用hash table來實現

  2. 列存儲

    代表軟件:Hbase

    優點:查找速度快,可擴展性強,更容易進行分佈式擴展

    缺點:功能相對侷限

    應用場景:分佈式的文件系統

    數據模型:以列簇式存儲,將同一列數據存在一起實現

  3. 文檔數據庫存儲

    代表軟件:MongoDB

    優點:數據結構要求不嚴格,表結構可變,不需要像關係型數據庫一樣需要預先定義表結構

    缺點:查詢性能不高,而且缺乏統一的查詢語法。

    應用場景:Web應用(與Key-Value類似,Value是結構化的,不同的是數據庫能夠了解Value的內容)

    數據模型:Key-Value對應的鍵值對,Value爲結構化數據

  4. 圖形數據庫存儲

    代表軟件:InfoGrid

    優點:利用圖結構相關算法。比如最短路徑尋址,N度關係查找等

    缺點:很多時候需要對整個圖做計算才能得出需要的信息,而且這種結構不太好做分佈式的集羣方案。

    應用場景:社交網絡,推薦系統等。專注於構建關係圖譜

    數據模型:圖結構

三、特點

  1. 易擴展

    NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關係數據庫的關係型特性。數據之間無關係,這樣就非常容易擴展。無形之間,在架構的層面上帶來了可擴展的能力。

  2. 大數據量,高性能

    NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益於它的無關係性,數據庫的結構簡單。一般MySQL使用Query Cache。NoSQL的Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來說性能就要高很多。

  3. 靈活的數據類型

    NoSQL無須事先爲要存儲的數據建立字段,隨時可以存儲自定義的數據格式。而在關係數據庫裏,增刪字段是一件非常麻煩的事情。如果是非常大數據量的表,增加字段簡直就是——個噩夢。這點在大數據量的Web 2.0時代尤其明顯。

  4. 高可用

    NoSQL在不太影響性能的情況,就可以方便地實現高可用的架構。比如Cassandra、HBase模型,通過複製模型也能實現高可用。

四、應用場景

  1. 數據模型比較簡單

  2. 需要靈活性更強的IT系統

  3. 對數據庫性能要求較高

  4. 不需要高度的數據一致性

  5. 對於給定key,比較容易映射覆雜值的環境

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章