快速理解 Phoenix : SQL on HBASE


轉自:http://blog.csdn.net/colorant/article/details/8645081

 

==是什么 ==

 

目標Scope

 

EasyStandard SQL access on top of HBase

 

官方定義

 

A SQL layer over HBase delivered as a client-embedded JDBC drivertargeting low latency queries over HBase data

 

個人理解

 

不同於Hive on HBase的方式,PhoenixQuery Plan直接使用HBaseAPI實現,目的是規避MapReduce框架,減少查詢的時間延遲

 

==架構 ==

 

PhoenixSQL Query Plan的執行,基本上是通過構建一系列的Hbase scan來完成。

 

為了盡可能減少數據傳輸,在Region Server使用Coprocessor來盡可能的執行Aggregate相關工作,基本思想是使用RegionObserverPostScannerOpen hook中將RegionScanner替換成支持Aggregation工作的定制化的Scanner,具體的Aggregate操作通過customscan屬性傳遞給RegionScanner。與基於MapReduce的框架執行Plan的思想比較,基本上就是通過Coprocessor,使用RegionServer自身來在各個節點上執行Aggregation

 

此外,通過各種定制的FilterHbaseRegionScanner scan過程中,盡早的將不相關的數據過濾掉。

 

采用JDBC接口和應用程序交互。

 

==實現 ==

 

目前支持簡單的表的創建,修改,數據刪減,過濾,檢索等SQL語法,從語法上看,不支持多表操作,本質上應該是由於不支持多表聯合類的操作如各種Join等,所以在Where部分也就不能做多表的比較。

 

個人認為,由於Coprocessor Filter自身能力的限制,如果完全不依賴Map Reduce框架,只通過HbaseClient API想要實現復雜的Query操作如多表聯合操作,相對比較困難,或者大量工作需要在客戶端代碼中實現,性能上可能無法滿足需求。

 

RoadMap上來看,打算支持Hash Join,要考慮性能的話,我猜測大概的實現思路是把第一次scan的小表的結果以某種方式保存在內存中供第二次Scan時匹配用,那么應該需要在scan之間保留狀態,不知道這點phoneix具體打算怎么實現。

 

此外,Secondary Index也在計划之中。沒有Secondary Index,顯然在查詢效率方面要大打折扣。

 

然后,基於HBaseTS Basedversion和不限制qualifier等特性,大概還打算實現一些相對有趣的功能,比如動態column,嵌套數據結構,schema演進等。

 

適用領域

 

如果不能找到比較好的辦法來實現Join類操作,多表相關的操作都不能高效實現,那么應該只能用於簡單的過濾,排序,單表檢索類工作。照官方的說法就是適用於10M-100M行規模的簡單查詢。

 

不過,考慮到HBase表的設計理念,盡量用冗余數據空間減少復雜性的思想,實際上可以把相關數據都放在同一個表里,而不需要為了減少數據冗余,拆分到多個表中,很大程度上可以規避現階段Phoenix在多表聯合操作方面的能力缺失(當然,所有數據在一個表里存儲,如果帶來更新操作的負擔和一致性問題,那還是要拆分的)

 

==相關文獻 ==

 

語法:http://forcedotcom.github.com/phoenix/

Wiki主頁:https://github.com/forcedotcom/phoenix/wiki

代碼:https://github.com/forcedotcom/phoenix


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM