整理了一些相關的產品,包括:java
商業系統sql
- InfoBright
- Greenplum(已開源)、HP Vertica、TeraData、Palo、ExaData、RedShift、BigQuery(Dremel)
開源實現數據庫
- Impala、Presto、Spark SQL、Drill、Hawq
- Druid、Pinot
- Kylin
presto、druid、sparkSQL、kylin的對比segmentfault
- presto和spark sql都是解決分佈式查詢問題,提供SQL查詢能力,但數據加載不必定能保證明時;
- Druid是保證數據實時寫入,但查詢上不支持SQL,或者說目前只支持部分SQL,我我的以爲適合用於工業大數據,好比一堆傳感器實時寫數據的場景;
- Kylin是MOLAP,就是將數據先進行預聚合,而後把多維查詢變成了key-value查詢。基本思路是預先對數據做多維索引,查詢時只掃描索引而不訪問原始數據從而提速;
presto:facebook開源的一個java寫的分佈式數據查詢框架,原生集成了Hive、Hbase和關係型數據庫,Presto背後所使用的執行模式與Hive有根本的不一樣,它沒有使用MapReduce,大部分場景下比hive快一個數量級,其中的關鍵是全部的處理都在內存中完成。
Druid:是一個實時處理時序數據的Olap數據庫,由於它的索引首先按照時間分片,查詢的時候也是按照時間線去路由索引。
spark SQL:基於spark平臺上的一個olap框架,本質上也是基於DAG的MPP, 基本思路是增長機器來並行計算,從而提升查詢速度。
kylin:核心是Cube,cube是一種預計算技術,基本思路是預先對數據做多維索引,查詢時只掃描索引而不訪問原始數據從而提速。框架
這幾種框架各有優缺點,存在就是合理,如何選型我的見解以下:
從成熟度來說:kylin > spark sql > Druid > presto
從超大數據的查詢效率來看:Druid > kylin > presto > spark sql
從支持的數據源種類來說:presto > spark sql > kylin > Druid分佈式
大數據查詢目前來說能夠大致分爲三類:學習
- 基於hbase預聚合的。適合相對固定的業務報表類需求。須要指定預聚合的指標,在數據接入的時候根據指定的指標進行聚合運算,只須要統計少許維度便可知足業務報表需求。好比Opentsdb,Kylin,Druid等
- 基於Parquet列式存儲的,基本是徹底基於內存的並行計算,Parquet系能下降存儲空間,提升IO效率,以離線處理爲主,很難提升數據寫的實時性,超大表的join支持可能不夠好。spark sql也算相似,但它在內存不足時能夠spill disk來支持超大數據查詢和join。好比Presto, Drill,Impala等
- 基於lucene外部索引的,好比ElasticSearch和Solr,可以知足的的查詢場景遠多於傳統的數據庫存儲,但對於日誌、行爲類時序數據,全部的搜索請求都也必須搜索全部的分片,另外,對於聚合分析場景的支持也是軟肋
歡迎訂閱「K叔區塊鏈」 - 專一於區塊鏈技術學習
博客地址:
http://www.jouypub.com
簡書主頁:
https://www.jianshu.com/u/756c9c8ae984
segmentfault主頁:
https://segmentfault.com/blog/jouypub
騰訊雲主頁:
https://cloud.tencent.com/developer/column/72548