2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

Phoenix:在 Apache HBase 上执行 SQL 查询

  • 2013-02-17
  • 本文字数:1970 字

    阅读完需:约 6 分钟

近日,Salesforce.com 开源了 Phoenix ,这是一个 Java 中间层,可以让开发者在 Apache HBase 上执行 SQL 查询。InfoQ 有幸采访到了 Salesforce.com 的主开发者 James Taylor 以了解关于 Phoenix 的更多信息。

除了无数的 SQL、NoSQL 与 NewSQL 数据库,Salesforce.com 又宣布 Phoenix 项目,这是构建在 Apache HBase (列式大数据存储)之上的一个 SQL 中间层。Phoenix 完全使用 Java 编写,代码位于 GitHub 上,并且提供了一个客户端可嵌入的 JDBC 驱动。

根据项目所述,Phoenix 被 Salesforce.com 内部使用,对于简单的低延迟查询,其量级为毫秒;对于百万级别的行数来说,其量级为秒。Phoenix 并不是像 HBase 那样用于 map-reduce job 的,而是通过标准化的语言来访问 HBase 数据的。

根据项目创建者所述,对于 10M 到 100M 的行的简单查询来说,Phoenix 要胜过 Hive 。对于使用了 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 代码基于 BSD 许可开源。

下面是 InfoQ 采访 Phoenix 主开发者 James Taylor 的访谈内容。

InfoQ:为何要为 Non-SQL 数据存储提供 SQL 接口?现在已经有很多其他的 SQL 解决方案了。

