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:4619608
用户头像

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

关注

评论

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

模块5作业

Mr小公熊

在线JSON转CSV格式文件工具

入门小站

工具

架构实战营:模块九作业

Geek_93ffb0

「架构实战营」

物联网应用开发实践案例-智慧农业

DS小龙哥

3月月更

【愚公系列】2022年03月 Docker容器 Mysql主从复制的搭建

愚公搬代码

3月月更

【愚公系列】2022年03月 Docker容器 RabbitMQ集群的搭建

愚公搬代码

3月月更

【愚公系列】2022年03月 Docker容器 Oracle的搭建

愚公搬代码

3月月更

【愚公系列】2022年03月 RabbitMQ EasyNetQ的用法(window11+vs2022+.NET 6)

愚公搬代码

3月月更

微博评论高性能计算架构设计

炎彬

「架构实战营」

【愚公系列】2022年03月 RabbitMQ 环境搭建和初步使用(window11+vs2022+.NET 6)

愚公搬代码

3月月更

百度交易中台之账房系统架构浅析

百度Geek说

百度 架构 后端 交易中台

15 本你必须阅读的 PyTorch 书籍,【2021Python最新学习路线

程序媛可鸥

Python 程序员 面试

模块五 评论计算架构

Geek_28cf33

“微博评论”的高性能、高可用架构设计

凌波微步

「架构实战营」

如何使用 HTML 和 CSS 写一个登录界面

宇宙之一粟

html/css 3月月更

微博评论的高性能高可用计算架构

tom

解密GaussDB(for Influx)时序洞察

华为云开发者联盟

Influxdb 时序数据库 GaussDB(for Influx) 时序数据 时序洞察

微博评论高性能高可用计算架构

石小天

「架构实战营」

微博评论的高可用高性能计算架构

浪飞

18年程序员生涯,读了200多本编程书,挑出一些精华分享给大家

程序媛可鸥

Python 程序员 面试

一文简述:云端常用存储类型

穿过生命散发芬芳

3月月更 云端存储

架构训练营-模块五

Leo

架构训练营

华为自研编程语言“仓颉”试用报名开启

IT蜗壳-Tango

IT蜗壳 3月月更

这应该是目前市面上最好用的一款安卓兼容工具了!

优麒麟

Linux 开源 操作系统 优麒麟 KMRE

一文带你搞懂java8新特性,熟记于心

刘祥

JAVA stream

【愚公系列】2022年03月 RabbitMQ之Erlang-Window11下的安装

愚公搬代码

3月月更

【技术加油站】揭秘百度智能测试规模化落地

百度Geek说

百度 测试 后端 智能化测试

模块五作业

blazar

「架构实战营」

微博评论-高性能高可用计算架构

邹玉麒

「架构实战营」

模块五作业

Geek_ec866b

架构训练营

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