天天看點

小白學資料之NoSQL資料庫 進階篇◆ ◆ ◆◆ ◆ ◆ ◆ ◆ ◆

小白學資料之NoSQL資料庫 進階篇◆ ◆ ◆◆ ◆ ◆ ◆ ◆ ◆

寫在前面

這篇是小白學資料系列的nosql資料庫的第二篇:進階篇。資料分析方向的從業人員可以從中擷取資料倉庫軟體市場的現狀和分析,以增加自己的知識儲備,為可能的技術轉型打基礎。而工程師可以找到關于nosql主流産品的分析介紹以及選擇資料庫的一些準則。nosql不是萬能藥,采用技術最好不要跟風,選擇适合自己資料和應用的才是最好的喲~沒有看過nosql基礎篇的讀者可以在文末的曆史文章回顧中找到。

小白問:上次問了nosql,sql的差別,好像有點忘了,我們可以溫故而知新一下嗎?

答:。。。好吧,上次我們說了他們主要有兩個差別:第一就是資料模組化的方式不同,sql是采用表格的模型,雖然比較簡潔整齊但是前期模組化需要的投入比較大,并且之後如果想要更改這個模型是一件非常困難的事情;第二就是系統的可擴充性不同,nosql可以非常簡單的加入新的機器進行分布式運作,而sql資料庫則需要進行複雜的分片過程,給使用資料庫的應用增加複雜度。

小白問:這幾天聽說了一個叫做資料倉庫的東西,這個和資料庫有什麼關系嗎?

答:從技術上講,資料倉庫是資料庫的一種。從功能上講,資料庫分成兩種:一種是實時系統(也叫線上交易處理oltp),另外一種就是資料倉庫了(也叫線上分析處理olap)。

實時系統主要的功能是日常的操作處理。假設我們有一個賣煎餅的電子商務網站,那我們的電子商店應用連接配接的系統就是實時的oltp系統,這個資料庫中的資訊永遠是最新的,每次有人從我們的網站買煎餅,這個交易都要馬上記錄在資料庫中可以進行發貨客服等服務,關心和操作這些資料的人主要是公司的一線職工比如快遞小哥以及一線的管理人員比如銷售經理。這個系統單個的請求一般來說都比較簡單,而由于買我們煎餅的人數很多,是以要保障這個系統的吞吐量。

然而公司的ceo和高層管理人員對資料有不同的訴求,他們希望可以通過分析資料來了解公司産品銷售和财務的健康狀況,進行分析和決策。有可能通過分析表明,煎餅中的薄脆會很快的售罄,那産品決策者可以增加薄脆原料的采購量。這個時候如果繼續使用我們前面的實時oltp系統就出現了兩個問題。第一,由于實時系統中的資料模組化是根據日常操作的需求來進行的,當需要大規模的複雜查詢和計算的時候就比較捉急了。而資料倉庫olap中的模組化是專門為這個資料分析的需求而産生的,可以很快的進行聚集類的計算(比如平均日銷售量,年銷售總量等)。第二,由于實時系統對性能的要求很高,如果ceo需要的查詢結果奪取了日常營運的資源,那就得不償失了。資料倉庫的解決方案就是定期将實時系統中新增的資訊移到資料倉庫中,也就是同樣的一份資訊用不同的方式存了兩遍,這兩個地方的資料模型并不相同,這樣ceo和外賣小哥就不會互相影響了!

小白問:你說資料倉庫中的資訊是定時增加的,那就是說這裡面的資訊不是最全面的嗎?

答:你說的對,資料倉庫的資訊會有些滞後,但是我們煎餅公司的決策人員想得到的是銷售趨勢而不是精細的資訊,有個那麼幾天的延遲一般來說也沒有什麼關系。資料科學家的戰場也是在資料倉庫中哦!

小白問:那nosql資料庫一般是作為實時的還是資料倉庫呢?

答:在目前來說nosql更加常見的應用是實時的oltp實時資料庫,因為我們上次說了nosql的強項主要在于高度可擴充性和靈活的模組化,這都是實時系統非常需要的東西,而對于進行聚集的查詢所需要的計算能力還有待提高。新興的大資料技術中最适合olap資料倉庫的就是hadoop相關的技術了,這裡我們就不展開說了。

下面這個圖是來自于高德納咨詢公司(gartner,全球最具權威的it研究公司)在2015年2月釋出的對資料倉庫olap的市場分析。我們可以看到,在上司者(leaders)的這個象限中仍然隻有傳統的大型公司,比如大家都熟悉的甲骨文(oracle),微軟(microsoft)和ibm。而新興的技術進入這個名單的隻有寥寥不多的幾家,其中包括:亞馬遜雲服務 (amazon web services)提供的資料分析服務,提供hadoop相關軟體的cloudera和mapr公司以及提供文檔型nosql資料庫的marklogic公司。等會我們會看到,在高德納公司提供的實時資料庫的分析報告中則是百花齊放和群雄争霸的一個場面。而在資料倉庫這個方面,還是傳統公司占據主要的市場佔有率,而新興的大資料分析系統還有待進一步的成熟。

小白學資料之NoSQL資料庫 進階篇◆ ◆ ◆◆ ◆ ◆ ◆ ◆ ◆

圖注:高德納2015olap資料倉庫系統市場分析

深入聊聊

小白問:nosql的資料模組化方式有哪幾種呢?我記得上次提到文檔和圖,還有别的嗎?

答:記性不錯!主要有下面的四種:

1.鍵值型(key-value) 

2.列存儲型 (wide-column)

3.文檔型 

