上次聊的是開源大數據存儲引擎,數據既然存儲了就要使用,因此查詢與分析就是面向業務應用的能力呈現。
伴隨著開源軟體的深化發展,今天的查詢系統如果僅支持SQL引擎那就太OUT了,因為數據的膨脹、查詢的複雜度、查詢響應時間、系統訪問並發量等諸多因素,致使我們在查詢引擎的技術選型上必須長遠考慮,構建一個能夠支撐混合查詢負載的生態環境是必須的。
舉個例子——用戶標籤、用戶特徵庫
移動網際網路時代,不論網際網路公司還是傳統企業,都將用戶作為企業最為寶貴的資產。這裡面一方面是捕獲流量、拉新,甭管什麼渠道來,只要用戶註冊或活躍即可,用戶數量的多少從某種層面上決定了這個企業的價值。另一方面就是洞察用戶的行為偏好,了解用戶特徵,既包括粗粒度的「愛購物、愛電影、愛吃」,也包括細粒度的「愛LV、愛美劇、愛中餐」,所以後者就是這個場景中所談到的——標籤庫。
標籤庫是一個非常典型的貫穿業務流程的場景,首先要基於各域數據源(客戶管理系統、產品訂購系統、渠道管理系統、運營服務系統等)從企業生產系統中採集並捕獲數據,然後結合標籤規則去處理、建模,作業涉及到指標的計算,最終形成各類標籤。當然還要考慮標籤的存儲,涉及到存儲方式、存儲類型、存儲結構,這是存儲引擎要考慮的事情。最重要的是後續,業務人員要根據業務需求去使用標籤、定位標籤信息,這個過程就涉及到標籤數據的查詢,這是典型的查詢/搜尋引擎要關注的對象。
針對上述場景示例,其實貫穿了大數據的很多關鍵技術點,每個技術點都可以展開細粒度的剖析,但本文既然說查詢引擎,那麼更聚焦於客戶標籤最後如何使用。
某些場景,可能只是做個帶where條件的簡單查詢,不需要後端太多的計算和分析; 某些場景,可能查詢後需要再次與業務人員交互,基於查詢結果再次篩選或關聯,甚至實時分析; 某些場景,可能需要把用戶群篩選出來做個匹配,這裡面涉及到標籤分類、用戶群管理、匹配規則等,而這卻需要大量的運算和關聯分析;
所以針對每種查詢場景,對相應技術指標的要求不盡相同,這是考驗查詢引擎技術特性和能力的時刻。
本篇羅列了幾種常用的開源查詢/搜尋引擎,每種技術都有自己特點,通過雷達圖可以粗略了解。需要說明的是,查詢引擎和搜尋引擎也屬於不同的範疇,前者更注重複雜查詢、交互式分析和對SQL的支持,而後者由於對索引支持較好,因此簡單查詢和實時檢索的效果會非常突出。
SparkSQL是Spark生態圈的查詢組件,與Spark/Hadoop有極強的兼容性,且對SQL標準的支持度較好,是今天搞開源技術棧必不可少的查詢組件;
Presto與Hive一樣,都是Facebook開源的優秀產品,其實時交互式查詢分析性能卓越、支持SQL2003標準、靈活的Connector開發能力,與其他子系統的兼容性非常好;
Impala是Cloudera開源的查詢引擎(開源版本性能差,付費版本性能出色),最初它的出現似乎就是為了替代MPP資料庫的查詢能力,高並發、高效率;
Solr是一個高性能、非常出色的搜尋引擎,採用Java5開發,基於Lucene的全文搜索伺服器,並同時對其進行了擴展,提供了比Lucene更為豐富的查詢語言;
ElasticSearch也是一個基於Lucene的搜索伺服器,它提供了一個分布式多用戶能力的全文搜尋引擎,基於RESTful web接口,相對於文本解析、分詞支持度極強;
簡單做個歸類,對於簡單查詢:presto、impala性能出眾;對於帶條件的查詢:presto、impala性能更強;對於大數據量數據分析:impala不穩定,presto比sparksql略快;對於海量數據複雜分析:impala、presto性能差不多,sparksql略慢;對於實時搜索推薦ElasticSearch——基於檢索技術,提供語義分析和查詢能力……僅作參考,畢竟在實際應用中,更適合自己的才是最好的。
這就是大數據時代查詢分析域的主要技術,介紹到這裡,周末愉快!