數據是啥?數據都去哪兒了?
- 2019 年 10 月 10 日
- 筆記
【這是一猿小講的第 57 篇原創分享】
大家應該都忙著給祖國慶生,根本無心上班,所以精心為各位打造一篇,一點都不用費腦的文章,一起聊聊數據及數據存儲的那些事兒。敲黑板,講重點,我們開始。
1. 數據是啥?秒懂!
數據(data)是事實或觀察的結果,是對客觀事物的邏輯歸納,是用於表示客觀事物的未經加工的的原始素材。數據可以是連續的值,比如聲音、影像,稱為模擬數據。也可以是離散的,如符號、文字,稱為數字數據——引用百度百科。
2. 數據從哪兒來?秒懂!
敢問你是否知道,當你點亮手機螢幕,手指在手機螢幕上的每一次舞動,背後到底為這個世界貢獻了多少數據?
當你在購物網站時,瀏覽的那些名牌包包;當你使用聊天工具時,說過的那些話;當你打開影片網站,觀看虐狗的影視劇;當你……,其實背後就是五花八門、雜亂無章、點點滴滴的數據。
假如要把這些數據都打通攢在一起,那麼就會在網路上看到一個透明的你自己(做了什麼壞事,跑都跑不了,哈哈,其實大家都是透明人)。
3. 數據放到哪兒?N秒懂!
本次分享的重點來了,既然知道了什麼是數據,也知道了數據從哪兒來,那接下來就一起看看數據到底該存儲到哪兒?
實事求是的說,雖然深耕互聯網行業很多年,通過這次科普,感覺也是略顯孤陋寡聞。不深入不知道,一深入嚇一跳,真是刷新了我三觀,亮瞎了我狗眼。

如上圖所示,按照資料庫類型進行分類,主要分為關係資料庫(Relational DBMS)、鍵值存儲(Key-value stores)、文檔存儲(Document stores) 、圖形資料庫(Graph DBMS)、時間序列資料庫(Time Series DBMS)、資源描述框架存儲(RDF stores)、面向對象的資料庫(Object oriented DBMS)、搜索引擎(Search engines)、列存儲資料庫(Wide column stores)、多值資料庫(Multivalue DBMS)、原生XML資料庫(Native XML DBMS)、事件存儲資料庫(Event stores)、內容存儲(Content stores)、導航資料庫(Navigational DBMS)。細心的小夥伴會發現,大概分為 14 大種資料庫類型的系統。
納尼?14 種資料庫類型的系統?!第一反應就是孤陋寡聞。好了,不吹噓,我粗略的把她們劃分為被程式猿頻繁寵幸系列、被程式猿偶爾翻牌子系列、被程式猿打入冷宮系列,那接下來就逐個認識一下。
被程式猿頻繁寵幸系列
關係型資料庫(Relational DBMS),來個非專業的解釋,關係型資料庫可以很好地存儲你買的包包,你的好友列表等等業務數據。
例如存儲一個老師對應多個學生的數據(多對多),一本書對應多個作者(一對多),一本書對應一個出版日期(一對一)的一些關係模型的數據。

如上圖所示,最常見 TOP 10 的關係型資料庫,當然被程式猿用的滾瓜爛熟的當屬 MySQL。不過大數據正當時,所以還要提一嘴 Hive,它其實是一款基於大數據生態 Hadoop 的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供 SQL 查詢功能(先了解,你用到時再深入也未嘗不可)。
鍵值存儲資料庫(Key-value stores),顧名思義只能存儲鍵值對,是 NoSQL 領域中應用範圍最廣的,涉及輪子也較多的一類。

如上圖所示,在鍵值資料庫流行度排行中,Redis 不出意外的排名第一。不過在這裡也要提一嘴 Memcached、Ehcache,它們在快取系統中也應用十分廣泛。
另外在面試過程中,也會經常會問「常用的快取資料庫有哪些?Redis 與 Memcached 的本質區別是啥?Redis 與 Ehcache 的區別又是啥?」(請問你能答上來嗎?答案網上一搜一籮筐)
文檔存儲資料庫(Document stores),先來個非專業解釋,支援存儲格式不同的文檔記錄,一般直接用來存儲 JSON。

