《小白學(xué)數(shù)據(jù):一文看懂NoSQL數(shù)據(jù)庫》要點(diǎn):
本文介紹了小白學(xué)數(shù)據(jù):一文看懂NoSQL數(shù)據(jù)庫,希望對您有用。如果有疑問,可以聯(lián)系我們。
此貓簡介:姓名滴滴,性別男,國籍美國.性格溫順,宅死,喜歡陪主人上班和學(xué)數(shù)據(jù),主人是大數(shù)據(jù)文摘非專欄主編Aileen,據(jù)主人介紹,滴滴很愿意為大數(shù)據(jù)文摘“小白學(xué)數(shù)據(jù)”系列代言
大數(shù)據(jù)文摘作品,轉(zhuǎn)載需授權(quán)
作者: 薛菲
審稿:張遠(yuǎn)園 Aileen
“小白學(xué)數(shù)據(jù)”系列是大數(shù)據(jù)文摘新的嘗試,歡迎大家給我們提出名貴意見,更歡迎給我們推薦文章和投稿,給我們后臺留言即可,謝謝.
作者注
如果你關(guān)注大數(shù)據(jù)科技動向,可能聽說過一個叫NoSQL數(shù)據(jù)庫的名詞,這可能讓人有些云里霧里.其實(shí)我們處在一個激動人心的技術(shù)更迭時代,以甲骨文為代表的SQL數(shù)據(jù)庫已經(jīng)稱霸了企業(yè)市場30年,而近年來的NoSQL則是強(qiáng)有力的更新?lián)Q代的競爭者.這篇文章就通過問答的方式來給小白解釋NoSQL數(shù)據(jù)庫系統(tǒng)是什么,無論你的技術(shù)配景如何都能看得懂.對于數(shù)據(jù)分析從業(yè)人員來說,了解數(shù)據(jù)庫的趨勢可以讓你的職業(yè)生涯如虎添翼;而對于工程師來說,了解新的基礎(chǔ)系統(tǒng)更是必不可少的行業(yè)知識.
幾個基本問題
小白問:數(shù)據(jù)庫是什么東西,可以吃嗎?
答:......不可以.數(shù)據(jù)庫呢,便是存儲數(shù)據(jù)的地方,就像冰箱是存儲食物的地方一樣.
小白問:誒?我的數(shù)據(jù)就存儲在本身電腦里面的excel表里里,還要數(shù)據(jù)庫干嘛?
答:自己的數(shù)據(jù)的確很方便,但是對于企業(yè)來說就不一樣了.一個公司里面可能有成千上萬的Excel表格,還在不同的電腦上,而他們的員工和客戶需要實(shí)時看到企業(yè)給他們提供的所有數(shù)據(jù),這種文件管理的辦法就很麻煩,總不能每分鐘都把一個新的巨大無比的excel文件發(fā)給所有客戶呀!而且數(shù)據(jù)庫更有用的是進(jìn)行查詢,企業(yè)會給內(nèi)部或者客戶開發(fā)不同的應(yīng)用,而這些應(yīng)用需要數(shù)據(jù)的時候可以直接實(shí)用數(shù)據(jù)庫的查詢語句快速得到結(jié)果.
小白問:哦,那是說所有的人都直接在這個系統(tǒng)上查數(shù)據(jù)和改數(shù)據(jù)嗎?
答:是的,數(shù)據(jù)庫也會贊助你處理“并發(fā)”,也就是如果多個人同時在改數(shù)據(jù)的情況.比如你在支付寶給小灰轉(zhuǎn)賬,而小灰這個時候又偏偏剛好在給你轉(zhuǎn)賬,這時候數(shù)據(jù)庫系統(tǒng)就要保證你們兩個人最后余額都是正確的,并且在你們進(jìn)行交易的時候別人如果同時查詢你們倆人的余額都會得到精確的結(jié)果.在一個企業(yè)系統(tǒng)中,一秒鐘可能有成千上萬個這樣的查詢和改動發(fā)生呢.
小白問:那SQL又是什么鬼?
答:SQL是一種可以查詢關(guān)系型數(shù)據(jù)庫的語言,關(guān)系型數(shù)據(jù)庫也叫SQL數(shù)據(jù)庫.
所謂關(guān)系型數(shù)據(jù)庫就是數(shù)據(jù)是以表格的形式進(jìn)行存儲的,就和你電腦上的Excel表一樣,數(shù)據(jù)是一行一列整整齊齊的躺著的.表格之間有著這樣或那樣的關(guān)系,可以通過某信息連接在一起 .想查這些表格里的任何數(shù)據(jù)的程序員們就可以把他們想要的數(shù)據(jù)形式轉(zhuǎn)化成SQL語句然后發(fā)給數(shù)據(jù)庫,得到數(shù)據(jù)結(jié)果.好比你可以有一個食物管理的數(shù)據(jù)庫,里面有兩個表(食物表和主人表),長成下面的這個樣子:
食物編號食物名稱數(shù)量 喜愛程度主人編號
1 獼猴桃 4 53
2 菠菜 10 2 2
3巧克力 99 1001
主人編號主人姓名 主人性別
1小白 女
2小黑 男
3小灰 男
我們可以寫一句簡單的SQL語句直接調(diào)出所有男主人擁有的食品及數(shù)量.
SELECT 主人姓名,食物名稱,數(shù)量
FROM 食物表,主人表
WHERE 食物表.主人編號=主人表.主人編號 AND 主人性別=‘男’
=>
主人姓名食物名稱數(shù)量
小黑菠菜10
小灰獼猴桃 4
深入聊聊
小白問:哦,那NoSQL到底有什么過人之處呢?
答:因?yàn)榻陙砥髽I(yè)要處理的數(shù)據(jù)越來越多,越來越復(fù)雜,就出現(xiàn)了兩個之前關(guān)系型數(shù)據(jù)庫辦理不了的問題:快速增長的數(shù)據(jù)規(guī)模和日漸復(fù)雜的數(shù)據(jù)模型.
第一個問題便是數(shù)據(jù)越來越多,公司以前買的裝關(guān)系型數(shù)據(jù)庫的那臺電腦放不下了,那這個時候就有兩種選擇:
一種就是直接去買一臺更大空間的計(jì)算機(jī)取代現(xiàn)有的機(jī)器.這個辦法是有限制的,因?yàn)檫@種機(jī)器的價(jià)格一般非常昂貴,而且這個空間總是有一個上限的.
另外一種選擇就是再買一臺機(jī)器,然后把新的數(shù)據(jù)放到新機(jī)器里的另外一個SQL數(shù)據(jù)庫里面,這個過程也叫“分片”(sharding). 這個時候程序員要開始杯具的加班了.因?yàn)檫@個轉(zhuǎn)換的過程非常容易出問題,而且會給使用數(shù)據(jù)庫的應(yīng)用增加很多的復(fù)雜度.好比我們之前的例子,在查詢食品和數(shù)量的語句的時候我們要將同樣的語句同時發(fā)給兩個服務(wù)器,然后把最后的結(jié)果綜合起來,給應(yīng)用的開發(fā)增加了很多不必要的負(fù)擔(dān).分片還有很多別的缺點(diǎn)我就不一一贅述了.
而NoSQL數(shù)據(jù)庫的服務(wù)器自己就支持很多個機(jī)器存儲數(shù)據(jù)進(jìn)行分布式查詢,這樣當(dāng)空間不夠用的時候就直接去扛一臺新的機(jī)器回來連接到已有的計(jì)算機(jī)集群上裝好數(shù)據(jù)庫即可,程序員可以回家睡個好覺啦.
小白問:明白了,那另外一個關(guān)系型數(shù)據(jù)庫沒有辦理的問題呢?
答:另外的一個問題就是把數(shù)據(jù)放到SQL數(shù)據(jù)之前要進(jìn)行數(shù)據(jù)建模,也就是要考慮好每一個表里面每一列都代表什么,不同的表格之間要怎樣相互關(guān)聯(lián)起來.這對很多公司來說是一件非常耗費(fèi)時間和精力的事情,因?yàn)樗麄兊臄?shù)據(jù)源的種類太多了.而且在數(shù)據(jù)進(jìn)入數(shù)據(jù)庫之后,如果在表中增加新的一列(好比想把食物的種類加進(jìn)第一個表中)或者是要改變某一列的特性的話,對于系統(tǒng)來說是非常困難的,因?yàn)楸碇械臄?shù)據(jù)已經(jīng)一行行的存好了.
而NoSQL數(shù)據(jù)庫就減輕了數(shù)據(jù)建模的負(fù)擔(dān),好比上面的表里面的一行可以變成下面JSON文檔的樣子:
{
食物名稱:獼猴桃,
數(shù)量:4,
喜愛程度:5,
主人:{
姓名:小灰,
性別:男
}
}
這樣很方便的可以修改數(shù)據(jù)模型的樣子,而且從源數(shù)據(jù)不必要怎么改就可以放入數(shù)據(jù)庫.目前用有一個行業(yè)叫做ETL,就是專門做數(shù)據(jù)形狀轉(zhuǎn)化的:他們將不同的源數(shù)據(jù)打磨到想要的表格的模子里,然后放入關(guān)系型數(shù)據(jù)庫.這個行業(yè)價(jià)值好幾十億美元呢,很瘋狂吧?用了NoSQL,公司可以節(jié)省好多時間和人民幣呢.
小白:那是說NoSQL便是用文檔,而SQL便是用表格嗎?
答:NoSQL其實(shí)有很多不同的種類的,適用在不同的情況中并且分別有不同的存儲辦法.JSON是文檔類NoSQL的典型格式,我們平時使用的word和pdf文件都可以很容易放入文檔型數(shù)據(jù)庫進(jìn)行查詢.而其他種類的NoSQL也可能是用圖或者哈希表的模型來存儲數(shù)據(jù).如果你的數(shù)據(jù)存儲的是一個社交網(wǎng)絡(luò)類型的應(yīng)用,那么對你來說用一個基于圖的數(shù)據(jù)庫可能更加合適,因?yàn)槟汴P(guān)心的社交網(wǎng)絡(luò)場景中的問題都可以得到比較快速的回答.
小白問:既然叫NoSQL,那和SQL肯定是冰炭不洽咯?
答:哪有,NoSql其實(shí)是Not Only SQL,就是不僅僅是SQL,有一些NoSQL數(shù)據(jù)庫還支持直接用SQL來做查詢呢.兩者的區(qū)別主要是我上面提到的兩點(diǎn): 1.對數(shù)據(jù)建模的要求不同:NoSQL的建模程序比擬簡單靈活;2.對數(shù)據(jù)增加的處理方式不同:使用NoSQL可以直接進(jìn)行分布式處理.在數(shù)據(jù)規(guī)模增長需要增加新的機(jī)器的時候,不需要程序員對使用數(shù)據(jù)庫的應(yīng)用進(jìn)行代碼進(jìn)行改動,直接在數(shù)據(jù)庫集群中增加一臺新的計(jì)算機(jī)就可以啦.
----------------------------------
預(yù)告:這篇文章是NoSQL的入門介紹.如果你對數(shù)據(jù)庫已經(jīng)有所了解,請期待我們的下一篇文章,將介紹不同種類的NoSQL數(shù)據(jù)庫、如安在不同的應(yīng)用場景中選取適合的數(shù)據(jù)庫系統(tǒng)以及未來技術(shù)展望,敬請期待.
【小調(diào)查】歡迎各位讀者反饋意見,也歡迎給我們留言
小白學(xué)數(shù)據(jù):一文看懂機(jī)器學(xué)
編譯團(tuán)隊(duì)
大數(shù)據(jù)文摘后臺回復(fù)“志愿者”了解如何參加我們
維易PHP培訓(xùn)學(xué)院每天發(fā)布《小白學(xué)數(shù)據(jù):一文看懂NoSQL數(shù)據(jù)庫》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/9341.html