小白學資料 一文看懂NoSQL資料庫

2021-10-23 01:45:39 字數 2953 閱讀 9424

如果你關注大資料科技動向,可能聽說過乙個叫nosql資料庫的名詞,這可能讓人有些雲裡霧裡。其實我們處在乙個激動人心的技術更迭時代,以甲骨文為代表的sql資料庫已經稱霸了企業市場30年,而近年來的nosql則是強有力的更新換代的競爭者。這篇文章就通過問答的方式來給小白解釋nosql資料庫系統是什麼,無論你的技術背景如何都能看得懂。對於資料分析從業人員來說,了解資料庫的趨勢可以讓你的職業生涯如虎添翼;而對於工程師來說,了解新的基礎系統更是必不可少的行業知識。

小白問:資料庫是什麼東西,可以吃嗎?

答:…不可以。資料庫呢,就是儲存資料的地方,就像冰箱是儲存食物的地方一樣。

小白問:誒?我的資料就儲存在自己電腦裡面的excel表裡裡,還要資料庫幹嘛?

答:自己的資料的確很方便,但是對於企業來說就不一樣了。乙個公司裡面可能有成千上萬的excel**,還在不同的電腦上,而他們的員工和客戶需要實時看到企業給他們提供的所有資料,這種檔案管理的方法就很麻煩,總不能每分鐘都把乙個新的巨大無比的excel檔案發給所有客戶呀!而且資料庫更有用的是進行查詢,企業會給內部或者客戶開發不同的應用,而這些應用需要資料的時候可以直接實用資料庫的查詢語句快速得到結果。

小白問:哦,那是說所有的人都直接在這個系統上查資料和改資料嗎?

答:是的,資料庫也會幫助你處理「併發」,也就是如果多個人同時在改資料的情況。比如你在支付寶給小灰轉賬,而小灰這個時候又偏偏剛好在給你轉賬,這時候資料庫系統就要保證你們兩個人最後餘額都是正確的,並且在你們進行交易的時候別人如果同時查詢你們倆人的餘額都會得到精確的結果。在乙個企業系統中,一秒鐘可能有成千上萬個這樣的查詢和改動發生呢。

小白問:那sql又是什麼鬼?

答:sql是一種可以查詢關係型資料庫的語言,關係型資料庫也叫sql資料庫。

所謂關係型資料庫就是資料是以**的形式進行儲存的,就和你電腦上的excel表一樣,資料是一行一列整整齊齊的躺著的。**之間有著這樣或那樣的關係,可以通過某資訊連線在一起 。想查這些**裡的任何資料的程式設計師們就可以把他們想要的資料形式轉化成sql語句然後發給資料庫,得到資料結果。比如你可以有乙個食物管理的資料庫,裡面有兩個表(食物表和主人表),長成下面的這個樣子:

食物編號食物名稱數量 喜愛程度主人編號

1 獼猴桃 4 53

2 菠菜 10 2 2

3巧克力 99 1001

主人編號主人姓名 主人性別

1小白 女

2小黑 男

3小灰 男

我們可以寫一句簡單的sql語句直接調出所有男主人擁有的食品及數量。

select 主人姓名,食物名稱,數量

from 食物表,主人表

where 食物表.主人編號=主人表.主人編號 and 主人性別=『男』

主人姓名食物名稱數量

小黑菠菜10

小灰獼猴桃 4

小白問:哦,那nosql到底有什麼過人之處呢?

答:因為近年來企業要處理的資料越來越多,越來越複雜,就出現了兩個之前關係型資料庫解決不了的問題:快速增長的資料規模和日漸複雜的資料模型。

第乙個問題就是資料越來越多,公司以前買的裝關係型資料庫的那台電腦放不下了,那這個時候就有兩種選擇:

一種就是直接去買一台更大空間的計算機取代現有的機器。這個方法是有限制的,因為這種機器的**一般非常昂貴,而且這個空間總是有乙個上限的。

