快速理解 Phoenix : SQL on HBASE

标签: 理解 phoenix sql | 发表时间:2013-03-07 09:41 | 作者:colorant
出处:http://blog.csdn.net

作者:刘旭晖 Raymond 转载请注明出处

Email: colorant at 163.com

BLOG: http://blog.csdn.net/colorant/

更多云计算相关项目快速理解文档  http://blog.csdn.net/colorant/article/details/8255910


== 是什么 ==

 

目标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的方式,Phoenix将Query Plan直接使用HBaseAPI实现,目的是规避MapReduce框架,减少查询的时间延迟

 

== 架构 ==

 

Phoenix 中SQL Query Plan的执行,基本上是通过构建一系列的Hbase scan来完成。

 

为了尽可能减少数据传输,在Region Server使用Coprocessor来尽可能的执行Aggregate相关工作,基本思想是使用RegionObserver在PostScannerOpen hook中将RegionScanner替换成支持Aggregation工作的定制化的Scanner,具体的Aggregate操作通过custom的scan属性传递给RegionScanner。与基于MapReduce的框架执行Plan的思想比较,基本上就是通过Coprocessor,使用RegionServer自身来在各个节点上执行Aggregation。

 

此外,通过各种定制的Filter在Hbase 的RegionScanner scan过程中,尽早的将不相关的数据过滤掉。

 

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

 

== 实现 ==

 

目前支持简单的表的创建,修改,数据删减,过滤,检索等SQL语法,从语法上看,不支持多表操作,本质上应该是由于不支持多表联合类的操作如各种Join等,所以在Where部分也就不能做多表的比较。

 

个人认为,由于Coprocessor 和 Filter自身能力的限制,如果完全不依赖Map Reduce框架,只通过HbaseClient API想要实现复杂的Query操作如多表联合操作,相对比较困难,或者大量工作需要在客户端代码中实现,性能上可能无法满足需求。

 

从RoadMap上来看,打算支持Hash Join,要考虑性能的话,我猜测大概的实现思路是把第一次scan的小表的结果以某种方式保存在内存中供第二次Scan时匹配用,那么应该需要在scan之间保留状态,不知道这点phoneix具体打算怎么实现。

 

此外,Second Index也在计划之中。没有Second Index,显然在查询效率方面要大打折扣。

 

然后,基于HBase的TS 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


作者:colorant 发表于2013-3-7 9:41:59 原文链接
阅读:0 评论:0 查看评论

相关 [理解 phoenix sql] 推荐:

快速理解 Phoenix : SQL on HBASE

- - CSDN博客推荐文章
作者:刘旭晖 Raymond 转载请注明出处. 更多云计算相关项目快速理解文档  http://blog.csdn.net/colorant/article/details/8255910. 不同于Hive on HBase的方式,Phoenix将Query Plan直接使用HBaseAPI实现,目的是规避MapReduce框架,减少查询的时间延迟.

Phoenix(sql on hbase)简介

- - CSDN博客云计算推荐文章
Phoenix(sql on hbase)简介. Phoenix takes your SQL query, compiles it into a series of HBase scans, and orchestrates the running of those scans to produce regular JDBC result sets.

Phoenix:在Apache HBase上执行SQL查询

- - CSDN博客推荐文章
本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2013/02/Phoenix-HBase-SQL. 近日,Salesforce.com开源了 Phoenix,这是一个Java中间层,可以让开发者在Apache HBase上执行SQL查询.

使用Apache Phoenix 实现 SQL 操作HBase

- - ITeye博客
Apache Phoenix 相信大家并不陌生,它是HBase的SQL驱动,Phoenix 使得Hbase 支持通过JDBC的方式进行访问,并将你的SQL查询转换成Hbase的扫描和相应的动作. Hbase和Phoenix的安装这里就不做过多阐述,都很简单,这里给大家简单介绍一下安装完成后如何通过SQL Client来连接到Phoenix:.

Phoenix——向HBase发送标准SQL成为现实

- - CSDN博客云计算推荐文章
本文总结基于HBase的SQL查询系统——Salesforce phoenix. Phoenix是一个提供hbase的sql操作的框架,Phoenix是构建在HBase之上的一个SQL中间层. Phoenix完全使用Java编写,代码位于GitHub上,并且提供了一个客户端可嵌入的JDBC驱动. 对于简单的低延迟查询,其性能量级为毫秒;对于百万级别的行数来说,其性能量级为秒.

使用Phoenix通过sql语句更新操作hbase数据 - xirong

- - 博客园_首页
hbase 提供很方便的shell脚本,可以对数据表进行 CURD 操作,但是毕竟是有一定的学习成本的,基本上对于开发来讲,sql 语句都是看家本领,那么,有没有一种方法可以把 sql 语句转换成 hbase的原生API呢. 这样就可以通过普通平常的 sql 来对hbase 进行数据的管理,使用成本大大降低.

十步完全理解SQL

- - 博客 - 伯乐在线
很多程序员视 SQL 为洪水猛兽. SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言、面向对象的程序语言、甚至是函数语言(尽管有些人认为 SQL 语言也是一种函数式语言). 我们每天都在写 SQL 并且应用在开源软件 jOOQ 中. 于是我想把 SQL 之美介绍给那些仍然对它头疼不已的朋友,所以本文是为了以下读者而特地编写的:.

MySQL SQL Tuning:深入理解Order By

- - CSDN博客数据库推荐文章
在MySQL中ORDER BY按先后顺序有2种实现方式,先走索引无排序,如果不行,则用FILESORT. 走索引无排序需要满足2个条件:. ①排序字段和执行计划中所利用INDEX的索引键(或前面几个索引键)完全一致. ②表访问方式为index、ref或range [注释:explain输出中的Type可看出].

诺基亚首款WP7手机或定名Phoenix

- Dollyn - cnBeta.COM
诺基亚在今年之内推出首款Windows Phone已经是板上钉钉的事情了,就连机器的外型也差不多没有悬念,估计会和MeeGo系统的诺基亚N9共享一个模具. 现在唯一的惊喜,就是这款对于诺基亚来说,意义重大且深远的首款Windows Phone的名字.