簡述關係型數據庫與非關係型數據庫

當前數據庫分爲關係型數據庫和非關係型數據庫web

關係型數據庫

關係型數據庫:指採用了關係模型來組織數據的數據庫。
關係模型指的就是二維表格模型,而一個關係型數據庫就是由二維表及其之間的聯繫所組成的一個數據組織。
sql

關係模型中經常使用的概念:
關係:一張二維表,每一個關係都具備一個關係名,也就是表名
元組:二維表中的一行,在數據庫中被稱爲記錄
屬性:二維表中的一列,在數據庫中被稱爲字段
域:屬性的取值範圍,也就是數據庫中某一列的取值限制
關鍵字:一組能夠惟一標識元組的屬性,數據庫中常稱爲主鍵,由一個或多個列組成
關係模式:指對關係的描述。其格式爲:關係名(屬性1,屬性2, ... ... ,屬性N),在數據庫中成爲表結構數據庫

關係型數據庫的優勢:

1.容易理解:二維表結構是很是貼近邏輯世界的一個概念,關係模型相對網狀、層次等其餘模型來講更容易理解
2.使用方便:通用的SQL語言使得操做關係型數據庫很是方便
3.易於維護:豐富的完整性(實體完整性、參照完整性和用戶定義的完整性)大大減低了數據冗餘和數據不一致的機率
緩存

關係型數據庫存在的問題

1.網站的用戶併發性很是高,每每達到每秒上萬次讀寫請求,對於傳統關係型數據庫來講,硬盤I/O是一個很大的瓶頸
2.網站天天產生的數據量是巨大的,對於關係型數據庫來講,在一張包含海量數據的表中查詢,效率是很是低的
3.在基於web的結構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,數據庫卻沒有辦法像web serverapp server那樣簡單的經過添加更多的硬件和服務節點來擴展性能和負載能力。當須要對數據庫系統進行升級和擴展時,每每須要停機維護和數據遷移。
4.性能欠佳:在關係型數據庫中,致使性能欠佳的最主要緣由是多表的關聯查詢,以及複雜的數據分析類型的複雜SQL報表查詢。爲了保證數據庫的ACID特性,必須儘可能按照其要求的範式進行設計,關係型數據庫中的表都是存儲一個格式化的數據結構。
網絡

數據庫事務必須具有ACID特性,ACID分別是Atomic原子性,Consistency一致性,
Isolation隔離性,Durability持久性。
數據結構

當今十大主流的關係型數據庫

Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2,
Microsoft Access, SQLite,Teradata,MariaDB(MySQL的一個分支),SAP
併發

非關係型數據庫

非關係型數據庫:指非關係型的,分佈式的,且通常不保證遵循ACID原則的數據存儲系統。app

非關係型數據庫結構

非關係型數據庫以鍵值對存儲,且結構不固定,每個元組能夠有不同的字段,每一個元組能夠根據須要增長一些本身的鍵值對,不侷限於固定的結構,能夠減小一些時間和空間的開銷。機器學習

優勢

1.用戶能夠根據須要去添加本身須要的字段,爲了獲取用戶的不一樣信息,不像關係型數據庫中,要對多表進行關聯查詢。僅須要根據id取出相應的value就能夠完成查詢。
2.適用於SNS(Social Networking Services)中,例如facebook,微博。系統的升級,功能的增長,每每意味着數據結構巨大變更,這一點關係型數據庫難以應付,須要新的結構化數據存儲。因爲不可能用一種數據結構化存儲應付全部的新的需求,所以,非關係型數據庫嚴格上不是一種數據庫,應該是一種數據結構化存儲方法的集合。
分佈式

不足:

只適合存儲一些較爲簡單的數據,對於須要進行較複雜查詢的數據,關係型數據庫顯的更爲合適。不適合持久存儲海量數據

非關係型數據庫的分類

非關係型數據庫都是針對某些特定的應用需求出現的,所以,對於該類應用,具備極高的性能。依據結構化方法以及應用場合的不一樣,主要分爲如下幾類:

面向高性能併發讀寫的key-value數據庫:

