转自: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的方式,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具体打算怎么实现。

此外,Secondary Index也在计划之中。没有Secondary 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

快速理解 Phoenix : SQL on HBASE的更多相关文章

  1. Phoenix(sql on hbase)简单介绍

    Phoenix(sql on hbase)简单介绍 介绍: Phoenix is a SQL skin over HBase delivered as a client-embedded JDBC d ...

  2. Phoenix(SQL On HBase)

    1.简介 Phoenix是一个HBase框架,可以通过SQL的方式来操作HBase. Phoenix是构建在HBase上的一个SQL层,是内嵌在HBase中的JDBC驱动,能够让用户使用标准的JDBC ...

  3. Phoenix(SQL On HBase)安装和使用报告

    一.为什么使用Phoenix二.安装Phoenix2.1 兼容问题?2.2 编译CDH版本的Phoenix2.3 安装Phoenix到CDH环境中三.Phoenix的使用3.1 phoenix的4种调 ...

  4. Phoenix的安装使用与SQL查询HBase

    一. Phoenix的简介 1. 什么是phoenix 现有hbase的查询工具有很多如:Hive,Tez,Impala,Shark/Spark,Phoenix等.今天主要说Phoenix.phoen ...

  5. Phoenix实现用SQL查询HBase

    博客已转移,请借一步说话,http://www.weixuehao.com/archives/111 HBase,一个NoSQL数据库,可存储大量非关系型数据. HBase,可以用HBase shel ...

  6. Phoenix——实现向HBase发送标准SQL语句

    写在前面一: 本文总结基于HBase的SQL查询系统--Salesforce phoenix 写在前面二: 环境说明: 一.什么是Phoenix 摘自官网: Phoenix是一个提供hbase的sql ...

  7. [转载]循规蹈矩:快速读懂SQL执行计划的套路与工具

    作者介绍 梁敬彬,福富研究院副理事长.公司唯一四星级内训师,国内一线知名数据库专家,在数据库优化和培训领域有着丰富的经验.多次应邀担任国内外数据库大会的演讲嘉宾,在业界有着广泛的影响力.著有多本畅销书 ...

  8. Trafodion:Transactional SQL on HBase

    Trafodion: Transactional SQL on HBase HBase上实时分布式事务处理 介绍 HBase的SQL能力一直不足.Phoenix缺乏Join能力,eBay提出的kyli ...

  9. SQL Server恢复软件 Stellar Phoenix sql recovery

    SQL Server恢复软件 Stellar Phoenix sql recovery http://www.stellarinfo.com/ http://www.stellarinfo.com/ ...

随机推荐

  1. 关于apache服务器加载so的报错

    早上突然发现我的虚拟机上的WEB应用访问不了了,后台检查httpd服务,无法启动,出现一行提示: ①starting httpd: httpd: Syntax error on line 163 of ...

  2. MySQL Cluster 具体配置文件(config.ini)

    ########################################################################### ## MySQL CLuster 配置文件 ## ...

  3. oracle导入sql文件,并且记录日志

    一.导入.sql文件 @data.sql 二.记录日志: 1.输入命令  sqlplus 数据库名/密码@数据库   按回车键 2.输入spool  指定路径:\a.log    按回车键  (此步骤 ...

  4. php 多进程解决代码常驻内存的问题php 多进程解决代码常驻内存的问题

    PHP不适合做常驻的SHELl进程,因为它没有专门的gc例程,也没有有效的内存管理途径. 如果用PHP做常驻SHELL,会经常被内存耗尽导致abort而unhappy. 而且,如果输入数据非法,而脚本 ...

  5. C语言:冒泡排序法:将若干字符串按字母顺序(由小到大)排序输出

    #include<stdio.h> #include<string.h> void sort(char *a[]); void print(char *a[]); int ma ...

  6. iptables清空链的规则

    建立iptables时,首先需要情况系统默认的规则(如果有),这样能够保证iptables按照自己的想法运行. iptables -F   //清空链规则,但不会情况子链,也不会清空表的默认策略 ip ...

  7. 模拟多级复选框效果的jquery代码

    jquery做了个多级复选框的效果,代码总共就20+行就over了. 我又想用js来做一个看看,才写了几个方法就写不动了,兼容性要考虑很多,而且代码量直线上升. 主要分享下jquery的这个效果的实现 ...

  8. Spring Boot 2.0 Intellij Idea 中图文详解打包成可执行Jar

    我们使用Spring Boot 2.0 创建好我们的项目后,我们一般需要打包,然后部署到服务器上. 打包步骤: 1. 选中项目,右键——> Open Module Settings. 2. 切换 ...

  9. 简单好用的hash表-----uthash

    在软件开发中,不可不免的会使用到hash表,hash表的优点这里就不说了,以下介绍一个hash表的C实现, uthash是用宏实现的,使用的时候非常方便,只用包含uthash.h即可. Uthash的 ...

  10. Python中将字典转换为有序列表、无序列表的方法

    说明:列表不可以转换为字典 1.转换后的列表为无序列表 a = {'a' : 1, 'b': 2, 'c' : 3} #字典中的key转换为列表 key_value = list(a.keys()) ...