【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

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

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

关注

评论

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

spring 源码解析一、概述

xzy

Java spring spring源码

瞰源 | 别逗了,同学!开源不是点赞送礼

OpenTEKr

狄安瞰源

如何用 Python 自动发送微博?

老表

Python selenium 跟老表学云服务器 自动化实战

Modern-Cpp学习笔记

SkyFire

c++

Golang的通道复用上手(三)

liuzhen007

go语言 28天写作 12月日更

架构训练营第四期 作业3

supermenG

架构师训练营 4 期

比格云CEO 诸葛辉:本土开源力量的崛起,正为底层技术基础设施掀起一股中国风 I OpenTEKr 大话开源 Vol.4

OpenTEKr

大话开源

Mybatis使用的9种设计模式,你知道几种

编程江湖

设计模式 JAVA开发

热更新技术在游戏 SDK 中的实践

bilibili游戏技术

实践解析可视化开发平台FlinkSever优势

华为云开发者联盟

flink kafka 流计算 华为FusionInsight MRS FlinkSever

模块三作业

whoami

「架构实战营」

发现新视界——视觉计算将如何改变生产方式

阿里云弹性计算

阿里云 云栖大会 视觉计算

架构训练营模块三作业

沈益飞

架构训练营 架构师训练营 4 期

架构实战营 - 模块 3 课后作业

tony

ClickPaaS 胡柏:开源不是童话,它背后的商业逻辑正是其哲学的另一面体现 I OpenTEKr 大话开源 Vol.3

OpenTEKr

大话开源

学生管理系统架构文档

皓月

架构实战营 #架构实战营 「架构实战营」

Thinking Agile 2021,Being Agile 2022

Bruce Talk

敏捷 随笔 Agile

直击前沿技术:云原生应用低代码开发平台实践

博文视点Broadview

mysqlx学习

SkyFire

mysqlx

性能分析之系统资源饱和度

zuozewei

Linux 性能分析 12月日更

瞰源 | 假领子的流行经济学看开源

OpenTEKr

狄安瞰源

给弟弟的信第28封|那些在大学赚到第一桶金的大神

大菠萝

28天写作

运维意识

搬砖的周狮傅

开发感想

关于Kafka分区leader迁移的感想

Kafka中文社区

正转与反转(30/28)

赵新龙

28天写作

拾起卖数字化平台亮相2021全国废钢铁大会引热烈反响 数字化建设助推废钢产业高质量发展

InfoQ 天津

NFS(网络文件系统)配置(Ubunut/Deepin等系统)

SkyFire

Linux NFS

2021年,你读过哪些书?(29/28)

赵新龙

28天写作

28天写作挑战复盘

圣迪

灵魂洗礼

关于net6中宿主模型的一点点看法

喵叔

28天写作 12月日更

为什么 MongoDB 使用 B 树

编程江湖

mongodb

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