网易视频云专家分享:Google Mesa论文笔记

网易视频云是网易公司旗下的视频云服务产品,以Paas服务模式,向开发者提供音视频编解码SDK和开放API,助力APP接入音视频功能。现在,网易视频云的技术专家给大家分享一篇技术性文章:Google Mesa论文笔记。

Mesa是Google用于广告的数据仓库系统, 拥有准实时的数据更新能力, 和低延迟的数据查询性能。 系统高可用性、可靠性、扩展性都非常优秀, 数据规模可达PB级别, 支持每秒数百万行写入。 每天数十亿查询请求 。

Mesa的设计目标:

原子更新。 单个用户操作可能会涉及多项关系数据更新, 影响数据仓库中数千个物化视图, 表和视图必须原子更新, 避免读到不一致的结果。

一致性和正确性。 在多机房部署的情况下, 仍然保证强一致性, 可重复读。

可用性。没有任何单点, 能容忍整个机房故障。

准实时更新。 每秒数百万行更新吞吐率, 分钟级别数据更新延迟。

查询性能。 同时支持低延时的在线报表业务,和高吞吐的批量业务。 99%的点查询(查询一条记录)在100ms内完成, 查询吞吐率可达到每天万亿行。

扩展性。 万亿行数据 , 达到PB存储量。

在线修改表结构。

Mesa的数据模型是数据立方体, 表包含多个维度属性(keys), 和多个度量属性(values)。 表上可定义物化视图, 譬如表C是定义在表B上的物化视图, 其定义查询为SELECT SUM(Clicks), SUM(Cost) GROUP BY AdvertiserId, Country。 物化视图可以提高查询效率, 当然也放大了数据更新量, 因为系统必须维护父表和物化视图的数据一致性 。

多版本机制

更新采用批量方式。 一段时间内(通常是几分钟)的更新操作累积在一起, 批量更新入库。 与关系数据库MVCC机制类似, 一批更新操作产生一个新版本(版本号从0开始连续编号), 查询都是针对一个特定版本的数据快照, 所以更新操作不会影响到查询一致性。

物理存储和索引结构

Mesa底层是一个KV存储结构, 所有维度属性作为key, 度量属性作为Value。 如下图所示, Mesa使用与Leveldb类似的两层delta结构存储KV。 singleton代表一次update操作产生的delta, cumulatives代表多个版本的累计delta, base是所有历史更新积累而成的基础数据。多个singleton定期合并形成cumulatives, cumulatives定期合并到base。 通过这种方式, mesa支持到分钟级(5分钟)的数据更新延迟,且保证了查询性能。

Mesa表和索引采用相同的存储方式, 各自有各自的两层delta结构。 base/cumulative/singleton按照索引key顺序组织成多个数据文件, 存储于Colossus。 每个索引都会存储完整的记录, 所以查询时不存在回表操作。数据文件分为多个大小相近的row blocks, row block内部按照列存来组织并压缩, 以获得较高的压缩比。 提取row block首key的固定长度前缀构成数据文件摘要索引。查找记录时先从摘要索引定位row block, 解压缩row block相关列,进一步在row block中定位记录。

查询

Mesa查询通过查询服务器来实现, 没有实现类似Google兄弟产品powerdrill或者dremel类似的多层树状查询执行模型, 如果查询涉及的数据量较大时,性能会有瓶颈。 Mesa提供的查询能力也比较有限, 只是一些简单的条件过滤和group by, 高层数据库引擎比如MySQL,F1,Dremel可基于mesa的查询能力提供更强大的SQL能力,比如join query。 Mesa通过查询的标签区分在线查询和离线批量查询, 避免这两者相互干扰,能同时满足两种类型查询需求。

Mesa实现了一些基本的查询优化措施: 1) delta pruning。 根据delta的key范围跳过一些不命中的delta。理论上mesa也可以利用row block的统计调过一些不满足的block, 但是文章没有提到这种优化措施。 2) scan-to-seek优化, (A,B)两列索引,如果查询只指定了B上条件, 也尽量利用索引调过不必要的数据访问。( 这种优化常见于MySQL关系数据库)。

除了基本查询之外, 针对一些离线分析业务, Mesa也支持Map Reduce框架。

总体看来Mesa支持的SQL能力比较有限, 查询的效率比较依赖于索引或者物化视图定义。

异地复制

全局唯一的无状态committer赋予更新唯一版本号, 并提交到异地高可用(paxo协议实现)的Global update storage中。 各数据中心的mesa实例从Global Update storage拉取更新,应用到本地, 等到所有数据中心都应用 成功时候, committer才增加commit version, 此时更新才对查询可见。 committer本身是无状态的, 所以自身高可用不成问题。

总结

Mesa是能同时满足准实时数据更新, 低延迟查询, 且可用性、扩展性都表现不错的数据库仓库系统。 Google内部类似的系统有PowerDrill,Dremel, 虽然有些不同的地方, 但是应用场景上也略有重叠, 很好奇Google内部是如何定位这些系统的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值