key-value數據庫的主要特色是具備極高的併發讀寫性能
Key-value數據庫是一種以鍵值對存儲數據的一種數據庫,相似Java中的map。能夠將整個數據庫理解爲一個大的map,每一個鍵都會對應一個惟一的值。
主流表明爲Redis, Amazon DynamoDB, Memcached,
Microsoft Azure Cosmos DB和Hazelcast

面向海量數據訪問的面向文檔數據庫:

這類數據庫的主要特色是在海量的數據中能夠快速的查詢數據
文檔存儲一般使用內部表示法,能夠直接在應用程序中處理,主要是JSONJSON文檔也能夠做爲純文本存儲在鍵值存儲或關係數據庫系統中。
主流表明爲MongoDB,Amazon DynamoDB,Couchbase,
Microsoft Azure Cosmos DB和CouchDB

面向搜索數據內容的搜索引擎:

搜索引擎是專門用於搜索數據內容的NoSQL數據庫管理系統。
主要是用於對海量數據進行近實時的處理和分析處理,可用於機器學習和數據挖掘
主流表明爲Elasticsearch,Splunk,Solr,MarkLogic和Sphinx

面向可擴展性的分佈式數據庫:

這類數據庫的主要特色是具備很強的可拓展性
普通的關係型數據庫都是以行爲單位來存儲數據的,擅長以行爲單位的讀入處理,好比特定條件數據的獲取。所以,關係型數據庫也被成爲面向行的數據庫。相反,面向列的數據庫是以列爲單位來存儲數據的,擅長以列爲單位讀入數據。
這類數據庫想解決的問題就是傳統數據庫存在可擴展性上的缺陷,這類數據庫能夠適應數據量的增長以及數據結構的變化,將數據存儲在記錄中,可以容納大量動態列。因爲列名和記錄鍵不是固定的,而且因爲記錄可能有數十億列,所以可擴展性存儲能夠看做是二維鍵值存儲。
主流表明爲Cassandra,HBase,Microsoft Azure Cosmos DB,
Datastax Enterprise和Accumulo

CAP理論

NoSQL的基本需求就是支持分佈式存儲,嚴格一致性與可用性須要互相取捨
CAP理論:一個分佈式系統不可能同時知足C(一致性)、A(可用性)、P(分區容錯性)三個基本需求,而且最多隻能知足其中的兩項。對於一個分佈式系統來講,分區容錯是基本需求,不然不能稱之爲分佈式系統,所以須要在C和A之間尋求平衡
C(Consistency)一致性
一致性是指更新操做成功並返回客戶端完成後,全部節點在同一時間的數據徹底一致。與ACID的C徹底不一樣
A(Availability)可用性
可用性是指服務一直可用,並且是正常響應時間。
P(Partition tolerance)分區容錯性
分區容錯性是指分佈式系統在遇到某節點或網絡分區故障的時候,仍然可以對外提供知足一致性和可用性的服務。

關係型與非關係型數據庫的比較

1.成本:Nosql數據庫簡單易部署,基本都是開源軟件,不須要像使用Oracle那樣花費大量成本購買使用,相比關係型數據庫價格便宜。
2.查詢速度:Nosql數據庫將數據存儲於緩存之中,並且不須要通過SQL層的解析,關係型數據庫將數據存儲在硬盤中,天然查詢速度遠不及Nosql數據庫。
3.存儲數據的格式:Nosql的存儲格式是key,value形式、文檔形式、圖片形式等等,因此能夠存儲基礎類型以及對象或者是集合等各類格式,而數據庫則只支持基礎類型。
4.擴展性:關係型數據庫有相似join這樣的多表查詢機制的限制致使擴展很艱難。Nosql基於鍵值對,數據之間沒有耦合性,因此很是容易水平擴展。
5.持久存儲:Nosql不使用於持久存儲,海量數據的持久存儲,仍是須要關係型數據庫
6.數據一致性:非關係型數據庫通常強調的是數據最終一致性,不像關係型數據庫同樣強調數據的強一致性,從非關係型數據庫中讀到的有可能仍是處於一箇中間態的數據,
Nosql不提供對事務的處理。

最近的數據庫排名

網站地址:https://db-engines.com/en/ranking

能夠發現如今主流的仍是關係型數據庫,非關係型數據庫中Redis和MongoDB最受歡迎

相關文章
相關標籤/搜索