如上圖統計,MongoDB 當仁不讓地佔據了第一的位置。不過在這裡也要提一嘴 CouchDB,因為它在區塊鏈中經常被當做狀態資料庫使用。
咳咳,還在堅持看,真棒!接下來分享一下那些被程式猿偶爾寵幸的系列資料庫(工作之中,解決特定場景時,偶爾會用到)
被程式猿偶爾翻牌子系列
圖形資料庫(Graph DBMS),被鼓吹為大數據時代的利器,用來描述、存儲、查詢對象之間的複雜關聯關係。例如你給張三打過電話,張三給李四打過電話,李四給….. ,這樣就形成了一個通話記錄關係網路分析圖。

如上圖所示,基於 Java 的 Neo4j 到目前為止是最受歡迎的圖形資料庫。在做關係網路分析場景的項目,不妨拿去實踐一下。
時間序列資料庫(Time Series DBMS),來個非專業解釋,是為了高效存儲和快速處理海量時序大數據而設計的,做過監控應用的小夥伴應該會比較清楚,例如實時監測伺服器的記憶體指標狀態、CPU 狀態、磁碟 IO 狀態等一些性能監控的指標數據,並上報監控系統,監控系統一般都用時序資料庫完成指標數據的存儲。

如上圖所示,InfluxDB 當仁不讓地佔據了第一的位置,這裡要重點說一說它,它旨在處理高負載的存儲和查詢,在當前比較火熱的大數據實時計算引擎 flink 源碼中,發現也提供監控指標數據寫入 InfluxDB 的實現。而且在日常研發過程中,一般也都採用 InfluxDB 作為監控指標數據的存儲,感興趣的可以去官網https://www.influxdata.com/products/influxdb-overview/深入實踐一番。
不過在圖中我們又見到了 Prometheus (普羅米修斯),在之前的《監控一哥Prometheus你可認識?》《監控實戰Prometheus+Grafana》文章中,已經詳細說過它,已經遺忘的可以再回味一下。
搜索引擎(Search engines),主要用於數據內容的搜索,支援複雜搜索表達式,全文搜索,源搜索,搜索結果的排序和分組等。

如上圖所示,Elasticsearch 當仁不讓地佔據了第一的位置,我們在《傻瓜也能玩轉日誌歸集》已經詳細實踐過,感興趣的閑暇之餘不妨閱讀實踐一下。
不過在面試中,偶爾會被問到 Elasticsearch(ES) 與 Solr 的區別?你可否答上來?答案網上搜之一籮筐,稍微提煉總結就 OK。
列存儲資料庫(Wide column stores),是按照列為基礎邏輯存儲單元進行存儲的,讀取效率高,沒有冗餘,特別適合在大數據領域使用。

如上圖所示,在技術選型的時候,排名靠前的 Cassandra 和 HBase 肯定是首選。弱弱的問一句,這兩個到底啥區別呢?只拋問題,不作答,網上答案搜之一籮筐。
咳咳,還在堅持看,真棒!接下來看看那些被程式猿打入冷宮系列資料庫。
被程式猿打入冷宮系列
導航資料庫管理系統(Navigational DBMS)、內容存儲(Content stores)、事件存儲資料庫(Event stores)、原生XML資料庫(Native XML DBMS)、多值資料庫(Multivalue DBMS)、資源描述框架存儲(RDF stores)、面向對象的資料庫(Object oriented DBMS)
講真,關於被打入冷宮系列資料庫的內容碼了一大堆,感覺沒啥鳥用,遂刪之,用到之時或者閑暇之餘再細說吧。
4. 全局排名上再來看一看
好了,假裝 14 種類型的資料庫我們都聊完了,那不妨了解一下 14 種類型下 352 個資料庫系統的一個整體排名,重點關注前 10,在你在技術選型的時候,不妨當做一個參考指標吧。

了解完全局排名,不妨再看看 14 種類型的資料庫,哪類比較流行?可以看出被程式猿偶爾翻牌子的系列資料庫逐漸流行起來,是不是大數據正當時,是不是人工智慧正流行導致的呢?不敢妄下結論,不過時間應該會告訴我們。

5. 寫在最後
弱弱的再問一句,恰逢金九銀十跳槽季,簡歷上有沒有把 Redis、MongoDB 寫成關係型資料庫呢?敢問你現在是否知道 MySQL、Oracle、ElasticSearch、MongoDB、Redis 到底屬於哪一類呢?