搜索引擎技術,分析數據庫技術,分佈式計算引擎技術這三股力量正在快速地彼此融合。舉例證以下html
Hive一開始只是用sql的方式描述map/reduce的邏輯,是一個典型的分佈式計算引擎。這是分佈式計算引擎向OLAP方向靠攏的第一步。mysql
Hive推出不久就被發現,雖然用的SQL可是性能離數據庫還差很遠。很快就有人提出是否是要給Hive加上數據庫同樣的索引。這明顯就是分佈式計算引擎向分析數據庫的方向靠攏。sql
Parquet是一種列式文件,用於加速hive/impala這樣的分佈式計算引擎的查詢速度。使用 parquet 加上了索引的 hive/impala/spark 這些已經很難說與 OLAP 數據庫的差異是什麼了。數據庫
這些Hive的衍生物直接上來就是瞄着OLAP去的。各類sql on hadoop的方案。分佈式
另一個方向的融合是搜索引擎技術快速地向OLAP融合。Elasticsearch公司改名爲了Elastic,由於愈來愈多的人開始用Elasticsearch不是search,而是analytics,也就是跑SQL。
Elasticsearch底層的Lucene引入了DocValues以後,數據能夠按列存儲(和parquet同樣),使得Elasticsearch幾乎能夠當成一個列式數據庫來使用了。
另外Elasticsearch在Lucene的基礎上大幅增強了Aggregation的功能,利用其冗長可是強大的aggregation dsl能夠表達出比SQL還要複雜的聚合邏輯。
騰訊的Hermes數據庫(http://data.qq.com/article?id=817)就是基於Lucene/Solr實現的分析型數據庫oop
由於Elasticsearch性能實在太出衆了,可是dsl接口很差使。有人拿Elasticsearch作爲底層,上層封裝了一個SQL接口,從何正式變成了一種數據庫,叫 http://crate.io性能
http://groonga.org/docs/characteristic.html
日本人寫了一個搜索引擎,而這個搜索引擎同時還能夠做爲mysql可插拔的存儲引擎使用,從而把mysql變成一種支持全文檢索的列式數據庫。優化
一個更加有趣的方向是Spark開始和OLAP數據庫和Elasticsearch勾搭在一塊兒。利用把Elasticsearch查詢映射成Spark的RDD,能夠把一條SQL的where部分放在Elasticsearch裏分佈式執行(所謂filter push down優化),而後把分佈式的group by 和 projection 由Spark來完成。搜索引擎
這三個技術各自有獨自看重的內在實現方式
* 搜索引擎:重點是inverted index,索引的壓縮存儲和高效檢索
* 分析數據庫:重點是column oriented storage,利用列式存儲快速地在查詢時暴力掃描
* 分佈式計算引擎:從一開始就是map reduce,關注的是分區和分佈式執行spa
實際上三家是從不一樣的角度切入了同一個問題。不過這已經不是一招鮮的時代了。一個好的搜索引擎須要inverted index/column oriented storage/map reduce,三者都要。一個好的OLAP也是inverted index/column oriented storage/map reduce三個都要的。 目前從趨勢上來看風頭最火的是 Elasticsearch,最佳的組合是 Spark + Elasticsearch。 最科幻的將來組合是把Spark + Elasticsearch 作深度的整合,去掉 Elasticsearch 本身的分佈式層,徹底靠 Spark 作分佈式計算。要是能再配備一個實時計算管道做爲靈活的入庫渠道和物化視圖就更牛x了。