柚子快報(bào)邀請碼778899分享:關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫
柚子快報(bào)邀請碼778899分享:關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫
目錄
????????一、關(guān)系型數(shù)據(jù)庫
1.常用概念
2.優(yōu)點(diǎn)
3.不足
4.主流關(guān)系型數(shù)據(jù)庫
二、非關(guān)系型數(shù)據(jù)庫
1.優(yōu)點(diǎn)
2.不足
3.分類
1. 面向高性能并發(fā)讀寫的key-value數(shù)據(jù)庫
2. 面向海量數(shù)據(jù)訪問的面向文檔數(shù)據(jù)庫:
3.面向搜索數(shù)據(jù)內(nèi)容的搜索引擎:
4.面向可擴(kuò)展性的分布式數(shù)據(jù)庫:
三、關(guān)系型與非關(guān)系型數(shù)據(jù)庫的比較
一、關(guān)系型數(shù)據(jù)庫
指采用了關(guān)系模型來組織數(shù)據(jù)的數(shù)據(jù)庫
關(guān)系模型指的就是二維表格模型,而一個關(guān)系型數(shù)據(jù)庫就是由二維表及其之間的聯(lián)系所組成的一個數(shù)據(jù)組織。
1.常用概念
關(guān)系:一張二維表,每個關(guān)系都具有一個關(guān)系名,也就是表名。 元組:二維表中的一行,在數(shù)據(jù)庫中被稱為記錄。 屬性:二維表中的一列,在數(shù)據(jù)庫中被稱為字段。 域:屬性的取值范圍,也就是數(shù)據(jù)庫中某一列的取值限制。 關(guān)鍵字:一組可以唯一標(biāo)識元組的屬性,數(shù)據(jù)庫中常稱為主鍵,由一個或多個列組成。 關(guān)系模式:指對關(guān)系的描述。其格式為:關(guān)系名 (屬性 1,屬性 2, ... ... ,屬性 N),在數(shù)據(jù)庫中成為表結(jié)構(gòu)。
2.優(yōu)點(diǎn)
容易理解:二維表結(jié)構(gòu)是非常貼近邏輯世界的一個概念,關(guān)系模型相對網(wǎng)狀、層次等其他模型來說更容易理解 使用方便:通用的 SQL 語言使得操作關(guān)系型數(shù)據(jù)庫非常方便 易于維護(hù):豐富的完整性 (實(shí)體完整性、參照完整性和用戶定義的完整性) 大大減低了數(shù)據(jù)冗余和數(shù)據(jù)不一致的概率
3.不足
用戶并發(fā)高:I/O限制:網(wǎng)站的用戶并發(fā)性非常高,往往達(dá)到每秒上萬次讀寫請求,對于傳統(tǒng)關(guān)系型數(shù)據(jù)庫來說,硬盤I/O是一個很大的瓶頸。 數(shù)據(jù)量大,查詢效率低:網(wǎng)站每天產(chǎn)生的數(shù)據(jù)量是巨大的,對于關(guān)系型數(shù)據(jù)庫來說,在一張包含海量數(shù)據(jù)的表中查詢,效率是非常低的。 進(jìn)行升級和擴(kuò)展時,往往需要停機(jī)維護(hù)和數(shù)據(jù)遷移:在基于 web 的結(jié)構(gòu)當(dāng)中,數(shù)據(jù)庫是最難進(jìn)行橫向擴(kuò)展的,當(dāng)一個應(yīng)用系統(tǒng)的用戶量和訪問量與日俱增的時候,數(shù)據(jù)庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬件和服務(wù)節(jié)點(diǎn)來擴(kuò)展性能和負(fù)載能力。當(dāng)需要對數(shù)據(jù)庫系統(tǒng)進(jìn)行升級和擴(kuò)展時,往往需要停機(jī)維護(hù)和數(shù)據(jù)遷移。 多表的關(guān)聯(lián)查詢,性能欠佳:在關(guān)系型數(shù)據(jù)庫中,導(dǎo)致性能欠佳的最主要原因是多表的關(guān)聯(lián)查詢,以及復(fù)雜的數(shù)據(jù)分析類型的復(fù)雜 SQL 報(bào)表查詢。為了保證數(shù)據(jù)庫的 ACID 特性,必須盡量按照其要求的范式進(jìn)行設(shè)計(jì),關(guān)系型數(shù)據(jù)庫中的表都是存儲一個格式化的數(shù)據(jù)結(jié)構(gòu)。
數(shù)據(jù)庫事務(wù)必須具備ACID特性,ACID分別是Atomic原子性,Consistency一致性,Isolation隔離性,Durability持久性。
4.主流關(guān)系型數(shù)據(jù)庫
Oracle Microsoft SQL Server MySQL PostgreSQL DB2 Microsoft Access SQLite Teradata MariaDB (MySQL 的一個分支) SAP
二、非關(guān)系型數(shù)據(jù)庫
指非關(guān)系型的,分布式的,且一般不保證遵循ACID原則的數(shù)據(jù)存儲系統(tǒng)。
非關(guān)系型數(shù)據(jù)庫以鍵值對存儲,且結(jié)構(gòu)不固定,每一個元組可以有不一樣的字段,每個元組可以根據(jù)需要增加一些自己的鍵值對,不局限于固定的結(jié)構(gòu),可以減少一些時間和空間的開銷。
1.優(yōu)點(diǎn)
查詢快,根據(jù)id取出value即可:用戶可以根據(jù)需要去添加自己需要的字段,為了獲取用戶的不同信息,不像關(guān)系型數(shù)據(jù)庫中,要對多表進(jìn)行關(guān)聯(lián)查詢。僅需要根據(jù)id取出相應(yīng)的value就可以完成查詢。 適用于SNS(Social Networking Services)中:例如 facebook,微博。系統(tǒng)的升級,功能的增加,往往意味著數(shù)據(jù)結(jié)構(gòu)巨大變動,這一點(diǎn)關(guān)系型數(shù)據(jù)庫難以應(yīng)付,需要新的結(jié)構(gòu)化數(shù)據(jù)存儲。由于不可能用一種數(shù)據(jù)結(jié)構(gòu)化存儲應(yīng)付所有的新的需求,因此,非關(guān)系型數(shù)據(jù)庫嚴(yán)格上不是一種數(shù)據(jù)庫,應(yīng)該是一種數(shù)據(jù)結(jié)構(gòu)化存儲方法的集合。
2.不足
不適用復(fù)雜數(shù)據(jù):只適合存儲一些較為簡單的數(shù)據(jù),對于需要進(jìn)行較復(fù)雜查詢的數(shù)據(jù),關(guān)系型數(shù)據(jù)庫顯得更為合適。 不適合持久存儲海量數(shù)據(jù)。
3.分類
非關(guān)系型數(shù)據(jù)庫都是針對某些特定的應(yīng)用需求出現(xiàn)的,因此,對于該類應(yīng)用,具有極高的性能。依據(jù)結(jié)構(gòu)化方法以及應(yīng)用場合的不同,主要分為以下幾類:
1. 面向高性能并發(fā)讀寫的key-value數(shù)據(jù)庫
key-value數(shù)據(jù)庫的主要特點(diǎn)是具有極高的并發(fā)讀寫性能。
Key-value數(shù)據(jù)庫是一種以鍵值對存儲數(shù)據(jù)的一種數(shù)據(jù)庫,類似Java中的map??梢詫⒄麄€數(shù)據(jù)庫理解為一個大的map,每個鍵都會對應(yīng)一個唯一的值。
主流代表為 Redis、 Amazon DynamoDB、 Memcached、Microsoft Azure Cosmos DB 和 Hazelcast。
2. 面向海量數(shù)據(jù)訪問的面向文檔數(shù)據(jù)庫:
這類數(shù)據(jù)庫的主要特點(diǎn)是在海量的數(shù)據(jù)中可以快速的查詢數(shù)據(jù)。
文檔存儲通常使用 內(nèi)部表示法, 可以直接在應(yīng)用程序中處理 ,主要是JSON。JSON文檔也可以作為純文本存儲在鍵值存儲或關(guān)系數(shù)據(jù)庫系統(tǒng)中。
主流代表為 MongoDB、Amazon DynamoDB、Couchbase、Microsoft Azure Cosmos DB 和 CouchDB。
3.面向搜索數(shù)據(jù)內(nèi)容的搜索引擎:
搜索引擎是專門用于搜索數(shù)據(jù)內(nèi)容的 NoSQL 數(shù)據(jù)庫管理系統(tǒng)。
主要是用于對海量數(shù)據(jù)進(jìn)行近實(shí)時的處理和分析處理,可用于機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘。
主流代表為 Elasticsearch、 Splunk、Solr、MarkLogic 和 Sphinx。
4.面向可擴(kuò)展性的分布式數(shù)據(jù)庫:
主要特點(diǎn)是具有很強(qiáng)的可拓展性。 普通的關(guān)系型數(shù)據(jù)庫都是以行為單位來存儲數(shù)據(jù)的,擅長以行為單位的讀入處理,比如特定條件數(shù)據(jù)的獲取。因此,關(guān)系型數(shù)據(jù)庫也被認(rèn)為是面向行的數(shù)據(jù)庫。相反,面向列的數(shù)據(jù)庫是以列為單位來存儲數(shù)據(jù)的,擅長以列為單位讀入數(shù)據(jù)。 這類數(shù)據(jù)庫想解決的問題就是傳統(tǒng)數(shù)據(jù)庫存在可擴(kuò)展性上的缺陷,這類數(shù)據(jù)庫可以適應(yīng)數(shù)據(jù)量的增加以及數(shù)據(jù)結(jié)構(gòu)的變化,將數(shù)據(jù)存儲在記錄中,能夠容納大量動態(tài)列。由于列名和記錄鍵不是固定的,并且由于記錄可能有數(shù)十億列,因此可擴(kuò)展性存儲可以看作是二維鍵值存儲。 主流代表為 Cassandra、HBase、Microsoft Azure Cosmos DB、Datastax Enterprise 和 Accumulo。
三、關(guān)系型與非關(guān)系型數(shù)據(jù)庫的比較
成本:Nosql數(shù)據(jù)庫(非關(guān)系型數(shù)據(jù)庫)簡單易部署,基本都是開源軟件,不需要像使用Oracle那樣花費(fèi)大量成本購買使用,相比關(guān)系型數(shù)據(jù)庫價(jià)格便宜。 查詢速度:Nosql數(shù)據(jù)庫將數(shù)據(jù)存儲于緩存之中,而且不需要經(jīng)過SQL層的解析,關(guān)系型數(shù)據(jù)庫將數(shù)據(jù)存儲在硬盤中,自然查詢速度遠(yuǎn)不及Nosql數(shù)據(jù)庫。 存儲數(shù)據(jù)的格式:Nosql的存儲格式是key,value形式、文檔形式、圖片形式等等,所以可以存儲基礎(chǔ)類型以及對象或者是集合等各種格式,而數(shù)據(jù)庫則只支持基礎(chǔ)類型。 擴(kuò)展性:關(guān)系型數(shù)據(jù)庫有類似 join 這樣的多表查詢機(jī)制的限制導(dǎo)致擴(kuò)展很艱難。Nosql基于鍵值對,數(shù)據(jù)之間沒有耦合性,所以非常容易水平擴(kuò)展。 持久存儲:Nosql不適用于持久存儲,海量數(shù)據(jù)的持久存儲,還是需要關(guān)系型數(shù)據(jù)庫。 數(shù)據(jù)一致性:非關(guān)系型數(shù)據(jù)庫一般強(qiáng)調(diào)的是數(shù)據(jù)最終一致性,不像關(guān)系型數(shù)據(jù)庫一樣強(qiáng)調(diào)數(shù)據(jù)的強(qiáng)一致性,從非關(guān)系型數(shù)據(jù)庫中讀到的有可能還是處于一個中間態(tài)的數(shù)據(jù)。 事務(wù)處理:Nosql不提供對事務(wù)的處理。
柚子快報(bào)邀請碼778899分享:關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。