武汉的开发者们注意啦!AI技术战略、框架以及最佳实战尽在Azure OpenAI Day 了解详情
写点什么

使用 Google Supersonic 查询列存储数据库

  • 2012-10-22
  • 本文字数:1021 字

    阅读完需:约 3 分钟

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 )关注我们,并与我们的编辑和其他读者朋友交流。

2012-10-22 06:262586
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 129.5 次阅读, 收获喜欢 34 次。

关注

评论

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

中国首批区块链订单融资缘何落地雄安?

CECBC

12.04 Serverless Meetup 深圳站 | Call 你来参加

阿里巴巴云原生

阿里云 Serverless 云原生 活动

AOP 插件就这?上手不用两分钟!!

4ye

Java spring 程序员 后端 签约计划第二季

使用JDK自带的VisualVM进行Java程序的性能分析

Jerry Wang

Java jdk 性能 性能调试 11月日更

从1天到10分钟的超越,华为云DRS在背后做了这些

华为云开发者联盟

数据库 数据 报表 华为云DRS 在线交易

常用的5个分布式缓存框架

编程江湖

Java 开发 分布式缓存框架

面试官:说一下final关键字和final的4种用法?

王磊

元宇宙是人类文明不可避免的一次内卷

CECBC

Rust 元宇宙 7—— 异步和消息

Miracle

rust 异步 元宇宙

架构训练营 - 模块五

Geek_9de3de

架构实战营

Spring AOP内功修炼

4ye

Java spring 程序员 后端 签约计划第二季

[Pulsar] 消息的消费

Zike Yang

Apache Pulsar 11月日更

OpenELB 进入 CNCF Sandbox,让私有化环境对外暴露服务更简单

青云技术社区

云计算 云原生

在线文本并集计算工具

入门小站

工具

kafka元数据信息存储在哪里,如何查看

编程江湖

kafka

spring-boot-devtools 快速重启的秘密

4ye

Java spring 程序员 后端 签约计划第二季

「Oracle」Oracle数据库基本概念

恒生LIGHT云社区

数据库 oracle

基于TDengine进行睿信物联网平台的迁移改造

TDengine

tdengine 时序数据库

架构营模块五作业

GTiger

如何用JavaScript实现2+2=5?

Jerry Wang

JavaScript 大前端 语音识别 语音合成 11月日更

Java开发之ssm三大框架的整合

@零度

Java ssm

使用HTML+CSS制作逼真的红色开关

海拥(haiyong.site)

CSS html 大前端 Demo 签约计划第二季

Redis线程模型的前世今生

vivo互联网技术

redis reactor 多线程 io

激发数字新活力 打造发展新优势

CECBC

Python Qt GUI设计:QClipboard剪贴数据类(基础篇—19)

不脱发的程序猿

Python PyQt GUI设计 QClipboard 剪贴板

架构训练营 - 模块六

Geek_9de3de

架构实战营

GitHub上星标39.9k+的开源类库,忍不住分享下

沉默王二

Java

Python量化数据仓库搭建系列3:数据落库代码封装

恒生LIGHT云社区

量化投资 量化交易 量化

DDD领域驱动设计落地实践系列:战略设计和战术设计

慕枫技术笔记

Java 后端 签约计划第二季

微信程序开发系列教程(一)开发环境搭建

Jerry Wang

JavaScript node.js 微信 11月日更 微信开发

一文读懂敏捷开发的发布策略

华为云开发者联盟

DevOps 运维 敏捷 开发 发布策略

使用Google Supersonic查询列存储数据库_开源_Abel Avram_InfoQ精选文章