{eval=Array;=+count(Array);}
隨著大數據的發展,數據庫也越來越受重視了。當前數據庫分為關系型數據庫和非關系 數據庫。下面通俗的解釋區別和優缺點。
關系型數據庫:指采用了關系模型來組織數據的數據庫。這邊關系可以理解為表,所以
系模型指的就是二維表格模型,而一個關系型數據庫就是由二維表及其之間的聯系所組成的一個數據組織。
非關系型數據庫:指非關系型的,分布式的,且一般不保證遵循ACID原則的數據存儲系統。非關系型數據庫以鍵值對存儲,且結構不固定,每一個元組可以有不一樣的字段,每個元組可以根據需要增加一些自己的鍵值對,不局限于固定的結構,可以減少一些時間和空間的開銷。
關系型數據庫的優點:
缺點:
非關系數據庫優點:
缺點:
關系型的常見的有
Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2,
Microsoft Access, SQLite,Teradata,MariaDB(MySQL的一個分支),SAP
常見的非關系型數據庫
NoSql、Cloudant、MongoDB、redis、HBase
首先一般非關系型數據庫是基于CAP模型,而傳統的關系型數據庫是基于ACID模型的
1. 數據存儲結構:
首先關系型數據庫一般都有固定的表結構,并且需要通過DDL語句來修改表結構,不是很容易進行擴展,而非關系型數據庫的存儲機制就有很多了,比如基于文檔的,K-V鍵值對的,還有基于圖的等,對于數據的格式十分靈活沒有固定的表結構,方便擴展,因此如果業務的數據結構并不是固定的或者經常變動比較大的,那么非關系型數據庫是個好的選擇
2. 可擴展性
傳統的關系型數據庫給人一種橫向擴展難,不好對數據進行分片等,而一些非關系型數據庫則原生就支持數據的水平擴展(比如mongodb的sharding機制),并且這可能也是很多NoSQL的一大賣點,其實象Mysql這種關系型數據庫的水平擴展也并不是難,即使NoSQL水平擴展容易但對于向跨分片進行joins這種場景都沒有什么太好的解決辦法,不管是關系型還是非關系型數據庫,解決水平擴展或者跨分片Joins這種場景,在應用層和數據庫層中間加一層中間件來做數據處理也許是個好的辦法
3. 數據一致性
非關系型數據庫一般強調的是數據最終一致性,而不沒有像ACID一樣強調數據的強一致性,從非關系型數據庫中讀到的有可能還是處于一個中間態的數據,因此如果你的業務對于數據的一致性要求很高,那么非關系型數據庫并不一個很好的選擇,非關系型數據庫可能更多的偏向于OLAP場景,而關系型數據庫更多偏向于OLTP場景。
1、數據存儲方式不同。
關系型和非關系型數據庫的主要差異是數據存儲的方式。關系型數據天然就是表格式的,因此存儲在數據表的行和列中。數據表可以彼此關聯協作存儲,也很容易提取數據。
與其相反,非關系型數據不適合存儲在數據表的行和列中,而是大塊組合在一起。非關系型數據通常存儲在數據集中,就像文檔、鍵值對或者圖結構。你的數據及其特性是選擇數據存儲和提取方式的首要影響因素。
2、擴展方式不同。
SQL和NoSQL數據庫最大的差別可能是在擴展方式上,要支持日益增長的需求當然要擴展。
要支持更多并發量,SQL數據庫是縱向擴展,也就是說提高處理能力,使用速度更快速的計算機,這樣處理相同的數據集就更快了。
因為數據存儲在關系表中,操作的性能瓶頸可能涉及很多個表,這都需要通過提高計算機性能來客服。雖然SQL數據庫有很大擴展空間,但最終肯定會達到縱向擴展的上限。而NoSQL數據庫是橫向擴展的。
而非關系型數據存儲天然就是分布式的,NoSQL數據庫的擴展可以通過給資源池添加更多普通的數據庫服務器(節點)來分擔負載。
3、對事務性的支持不同。
如果數據操作需要高事務性或者復雜數據查詢需要控制執行計劃,那么傳統的SQL數據庫從性能和穩定性方面考慮是你的最佳選擇。SQL數據庫支持對事務原子性細粒度控制,并且易于回滾事務。
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答1
回答0
回答