Hbase的SQL中間件Phoenix

    前面介紹了Hbase,知道了hbase有很多的優點,但是使用起來是不是感覺不得勁,爲什麼呢?因爲不能使用我們大家所熟悉的SQL語言進行數據的讀寫,並且在Java項目中使用的是Hbase提供的API操作數據,不能使用JDBC進行數據庫連接操作,使用起來很不方便。當然,只要有問題,就總有熱心的大神去解決問題-Phoenix誕生了。

什麼是Phoenix

    Phoenix,中文譯爲“鳳凰”,很優雅的名字。它是由saleforce.com開源的一個項目,後又捐給了Apache基金會管理。Phoenix是一個HBase的開源SQL引擎,你可以使用標準的JDBC API代替HBase客戶端API來創建表,插入數據,查詢你的HBase數據。它相當於一個Java中間件,提供jdbc連接,操作hbase數據表。
    用Phoenix官網的一句話概括Phoenix:”We put the SQL back in NoSQL”(直譯:我們把SQL又放回NoSQL去了),這裏說的NoSQL專指HBase,意思是可以用SQL語句來查詢Hbase。這時你可能會想到:“Hive和Impala也可以用sql查詢NoSql啊!”,但是Hive和Impala還可以查詢文本文件,Phoenix的特點就是,它只能查Hbase,別的類型都不支持!也正是這種專一的態度,讓Phoenix在Hbase上查詢的性能超過了Hive和Impala。

Phoenix性能如何

    Phoenix是構建在HBase之上的SQL引擎。你也許會存在“Phoenix是否會降低HBase的效率?”或者“Phoenix提供了SQL效率是否很低?”這樣的疑慮,事實上並不會,Phoenix通過以下方式實現了比你自己手寫的方式相同或者可能是更好的性能(更不用說可以節省很多代碼):

  • 編譯SQL查詢爲原生HBase的scan語句
  • 檢測scan語句最佳的開始和結束的key
  • 精心編排scan語句讓他們並行執行
  • 推送WHERE子句的謂詞到服務端過濾器處理
  • 執行聚合查詢通過服務端鉤子(稱爲協同處理器)
  • 實現了二級索引來提升非主鍵字段查詢的性能
  • 統計相關數據來提高並行化水平,並幫助選擇最佳優化方案
  • 跳過掃描過濾器來優化IN,LIKE,OR查詢
  • 優化主鍵來均勻分佈寫壓力
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章