另外一種選擇就是再買一台機器,然後把新的資料放到新機器裡的另外乙個sql資料庫裡面,這個過程也叫「分片」(sharding)。 這個時候程式設計師要開始杯具的加班了。因為這個轉換的過程非常容易出問題,而且會給使用資料庫的應用增加很多的複雜度。比如我們之前的例子,在查詢食品和數量的語句的時候我們要將同樣的語句同時發給兩個伺服器,然後把最後的結果綜合起來,給應用的開發增加了很多不必要的負擔。分片還有很多別的缺點我就不一一贅述了。

而nosql資料庫的伺服器本身就支援很多個機器儲存資料進行分布式查詢,這樣當空間不夠用的時候就直接去扛一台新的機器回來連線到已有的計算機集群上裝好資料庫即可,程式設計師可以回家睡個好覺啦。

小白問:明白了,那另外乙個關係型資料庫沒有解決的問題呢?

答:另外的乙個問題就是把資料放到sql資料之前要進行資料建模,也就是要考慮好每乙個表裡面每一列都代表什麼,不同的**之間要怎樣相互關聯起來。這對很多公司來說是一件非常耗費時間和精力的事情,因為他們的資料來源的種類太多了。而且在資料進入資料庫之後,如果在表中增加新的一列(比如想把食物的種類加進第乙個表中)或者是要改變某一列的特性的話,對於系統來說是非常困難的,因為表中的資料已經一行行的存好了。

而nosql資料庫就減輕了資料建模的負擔,比如上面的表裡面的一行可以變成下面json文件的樣子:

食物名稱:獼猴桃,

數量:4,

喜愛程度:5,

主人:{

姓名:小灰,

性別:男

這樣很方便的可以修改資料模型的樣子,而且從源資料不需要怎麼改就可以放入資料庫。目前用有乙個行業叫做etl,就是專門做資料形狀轉化的:他們將不同的源資料打磨到想要的**的模子裡,然後放入關係型資料庫。這個行業價值好幾十億美元呢,很瘋狂吧?用了nosql,公司可以節省好多時間和人民幣呢。

小白:那是說nosql就是用文件,而sql就是用**嗎?

答:nosql其實有很多不同的種類的,適用在不同的情況中並且分別有不同的儲存方法。json是文件類nosql的典型格式,我們平時使用的word和pdf檔案都可以很容易放入文件型資料庫進行查詢。而其他種類的nosql也可能是用圖或者雜湊表的模型來儲存資料。如果你的資料儲存的是乙個社交網路型別的應用,那麼對你來說用乙個基於圖的資料庫可能更加合適,因為你關心的社交網路場景中的問題都可以得到比較快速的回答。

小白問:既然叫nosql,那和sql肯定是水火不容咯?

答:哪有,nosql其實是not only sql,就是不僅僅是sql,有一些nosql資料庫還支援直接用sql來做查詢呢。兩者的區別主要是我上面提到的兩點: 1.對資料建模的要求不同:nosql的建模程式比較簡單靈活;2.對資料增加的處理方式不同:使用nosql可以直接進行分布式處理。在資料規模增長需要增加新的機器的時候,不需要程式設計師對使用資料庫的應用進行**進行改動,直接在資料庫集群中增加一台新的計算機就可以啦。

一文看懂kylin

kylin到底解決了什麼關鍵問題 要徹底的解決掉資料查詢時間隨著資料量的增長而成線性增長的規律 kylin適合哪類資料的處理 通常查詢資料,一般是統計結果,如果是統計結果,必然會按照維度來進行聚合,kylin的工作原理是多維立方體分析,適合需要從多個維度來觀察資料的查詢。維度,看資料的角度,比如地區...

一文看懂xml

先簡單介紹下html xml xpath 1.html 超文字語言,用來展示資料。2.xml 可擴充套件標記語言,用來傳輸資料。僅僅是純文字,標籤可自定義。3.xpath 專門在xml中查詢資訊的語言。xml 文件必須包含根元素。該元素是所有其他元素的父元素。xml 文件中的元素形成了一棵文件樹。這...

一文看懂條件編譯

條件編譯概述 就是在滿足一定的條件時才對源 進行編譯。條件編譯一般有3種形式 形式一 a ifdef 識別符號 識別符號定義時,執行程式段1,否則執行程式段2 程式段1 else 程式段2 endif b ifdef 識別符號 程式段1 endif 例如 define k 1 ifdef k pri...