Supersonic是一个面向列存储数据库的查询引擎库,它提供了一组数据变换原语。而且Google宣称,因为“大量使用了高速缓存感知算法、SIMD指令和矢量化执行,使之能够开发出现代超级流水线处理器的能力与资源”,这些数据变换原语“超级快速”。Supersonic有以下主要特性:
\- 高速缓存感知
\
- 指令流水线\
- 使用SIMD(Single Instruction Multiple Data,单指令多数据)\
- 定制数据结构\
- 失效处理\
- 支持标准的列存储操作\
- 专门化的表达式\
Supersonic支持大量的操作(operation),这些操作既可以用于整个表,也能组合为操作树:
\- 聚合:SUM、MIN、MAX、COUNT、CONCAT、FIRST、LAST\
- 计算:将表达式(下面有更多关于表达式的信息)转换为操作\
- 过滤:过滤列存储表的行\
- 生成:创建一定数量的没有列的行\
- 限制:限制从前一操作所得结果的行数\
- 排序:将前一操作的结果排序\
与操作不同的是,表达式(expression)应用于行级,负责在单个的列值上执行真正的计算。表达式也可以组合成表达式树。下面列出一些表达式:
\- 末端:叶节点,其中包含的是基本类型,如ConstInt32、ConstBool、ConstDataType、RandInt32等\
- 算数运算:Plus、Minus、Multiply等\
- 比较运算:Equal、Less、Greater、IsOdd等\
- 日期/时间运算:Now、Day、Month、Year、Hour、Minute、Second、AddDays等\
- 逻辑运算:And、Or、AndNot、Xor、Not\
- 控制流:If、IsNull、IfNull、Case\
- 数学运算:Exp、Sin、Cos、Abs、Round、Floor、Trunk、Sqrt、Power等\
- 字符串:ToString、Concat、Length、Trim等\
Supersonic使用C++编写,而且没有内置的数据存储格式,但是现在有“很强的意图”来创建一个。数据当前保存在内存中。
\Supersonic查询引擎基于Apache License 2.0许可发布,可以从它的Google Code网站下载。为了说明针对列存储表如何使用操作与表达式,源代码中提供了大量的例子。
\附图是Supersonic团队给出的,表示按如下方式处理一个行数为1M的表所得到的带有基准测试结果的操作树: 一个视图的获取要花费60微秒(速度为16.7G rows/s),随后过滤用掉1.03毫秒(速度为1M rows/s),后面是一个耗时25微秒的计算(速度为41.2M rows/s),然后结果与另一个过滤结合,整个测试耗时22.1 毫秒。
\查看英文原文:Querying Columnar Databases with Google Supersonic
\\感谢崔康对本文的审校。
\给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。