《SQL VS. NoSQL:你需要知道些什么?》要點(diǎn):
本文介紹了SQL VS. NoSQL:你需要知道些什么?,希望對您有用。如果有疑問,可以聯(lián)系我們。
作者:車品覺
導(dǎo)讀:
1) 列存儲數(shù)據(jù)庫采用的不是“表格”,而是若干個列族(column family),其中包括著若干行.不同于RDBMS,你不需要預(yù)先知道所有的列,每行也未必?fù)碛邢嗤瑪?shù)量的列.
2)文檔數(shù)據(jù)庫并不把數(shù)據(jù)存儲到表格的行和列中,而是存儲到文檔中,然后將這些文檔匯集在集合中.每個文檔都可以采用完全有別于其他文檔的布局.
3)如果你的數(shù)據(jù)在大幅增長,就必要快速且有效的擴(kuò)展性,NoSQL可能會適合你.但如果你的數(shù)據(jù)結(jié)構(gòu)沒有變化,增長速度適中可控,那么SQL技術(shù)可能最適合你.
原文翻譯:
“SQL過時了.”“關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)不再能滿足企業(yè)的數(shù)據(jù)管理需求.”“NoSQL等新的數(shù)據(jù)庫技術(shù)才是適合當(dāng)今企業(yè)的辦理方案.”這樣的言論甚囂塵上,無論是在數(shù)據(jù)庫技術(shù)行業(yè)內(nèi)部還是外部.但這些話說得對嗎?SQL已經(jīng)過時,而NoSQL才是符合未來發(fā)展方向的辦理方案嗎?
在本文中,我們將概述SQL和NoSQL之間的區(qū)別,各種NoSQL技術(shù)之間的差別,然后探討一下RDBMS是否真的過時了.
SQL和NoSQL之間的區(qū)別
SQL | NoSQL | |
數(shù)據(jù)存儲 | 存儲在關(guān)系模型中,由行和列組成.行包含某個特定條目/實體的所有信息,而列是所有的獨(dú)立數(shù)據(jù)點(diǎn).例如,有一行是記錄某輛汽車的,這一行里又分為“生產(chǎn)日期”、“型號”、“顏色”等列. | “NoSQL”這個術(shù)語涵蓋了多種數(shù)據(jù)庫,每種數(shù)據(jù)庫都有不同的數(shù)據(jù)存儲模型,主要是文檔、圖形、鍵值和列存儲.下文將討論它們之間的差異. |
架構(gòu)和靈活性 | 每條記錄都遵照固定的模式,列在輸入數(shù)據(jù)之前就必須確定和鎖定,每行必須包含對應(yīng)著每列的數(shù)據(jù).該架構(gòu)允許進(jìn)行事后修訂,但會涉及到改變整個數(shù)據(jù)庫和進(jìn)入脫機(jī)狀態(tài). | 采用動態(tài)架構(gòu).信息可隨時添加,每“行”(或?qū)Φ任?不必包含對應(yīng)著每“列”的數(shù)據(jù). |
可擴(kuò)展性 | 擴(kuò)展是縱向的.基本上,更多的數(shù)據(jù)就意味著更大的服務(wù)器,費(fèi)用會變得非常昂貴.利用多個服務(wù)器來擴(kuò)展RDBMS 也有可能,但這是一個困難且費(fèi)時的過程. | 擴(kuò)展是橫向的,也就是分布于多個服務(wù)器上.這些服務(wù)器可以是價格便宜的商用硬件或者云實例,因此比縱向擴(kuò)展更經(jīng)濟(jì).很多NoSQL技術(shù)也能在不同服務(wù)器之間自動分配數(shù)據(jù). |
ACID合規(guī)性(原子性,一致性,獨(dú)立性,持久性) | 絕大多數(shù)的關(guān)系數(shù)據(jù)庫都具備ACID合規(guī)性. | 各項技術(shù)之間有所不同,但很多NoSQL辦理方案為了性能和可擴(kuò)展性而犧牲了ACID合規(guī)性. |
NoSQL的多面性
如果你認(rèn)為歸屬于NoSQL的所有技術(shù)都采用相同的數(shù)據(jù)模型,這個錯誤是可以原諒的.實際上,NoSQL指的是一整套采取不同方式儲存和處理數(shù)據(jù)的技術(shù)的集合.主要的方式包含:
文檔數(shù)據(jù)庫
下圖來自于文檔數(shù)據(jù)庫辦理方案CouchDB,很好地總結(jié)了RDBMS和文檔數(shù)據(jù)庫之間的區(qū)別:
文檔數(shù)據(jù)庫并不把數(shù)據(jù)存儲到表格的行和列中,而是存儲到文檔中,然后將這些文檔匯集在集合中.每個文檔都可以采用完全有別于其他文檔的結(jié)構(gòu).文檔數(shù)據(jù)庫的實例包含上文提到的CouchDB以及MongoDB.
鍵值存儲數(shù)據(jù)庫
數(shù)據(jù)存儲于鍵值對的關(guān)聯(lián)數(shù)組中.鍵是一個屬性名,與一個值相關(guān)聯(lián).常見的鍵值存儲數(shù)據(jù)庫有Redis、Voldemort(由領(lǐng)英網(wǎng)開發(fā))和Dynamo(由亞馬遜開發(fā)).
圖形數(shù)據(jù)庫
適用于關(guān)系可以在圖形中得到充分體現(xiàn)的數(shù)據(jù).數(shù)據(jù)被存儲到圖形布局中,基本構(gòu)成要素為點(diǎn)(實體)、屬性(實體的信息)和線(實體之間的聯(lián)系).這類數(shù)據(jù)庫的例子有Neo4J和InfiniteGraph.
列存儲(或“寬列存儲”)數(shù)據(jù)庫
列存儲數(shù)據(jù)庫采用的不是“表格”,而是若干個列族(column family),其中包括著若干行.不同于RDBMS,你不需要預(yù)先知道所有的列,每行也未必?fù)碛邢嗤瑪?shù)量的列.列存儲數(shù)據(jù)庫最適合用來分析龐大的數(shù)據(jù)集.著名的列存儲數(shù)據(jù)庫有Cassandra和Hbase.
SQL VS. NoSQL——選哪個?
SQL和NoSQL水火不容的想法是錯誤的,理由并不僅僅是因為很多公司都選擇同時使用它們.就像我以前討論過的所有技術(shù)一樣,世上真的沒有那種“萬金油”的辦法,要根據(jù)用例來選擇恰當(dāng)?shù)募夹g(shù).如果你的數(shù)據(jù)需求在迅速變化,就需要高通量來應(yīng)對快速的增長,如果你的數(shù)據(jù)在大幅增長,就需要快速且有效的擴(kuò)展性,NoSQL可能會適合你.但如果你的數(shù)據(jù)結(jié)構(gòu)沒有變化,增長速度適中可控,那么SQL技術(shù)可能最適合你.毫無疑問,SQL還沒有消亡.
注:本文摘自品覺公眾號,版權(quán)著作權(quán)屬原創(chuàng)者所有,以上內(nèi)容不代表數(shù)據(jù)猿觀點(diǎn)
歡迎存眷數(shù)據(jù)猿微信公眾號:datayuancn
我們以開放的態(tài)度歡迎列位投稿數(shù)據(jù)猿,來稿請投遞至:tougao@datayuan.cn
歡迎參與《SQL VS. NoSQL:你需要知道些什么?》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/9347.html