4.圖型

下面我就簡單介紹一下這四種資料庫的模組化方式,你可以參照下面高德納的實時系統oltp報告來對号入座,我會給一些這個圖中的例子,給他們分到不同的類别中:

小白學資料之NoSQL資料庫 進階篇◆ ◆ ◆◆ ◆ ◆ ◆ ◆ ◆

圖注:高德納2015oltp實時資料庫系統市場分析

1.鍵值型資料庫

這是nosql中資料模型中最簡單的一個了,主要就是用哈希表,通過對于鍵(key)的查找來找到特定的資料。鍵值型資料庫最大的優勢其實就是它非常簡單,很容易部署在應用中。而缺點就是這個模型過于簡單,對于資料沒有任何結構化的認知,隻是知道傳回了一坨資料,裡面是什麼完全沒有概念。這種nosql資料庫最典型的應用就是作為緩存,用來增加查詢的性能,其實已經不能算作一個資料庫了。可以在上面圖中的上司象限看到redis lab,這個公司提供的産品redis已經是風靡一時的緩存産品了,各大公司都用它!

小白學資料之NoSQL資料庫 進階篇◆ ◆ ◆◆ ◆ ◆ ◆ ◆ ◆

2.列存儲型資料庫

這個資料模型其實和sql的資料模型很像,都是存儲在一個表格形狀中的,但是有幾個很重要的不同點。首先,在将資料放入列存儲nosql資料庫之前是不需要知道有那些列和列的具體資訊的,而sql是必須要這些資訊才可以用的。另外每一行并不是在每一列都是有資料的,這是一個非常稀疏的表格。這種産品的可擴充性都很不錯,上面表中就有在上司象限中datastax公司所提供的産品cassandra。

小白學資料之NoSQL資料庫 進階篇◆ ◆ ◆◆ ◆ ◆ ◆ ◆ ◆

3.文檔型資料庫

我們上一篇文章中用json的例子就是文檔型資料庫,這些産品的優勢在于資料模組化非常的靈活,而且可以對資料的結構有所了解進行更加精确的查詢。但是目前由于沒有統一的查詢文法,不同的産品的查詢語言非常不一樣。這個類型中的代表性産品有:mongodb和marklogic,這兩個公司都已經成為了市場的上司者之一。

小白學資料之NoSQL資料庫 進階篇◆ ◆ ◆◆ ◆ ◆ ◆ ◆ ◆

4.圖型資料庫

圖型資料庫可以實用靈活的模型,對于社交網絡方向的要求非常适合,隻要是圖結構的應用都是圖型資料庫的強項。這個類型的代表産品是neo科技公司的neo4j。

小白學資料之NoSQL資料庫 進階篇◆ ◆ ◆◆ ◆ ◆ ◆ ◆ ◆

小白問:這麼多不一樣的nosql資料庫我都暈了,我有選擇障礙症啊,求問怎麼選資料庫?

答:這個當然是方方面面的了,需要考慮和公司已有的人才和技術資源的相容性,以及産品價格和擁有産品後的支出,即使采用的是開源的産品也要考慮公司花大錢請來的程式員在這維護和建立系統方面花的時間,計算擁有系統的總支出。

如果從技術方面考慮的話就更多了,最主要就是要了解需求,下面有幾個關鍵的點:

1. 如果你需要的是一個分析系統,而模組化不需要太靈活的話,sql資料庫仍然是最好的選擇。

2. 如果需要靈活的模組化以及分析大規模的資料的話,可以考慮hadoop或者spark的解決方案。

3. 如果你需要的是一個實時系統,要考慮對已經擁有的資料,怎樣模組化最适合(文檔,圖型還是稀疏表格)。

4. 實時系統要考慮對事務的需求。所謂事務就是有一系列的資料庫操作,這些操作要麼都做要麼都不做。比如你給小灰支付寶轉賬10塊錢,最後要麼成功了:你少10塊,小灰多10塊;要麼你餘額不足失敗了,這時候兩個人的餘額都不變。不能出現别的可能性。sql資料庫是支援事務的,但是很遺憾很多的nosql是不支援事務的(比如mongodb)。如果應用對這些方面有要求,注意選擇有相關功能的資料庫。

5.除此之外還要考慮如果叢集中有機器當機了會發生什麼,備份是怎樣進行的,如何檢測系統的性能并調式性能等等等等......

俗話說的好,欲善其事必先利其器。選好了資料庫系統可以讓你的應用開發和資料分析事半功倍喲!

小白問:nosql是一個新興的科技,你覺得在未來的一段時間會朝怎樣的方向發展呢?

答:這個問題好,我覺得這幾個發展方向是值得關注的:

1.對于資料倉庫的應用會出現性能更加好的解決方案,畢竟是ceo時常需要的東西呢。比如和bi工具的連接配接也會加強的。

2.目前采用nosql系統的企業主要分布在金融和電信等行業,應該會出現針對于這些行業特定應用(比如crm和金融中的風控)的整體解決方案打包産品。

3.技術方面更加成熟,更多的産品會支援事務等其他企業需要的功能。

這是小白學資料系列第一次寫進階篇的文章,意在給讀過基礎篇并對nosql有進一步興趣的讀者提供更多的資訊。其他的話題,我們的設想也是基礎篇+進階篇的結構。便于我們更好地給讀者提供有幫助的文章,請幫我們填寫一下。謝謝!

原文釋出時間為:2016-05-03

本文來自雲栖社群合作夥伴“大資料文摘”,了解相關資訊可以關注“bigdatadigest”微信公衆号