Phoenix:在HBase上執行SQL查詢
近日,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介面,有如下幾個原因:
- 使用諸如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,這是根據行鍵的範圍來截斷掃描而實現的。透過並行執行,結果會更快地返回。所有這些最佳化都無需使用者參與,使用者只需發出查詢即可。
- 透過使用業界標準的API(如JDBC),我們可以利用現有的工具來使用這些API。比如說,你可以使用現成的SQL客戶端(如SQuirrel, )連線HBase伺服器並執行SQL。感興趣的讀者可以參見入門指南以瞭解更多資訊: 。
InfoQ:有沒有效能評估呢?響應時間是否變快了?可伸縮性是否更好了?
JT:可以在這裡 瞭解Phoenix與其他NoSQL產品/專案的效能對比。我們並沒有釋出Phoenix與現有的關係型技術之間的基準比較(網上已經有了HBase與他們之間的比較),但當行數與行寬增加時,NoSQL解決方案會更出眾。這也取決於你是“如何”使用關聯式資料庫的:是像Salesforce.com那樣的多租模式抑或單租模式。HBase非常善於協同定位關係資料,這取決於行鍵是如何構成的,因此對於某些多租場景來說,其優勢是很明顯的。
InfoQ:何時才會增加連線支援呢?
JT:連線支援已經在我們的路線圖上了,參見 。我們已經在做一些基礎工作了,現在還不能給出準確的時間點,因為有太多事情要做,但我們會盡快的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-1412112/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 自適應查詢執行:在執行時提升Spark SQL執行效能SparkSQL
- hbase與phoenix整合(使用phoenix操作hbase資料)
- sql查詢是如何執行的?SQL
- 在MySQL中使用explain查詢SQL的執行計劃MySqlAI
- oracle查詢sql執行耗時、執行時間、sql_idOracleSQL
- SQL Server 查詢歷史執行的SQL語句SQLServer
- 在檔案上使用 SQL 查詢的示例SQL
- Laravel 框架查詢執行的 SQL 語句Laravel框架SQL
- 在KYLIN中執行查詢報錯
- GaussDB SQL查詢語句執行過程解析SQL
- 查詢SQL Server的歷史執行記錄SQLServer
- SQL 查詢語句的執行順序解析SQL
- 查詢oracle正在執行的SQL和事務OracleSQL
- 一條 SQL 查詢語句是如何執行的?SQL
- 執行SQL查詢導致磁碟耗盡故障演示SQL
- HBase查詢優化優化
- LangChain SQL介紹以及使用Qwen1.5執行SQL查詢教程LangChainSQL
- [轉帖]SQL Server簡潔查詢正在執行的程序SQLServer
- 輸入的查詢 SQL 語句,是如何執行的?SQL
- HBase學習之二: hbase分頁查詢
- 多執行緒查詢執行緒
- PostgreSQL 查詢當前執行中sql的執行計劃——pg_show_plans模組SQL
- 查詢Oracle正在執行的sql語句及執行該語句的使用者OracleSQL
- 怎樣在sqlite3上執行SQL語句SQLite
- SQL查詢關鍵字執行順序及記憶口訣SQL
- MySQL系列之一條SQL查詢語句的執行過程MySql
- explain 查詢執行計劃AI
- 如何查詢一個儲存過程是否在執行儲存過程
- SQL查詢的:子查詢和多表查詢SQL
- 資料庫查詢優化:使用explain分析sql語句執行效率資料庫優化AISQL
- 在mysql查詢效率慢的SQL語句MySql
- SQL--查詢SQL
- SQL 聚合查詢SQL
- 原生SQL查詢SQL
- 多執行緒查詢,效率翻倍執行緒
- 秒級查詢之開源分散式SQL查詢引擎Presto實操-上分散式SQLREST
- DbForge Studio for SQL Server入門教程:在查詢生成器中建立查詢SQLServer
- 「在 Kubernetes 上執行 Pgpool-Il」實現 PostgreSQL 查詢(讀)負載均衡和連線池SQL負載
- SQL 查詢總是先執行SELECT語句嗎?你們都錯了!SQL