Hbase的SQL中间件Phoenix

    前面介绍了Hbase,知道了hbase有很多的优点,但是使用起来是不是感觉不得劲,为什么呢?因为不能使用我们大家所熟悉的SQL语言进行数据的读写,并且在Java项目中使用的是Hbase提供的API操作数据,不能使用JDBC进行数据库连接操作,使用起来很不方便。当然,只要有问题,就总有热心的大神去解决问题-Phoenix诞生了。

什么是Phoenix

    Phoenix,中文译为“凤凰”,很优雅的名字。它是由saleforce.com开源的一个项目,后又捐给了Apache基金会管理。Phoenix是一个HBase的开源SQL引擎,你可以使用标准的JDBC API代替HBase客户端API来创建表,插入数据,查询你的HBase数据。它相当于一个Java中间件,提供jdbc连接,操作hbase数据表。
    用Phoenix官网的一句话概括Phoenix:”We put the SQL back in NoSQL”(直译:我们把SQL又放回NoSQL去了),这里说的NoSQL专指HBase,意思是可以用SQL语句来查询Hbase。这时你可能会想到:“Hive和Impala也可以用sql查询NoSql啊!”,但是Hive和Impala还可以查询文本文件,Phoenix的特点就是,它只能查Hbase,别的类型都不支持!也正是这种专一的态度,让Phoenix在Hbase上查询的性能超过了Hive和Impala。

Phoenix性能如何

    Phoenix是构建在HBase之上的SQL引擎。你也许会存在“Phoenix是否会降低HBase的效率?”或者“Phoenix提供了SQL效率是否很低?”这样的疑虑,事实上并不会,Phoenix通过以下方式实现了比你自己手写的方式相同或者可能是更好的性能(更不用说可以节省很多代码):

  • 编译SQL查询为原生HBase的scan语句
  • 检测scan语句最佳的开始和结束的key
  • 精心编排scan语句让他们并行执行
  • 推送WHERE子句的谓词到服务端过滤器处理
  • 执行聚合查询通过服务端钩子(称为协同处理器)
  • 实现了二级索引来提升非主键字段查询的性能
  • 统计相关数据来提高并行化水平,并帮助选择最佳优化方案
  • 跳过扫描过滤器来优化IN,LIKE,OR查询
  • 优化主键来均匀分布写压力
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章