Java大數據:大數據開發必須掌握的四種數據庫

大數據的典型特徵,包括數據量大、數據類型多、價值密度低等,而具備這樣特徵的數據,在進入到存儲階段時,就需要根據數據類型及場景,來匹配適當的數據存儲解決方案。今天我們來講講Java大數據開發當中,必須掌握的四種數據庫。

大數據時代的數據,我們可以大致分爲結構化數據和非結構化數據。其中,結構化數據,主要是依靠傳統的關係型數據庫去存儲,比如說Oracle、MySQL、PostgreSQL等,都是關係型數據庫的代表。

而比結構化數據,更加龐大的非結構化數據(其中也包括半結構化數據),則主要依靠非關係型數據庫來完成存儲。對於大數據開發者而言,非關係型數據庫(NoSQL)也有不同的類型,需要匹配不同的場景需求來進行選擇。

MongoDB

MongoDB,可以說是大數據時代的數據庫代表作了。MongoDB最大的特點是表結構靈活可變,字段類型可以隨時修改。MongoDB中的每一行數據只是簡單的被轉化成Json格式後存儲,沒有表結構的限制。

沒有表結構這一點,對於MongoDB來說,帶來了優勢,當然也存在一定的缺陷,比如說在多表查詢、複雜事務等高級操作上,MongoDB就顯得不夠優秀了。

得益於MongoDB的這些特點,MongoDB很適合那些表結構經常改變,數據的邏輯結構又沒那麼複雜不需要多表查詢操作,數據量又比較大的應用場景。

Redis

Redis是現在最熱門的key-value數據庫。Redis的最大特點當然就是key-value存儲所帶來的簡單和高性能了。

所謂key-value存儲,就是每一條記錄只包含一個用於查詢數據的Key,以及與之對應的存儲數據的value,就如同現實生活中的門牌號與住戶,而沒有諸如表、字段這些常規數據庫中必需有的複雜概念,所有的查詢都僅僅依賴於key值。

得益於這種簡單的結構,再加上Redis會把所有數據加載到內存中的,Redis相比常規數據庫的讀寫性能得到了極大的提升。並且,Redis還支持數據持久化,list、set等多種數據結構,主從複製備份等功能,堪稱簡單易用。

同樣地,因爲數據結構的簡單,Redis對複雜查詢的支持也有限,不能支持多列查詢、區段查詢等。總的來說,Redis更適用於讀寫性能要求極高,且數據表結構簡單、查詢條件也同樣簡單的應用場景。

ElasticSearch

ElasticSearch,嚴格來說,其實不算是數據庫,而是搜索引擎,這個產品本身也是圍繞搜索來設計的。

ES的典型優勢就是,支持全文搜索,在對中文的支持上也比較友好(單是中文分詞器就有很多種)。ES通過建立倒排索引實現全文搜索,以實現對存入ES中的所有數據進行快速檢索,就算是非常複雜的聚合查詢也可以得到不錯的性能。

當然,ES也同樣有不足,最明顯的就是字段類型無法修改、寫入性能較低和高硬件資源消耗。這就註定了ES不適用於數據價值不高、對寫入性能有要求、數據量大而成本受限的場景下。

Hbase

HBase作爲Hadoop生態當中的重要組件,說是大數據必學,相信沒有人會反對。HBase最大的優點,就是對海量數據的支持,以及極強的橫向(存儲容量)擴展能力。

Hbase的存儲和Redis類似,爲每一行數據定義一個key,之後所有的查詢都依賴這個key進行。但是Hbase的不同在於,一行數據還可以有非常多的列項,數據會按照列進行分組和存儲,同一列的數據存儲在同一個地方。

HBase的列式存儲特性帶來了海量數據規模的支持和極強的擴展能力,但是也給數據的讀取帶來很大的侷限。由於只有同一列族的數據纔會被存放在一起,而且所有的查詢都必須要依賴Key,這就使得很多複雜查詢難以進行。

簡單來說,HBase適合數據量極大,查詢條件簡單,列與列之間聯繫不大的輕查詢應用場景。

小結一下:

以上四種,可以說是大數據開發必須掌握的四款數據庫,能夠滿足絕大多數場景下的數據存儲需求,不同的數據庫適用於不同的場景,如何去選擇就要考察開發者的選型能力了。