關(guān)系型數(shù)據(jù)庫如 SQLite MySQL Oracle SQL Server DB2 等妙蔗,其數(shù)據(jù)庫是以表的形式存儲束昵;非關(guān)系型數(shù)據(jù)庫如 MongoDB Redis度气,它們的存儲形式是鍵值對巩那,存儲形式更加靈活墨榄。更通俗的比喻就是:關(guān)系型數(shù)據(jù)庫就類似于Excel玄糟,非關(guān)系型數(shù)據(jù)庫類似于word,用哪一個袄秩,取決你想要編輯和處理什么數(shù)據(jù)阵翎。
關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫區(qū)別主要是在下面4個方面:
01.數(shù)據(jù)一致性不同
非關(guān)系型數(shù)據(jù)庫一般強調(diào)的是數(shù)據(jù)最終一致性,而沒有像ACID一樣強調(diào)數(shù)據(jù)的強一致性之剧,從非關(guān)系型數(shù)據(jù)庫中讀到的有可能還是處于一個中間態(tài)的數(shù)據(jù)郭卫,因此如果業(yè)務(wù)對于數(shù)據(jù)的一致性要求很高,那么非關(guān)系型數(shù)據(jù)庫并不一個很好的選擇背稼,非關(guān)系型數(shù)據(jù)庫更多的偏向于OLAP場景贰军,而關(guān)系型數(shù)據(jù)庫更多偏向于OLTP場景。
02.數(shù)據(jù)存儲方式不同
關(guān)系型和非關(guān)系型數(shù)據(jù)庫的主要差異是數(shù)據(jù)存儲的方式蟹肘。關(guān)系型數(shù)據(jù)天然就是表格式的词疼,因此存儲在數(shù)據(jù)表的行和列中俯树。數(shù)據(jù)表可以彼此關(guān)聯(lián)協(xié)作存儲,也很容易提取數(shù)據(jù)贰盗。
與其相反许饿,非關(guān)系型數(shù)據(jù)不適合存儲在數(shù)據(jù)表的行和列中,而是大塊組合在一起舵盈。非關(guān)系型數(shù)據(jù)通常存儲在數(shù)據(jù)集中陋率,就像文檔、鍵值對或者圖結(jié)構(gòu)书释。你的數(shù)據(jù)及其特性是選擇數(shù)據(jù)存儲和提取方式的首要影響因素翘贮。
03.擴展方式不同
SQL和NoSQL數(shù)據(jù)庫最大的差別可能是在擴展方式上赊窥,要支持日益增長的需求當(dāng)然要擴展爆惧。要支持更多并發(fā)量,SQL數(shù)據(jù)庫是縱向擴展锨能,也就是說提高處理能力扯再,使用速度更快速的計算機,這樣處理相同的數(shù)據(jù)集就更快了址遇。因為數(shù)據(jù)存儲在關(guān)系表中熄阻,操作的性能瓶頸可能涉及很多個表,這都需要通過提高計算機性能來克服倔约。雖然SQL數(shù)據(jù)庫有很大擴展空間秃殉,但最終肯定會達到縱向擴展的上限。
而NoSQL數(shù)據(jù)庫是橫向擴展的浸剩,非關(guān)系型數(shù)據(jù)存儲天然就是分布式的钾军,NoSQL數(shù)據(jù)庫的擴展可以通過給資源池添加更多普通的數(shù)據(jù)庫服務(wù)器(節(jié)點)來分擔(dān)負載。
04.對事務(wù)性的支持不同
如果數(shù)據(jù)操作需要高事務(wù)性或者復(fù)雜數(shù)據(jù)查詢需要控制執(zhí)行計劃绢要,那么傳統(tǒng)的SQL數(shù)據(jù)庫從性能和穩(wěn)定性方面考慮是你的最佳選擇吏恭。SQL數(shù)據(jù)庫支持對事務(wù)原子性細粒度控制,并且易于回滾事務(wù)重罪。
雖然NoSQL數(shù)據(jù)庫也可以使用事務(wù)操作樱哼,但穩(wěn)定性方面沒法和關(guān)系型數(shù)據(jù)庫比較,所以它們真正閃亮的價值是在操作的擴展性和大數(shù)據(jù)量處理方面剿配。
________________END______________