Phoenix:在Apache HBase上执行SQL查询
本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2013/02/Phoenix-HBase-SQL
近日,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接口,有如下几个原因:
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