前言
在大數據時代的今天,數據分析的體量、數據分析的速度都變得越來越重要,也是考驗數據分析引擎的重點。在數據分析領域,如果有一款引擎在易用性,數據體量,查詢效率上都能滿足,這一定是一款好的分析引擎,現實是每個引擎都有優缺點,在選型的時候需要根據業務需求來確定選哪個合適。比如數據量小,查詢方便選用什么? 數據量大,分析的維度有限? 數據量大,所有維度都有可能用來作為分析。每種業務場景需要的引擎也會不一樣。下面總結了幾種開源的常用的引擎,對比一下這些引擎的優缺點。
Greenplum
基於MPP的架構,底層表主要為postgresql,分為master節點及segment節點,master節點管理查詢,segment為數據節點,執行數據的查詢、存儲。基於大寬表的方式,無需預計算,所有維度均可進行分析;缺點是並發量支持的比較少,查詢速度非實時,只能做到准實時,如幾秒到幾十秒的RT;不支持大量的實時寫入,一般通過segment來裝載數據。在標簽圈人的場景使用的比較多。
ES
ES之前的定位一直是文本的倒排索引引擎,用於文本搜索的場景。近幾年慢慢轉化成一個數據分析平台。能夠提供一些簡單的count,group等功能。ES內部使用lucene的倒排索引,這種結構適合基數較大的列,比如人名,單詞等。ES能提供完美的索引方案,無需定義schema,可以直接插入json數據進行索引,在數據量小的時候是個不錯的選擇。缺點比較明顯,數據量較大的時候查詢性能會比較慢,實時寫入到性能也比較差。
Druid
Druid提供基於時間維度的存儲,時間是druid必須包含的維度,druid分為實時數據、歷史數據節點,來提供快速的實時數據攝入和查詢。支持數據量大,支持實時流式數據攝入,查詢靈活且快速。
kylin
分布式的分析引擎,提供了在Hadoop之上的SQL查詢接口及多維分析能力。可以支持超大規模數據,查詢能在亞秒內返回。kylin在Hadoop hive表上做了一層緩存,通過預計算和定期任務,把很多數據事先存在以HBASE為基礎的OLAP cube中,大部分查詢可以訪問hbase獲取,而不需要訪問hive原始數據。這種方式缺點,因為采用的預計算的方式,所以靈活性上需要有些取舍,需要事先定義好查詢模式,結構,且不支持實時錄入的能力。
opentsdb
一種時序類的數據庫,支持數千億的數據點,提供精確查詢服務。opentsb通過預先定義好的維度,將rowkey進行設計放到Hbase中,通過hbase的keyrange進行快速查詢。但是在多個維度組合查詢時,查詢效率會明顯減低,尤其是在keyrange跨度比較大的時候。