JT:现有的 SQL 解决方案通常都不是水平可伸缩的,因此当数据量变大时会遇到阻碍。至于我们为何在 NoSQL 数据存储 HBase 上提供 SQL 接口,有如下几个原因:

  1. 使用诸如 SQL 这样易于理解的语言可以使人们能够更加轻松地使用 HBase。相对于学习另一套私有 API,人们可以使用熟悉的语言来读写数据。
  2. 使用诸如 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’);
  1. 执行查询时,在数据访问与运行时执行之间加上 SQL 这样一层抽象可以进行大量优化。比如说,对于 GROUP BY 查询来说,我们可以利用 HBase 中协同处理器这样的特性。借助于该特性,我们可以在 HBase 服务器上执行 Phoenix 代码。因此,聚合可以在服务端执行,而不必在客户端,这么做会极大减少客户端与服务端之间传输的数据量。此外,Phoenix 还会在客户端并行执行 GROUP BY,这是根据行键的范围来截断扫描而实现的。通过并行执行,结果会更快地返回。所有这些优化都无需用户参与,用户只需发出查询即可。
  2. 通过使用业界标准的 API(如 JDBC),我们可以利用现有的工具来使用这些 API。比如说,你可以使用现成的 SQL 客户端(如 SQuirrel, http://squirrel-sql.sourceforge.net/ )连接 HBase 服务器并执行 SQL。感兴趣的读者可以参见入门指南以了解更多信息: https://github.com/forcedotcom/phoenix/blob/master/README.md

InfoQ:有没有性能评估呢?响应时间是否变快了?可伸缩性是否更好了?

JT:可以在这里 https://github.com/forcedotcom/phoenix/wiki/Performance 了解 Phoenix 与其他 NoSQL 产品 / 项目的性能对比。我们并没有发布 Phoenix 与现有的关系型技术之间的基准比较(网上已经有了 HBase 与他们之间的比较),但当行数与行宽增加时,NoSQL 解决方案会更出众。这也取决于你是“如何”使用关系数据库的:是像 Salesforce.com 那样的多租模式抑或单租模式。HBase 非常善于协同定位关系数据,这取决于行键是如何构成的,因此对于某些多租场景来说,其优势是很明显的。

InfoQ:何时才会增加连接支持呢?

JT:连接支持已经在我们的路线图上了,参见 https://github.com/forcedotcom/phoenix/wiki#wiki-roadmap 。我们已经在做一些基础工作了,现在还不能给出准确的时间点,因为有太多事情要做,但我们会尽快的。

查看英文原文: Phoenix: Running SQL Queries on Apache HBase

2013-02-17 22:4619588
用户头像

发布了 88 篇内容, 共 272.9 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

七夕赶上服务器架构升级,女朋友的约会怎么办

华为云开发者联盟

华为云 FunctionGraph DevStar Serverless架构 服务器架构

Prometheus监控的4个黄金指标

Rubble

Prometheus 8月日更

Hive企业级性能优化

五分钟学大数据

hive hive性能优化

Maven 项目执行的时候提示 JAVA_HOME is not correctly set 错误

HoneyMoose

Ipfs排名前十的公司有哪些?怎么选择靠谱的ipfs公司?

区块链 分布式存储 IPFS fil ipfs公司

JavaScript 之事件循环(Event Loop)

网易云信

揭秘阿里云 RTS SDK 是如何实现直播降低延迟和卡顿

阿里云CloudImagine

阿里云 直播架构 直播技术 视频直播 视频云

LeetCode题解:781. 森林中的兔子,贪心,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

金融级IT架构:网商银行是如何进行数字化落地的

博文视点Broadview

测试经验| 音视频通话相关app如何进行测试

anyRTC开发者

软件测试 音视频 实时通信

解决安全漏洞扫描,就靠它了

百度开发者中心

产品 最佳实践 企业动态 百度安全

Fil价格今日行情?Fil有投资的价值吗?

区块链 分布式存储 IPFS fil fil价格今日行情怎么样

这几个棘手的面试常见问题,如何高情商的回答?

架构精进之路

情商 8月日更

送你两个神器,关系数据库数据入湖轻松应对

华为云开发者联盟

数据库 数据湖 数据迁移 关系数据库 实时数据

【Vue2.x 源码学习】第三十三篇 - diff算法-收尾+阶段性总结

Brave

源码 vue2 8月日更

【SpringCloud 技术专题】「原生态 Fegin」打开 Fegin 之 RPC 技术的开端,你会使用原生态的 Fegin 吗?(下)

码界西柚

SpringCloud OpenFegin Fegin 8月日更

Flutter Android 端 FlutterInjector 及依赖流程源码分析

工匠若水

flutter android 8月日更

Go语言那些事儿之管道的关闭

Regan Yue

Go 语言 8月日更 管道

在openEuler上做开发?这个大赛拿出30万寻找开源的yyds

华为云开发者联盟

开源 操作系统 服务器 openEuler 鲲鹏

从0开始的TypeScriptの五:webpack打包typescript

空城机

JavaScript typescript 大前端 8月日更

Stack Overflow 2021 开发者调查报告出炉,开发浪潮中的变与不变

清秋

语言 & 开发 文化 & 方法 Stack Overflow 开发者报告 编程语言排行

U2Net基于ModelArts Notbook的仿真实验

华为云开发者联盟

开源 modelarts 目标检测算法 U2Net Notbook

Vue进阶(二十七):Vuex 之 getters, mapGetters, ...mapGetters详解

No Silver Bullet

Vue vuex 8月日更

Mybatis自定义拦截器与插件开发

码农参上

8月日更

什么是工控主机?工控主机安卓主板有哪些配置?

双赞工控

手撸二叉树之将有序数组转换为二叉搜索树

HelloWorld杰少

数据结构与算法 8月日更

FunTester框架教程(一)

FunTester

教程 接口测试 API测试 测试框架 FunTester

small-spring 代码贡献者3个月,敢说精通Spring了,分享我的总结!

小傅哥

spring 小傅哥 cglib aware BeanPost

Jetpack Compose 架构分层

Changing Lin

8月日更

Java Arrays.asList 和 new ArrayList(Arrays.asList()) 的对比

HoneyMoose

初识 C#

若尘

C# 8月日更

Phoenix:在Apache HBase上执行SQL查询_Java_Abel Avram_InfoQ精选文章