Phoenix:在HBase上執行SQL查詢

破棉襖發表於2015-01-23


近日,Salesforce.com開源了 ,這是一個Java中間層,可以讓開發者在Apache HBase上執行SQL查詢。InfoQ有幸採訪到了Salesforce.com的主開發者James Taylor以瞭解關於Phoenix的更多資訊。

除了無數的SQL、NoSQL與NewSQL資料庫,Salesforce.com又 宣佈了 專案,這是構建在 (列式大資料儲存)之上的一個SQL中間層。Phoenix完全使用Java編寫,程式碼 上,並且提供了一個客戶端可嵌入的JDBC驅動。

根據專案所述,Phoenix被Salesforce.com內部使用,對於簡單的低延遲查詢,其量級為毫秒;對於百萬級別的行數來說,其量級為秒。Phoenix並不是像HBase那樣用於map-reduce job的,而是透過標準化的語言來訪問HBase資料的。

根據專案建立者所述, 。對於使用了HBase API、協同處理器及自定義過濾器的Impala與OpenTSDB來說,進行相似的查詢Phoenix的速度也會更快一些。

Phoenix查詢引擎會將SQL查詢轉換為一個或多個HBase scan,並編排執行以生成標準的JDBC結果集。直接使用HBase API、協同處理器與自定義過濾器,對於簡單查詢來說,其效能量級是毫秒,對於百萬級別的行數來說,其效能量級是秒。

Phoenix 最值得關注的一些特性有:

  • 嵌入式的JDBC驅動,實現了大部分的java.sql介面,包括後設資料API
  • 可以透過多部行鍵或是鍵/值單元對列進行建模
  • 完善的查詢支援,可以使用多個謂詞以及最佳化的掃描鍵
  • DDL支援:透過CREATE TABLE、DROP TABLE及ALTER TABLE來新增/刪除列
  • 版本化的模式倉庫:當寫入資料時,快照查詢會使用恰當的模式
  • DML支援:用於逐行插入的UPSERT VALUES、用於相同或不同表之間大量資料傳輸的UPSERT SELECT、用於刪除行的DELETE
  • 透過客戶端的批處理實現的有限的事務支援
  • 單表——還沒有連線,同時二級索引也在開發當中
  • 緊跟ANSI SQL標準

Phoenix程式碼基於 開源。

下面是InfoQ採訪Phoenix主開發者James Taylor的訪談內容。

InfoQ:為何要為Non-SQL資料儲存提供SQL介面?現在已經有很多其他的SQL解決方案了。

JT:現有的SQL解決方案通常都不是水平可伸縮的,因此當資料量變大時會遇到阻礙。至於我們為何在NoSQL資料儲存HBase上提供SQL介面,有如下幾個原因:

  1. 使用諸如SQL這樣易於理解的語言可以使人們能夠更加輕鬆地使用HBase。相對於學習另一套私有API,人們可以使用熟悉的語言來讀寫資料。
  2. 使用諸如SQL這樣更高層次的語言來編寫減少了你所需編寫的程式碼量。比如說,使用Phoenix,你可以編寫下面這樣的查詢來獲取Web的統計資料(我不想說使用原生的HBase API會有多少行程式碼,但肯定少不了):
    • SELECT
      • TRUNC(DATE,'DAY') DAY,
      • SUM(CORE) TOTAL_CPU_Usage,
      • MIN(CORE) MIN_CPU_Usage,
      • MAX(CORE) MAX_CPU_Usage
    • FROM WEB_STAT
    • WHERE DOMAIN LIKE 'Salesforce%'
    • GROUP BY TRUNC(DATE,'DAY');
  3. 執行查詢時,在資料訪問與執行時執行之間加上SQL這樣一層抽象可以進行大量最佳化。比如說,對於GROUP BY查詢來說,我們可以利用HBase中協同處理器這樣的特性。藉助於該特性,我們可以在HBase伺服器上執行Phoenix程式碼。因此,聚合可以在服務端執行,而不必在客戶端,這麼做會極大減少客戶端與服務端之間傳輸的資料量。此外,Phoenix還會在客戶端並行執行GROUP BY,這是根據行鍵的範圍來截斷掃描而實現的。透過並行執行,結果會更快地返回。所有這些最佳化都無需使用者參與,使用者只需發出查詢即可。
  4. 透過使用業界標準的API(如JDBC),我們可以利用現有的工具來使用這些API。比如說,你可以使用現成的SQL客戶端(如SQuirrel, )連線HBase伺服器並執行SQL。感興趣的讀者可以參見入門指南以瞭解更多資訊: 。

InfoQ:有沒有效能評估呢?響應時間是否變快了?可伸縮性是否更好了?

JT:可以在這裡 瞭解Phoenix與其他NoSQL產品/專案的效能對比。我們並沒有釋出Phoenix與現有的關係型技術之間的基準比較(網上已經有了HBase與他們之間的比較),但當行數與行寬增加時,NoSQL解決方案會更出眾。這也取決於你是“如何”使用關聯式資料庫的:是像Salesforce.com那樣的多租模式抑或單租模式。HBase非常善於協同定位關係資料,這取決於行鍵是如何構成的,因此對於某些多租場景來說,其優勢是很明顯的。

InfoQ:何時才會增加連線支援呢?

JT:連線支援已經在我們的路線圖上了,參見 。我們已經在做一些基礎工作了,現在還不能給出準確的時間點,因為有太多事情要做,但我們會盡快的。

檢視英文原文:Phoenix: Running SQL Queries on Apache HBase
原文連結

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-1412112/,如需轉載,請註明出處,否則將追究法律責任。

相關文章