Phoenix:在Apache HBase上執行SQL查詢
本文來源於我在InfoQ中文站翻譯的文章,原文地址是:http://www.infoq.com/cn/news/2013/02/Phoenix-HBase-SQL
近日,Salesforce.com開源了Phoenix,這是一個Java中間層,可以讓開發者在Apache HBase上執行SQL查詢。InfoQ有幸採訪到了Salesforce.com的主開發者James Taylor以瞭解關於Phoenix的更多資訊。
除了無數的SQL、NoSQL與NewSQL資料庫,Salesforce.com又宣佈了Phoenix專案,這是構建在Apache HBase(列式大資料儲存)之上的一個SQL中間層。Phoenix完全使用Java編寫,程式碼
根據專案所述,Phoenix被Salesforce.com內部使用,對於簡單的低延遲查詢,其量級為毫秒;對於百萬級別的行數來說,其量級為秒。Phoenix並不是像HBase那樣用於map-reduce job的,而是通過標準化的語言來訪問HBase資料的。
根據專案建立者所述,對於10M到100M的行的簡單查詢來說,Phoenix要勝過Hive。對於使用了HBase API、協同處理器及自定義過濾器的Impala與OpenTSDB來說,進行相似的查詢Phoenix的速度也會更快一些。
Phoenix查詢引擎會將SQL查詢轉換為一個或多個HBase scan,並編排執行以生成標準的JDBC結果集。直接使用HBase API、協同處理器與自定義過濾器,對於簡單查詢來說,其效能量級是毫秒,對於百萬級別的行數來說,其效能量級是秒。
- 嵌入式的JDBC驅動,實現了大部分的java.sql介面,包括元資料API
- 可以通過多部行鍵或是鍵/值單元對列進行建模
- 完善的查詢支援,可以使用多個謂詞以及優化的掃描鍵
- DDL支援:通過CREATE TABLE、DROP TABLE及ALTER TABLE來新增/刪除列
- 版本化的模式倉庫:當寫入資料時,快照查詢會使用恰當的模式
- DML支援:用於逐行插入的UPSERT VALUES、用於相同或不同表之間大量資料傳輸的UPSERT SELECT、用於刪除行的DELETE
- 通過客戶端的批處理實現的有限的事務支援
- 單表——還沒有連線,同時二級索引也在開發當中
- 緊跟ANSI SQL標準
Phoenix程式碼基於BSD許可開源。
下面是InfoQ採訪Phoenix主開發者James Taylor的訪談內容。
InfoQ:為何要為Non-SQL資料儲存提供SQL介面?現在已經有很多其他的SQL解決方案了。
JT:現有的SQL解決方案通常都不是水平可伸縮的,因此當資料量變大時會遇到阻礙。至於我們為何在NoSQL資料儲存HBase上提供SQL介面,有如下幾個原因:
- 使用諸如SQL這樣易於理解的語言可以使人們能夠更加輕鬆地使用HBase。相對於學習另一套私有API,人們可以使用熟悉的語言來讀寫資料。
- 使用諸如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');
- SELECT
- 執行查詢時,在資料訪問與執行時執行之間加上SQL這樣一層抽象可以進行大量優化。比如說,對於GROUP BY查詢來說,我們可以利用HBase中協同處理器這樣的特性。藉助於該特性,我們可以在HBase伺服器上執行Phoenix程式碼。因此,聚合可以在服務端執行,而不必在客戶端,這麼做會極大減少客戶端與服務端之間傳輸的資料量。此外,Phoenix還會在客戶端並行執行GROUP BY,這是根據行鍵的範圍來截斷掃描而實現的。通過並行執行,結果會更快地返回。所有這些優化都無需使用者參與,使用者只需發出查詢即可。
InfoQ:有沒有效能評估呢?響應時間是否變快了?可伸縮性是否更好了?
JT:可以在這裡https://github.com/forcedotcom/phoenix/wiki/Performance瞭解Phoenix與其他NoSQL產品/專案的效能對比。我們並沒有釋出Phoenix與現有的關係型技術之間的基準比較(網上已經有了HBase與他們之間的比較),但當行數與行寬增加時,NoSQL解決方案會更出眾。這也取決於你是“如何”使用關係資料庫的:是像Salesforce.com那樣的多租模式抑或單租模式。HBase非常善於協同定位關係資料,這取決於行鍵是如何構成的,因此對於某些多租場景來說,其優勢是很明顯的。
InfoQ:何時才會增加連線支援呢?