前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单聊聊数据存储格式

简单聊聊数据存储格式

作者头像
哒呵呵
发布2019-07-12 14:59:33
1.3K0
发布2019-07-12 14:59:33
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记
引子

数据平台的功能简而言之只有两个:存储数据和搜索数据。

在现实生活中存在着两个不同的数据处理模型,一个是OLTP,另一个是OLAP。两者的区别不在这篇文章详细叙述,感兴趣的可以阅读参考文章。因为OLAP和OLTP所面临的困境是不一样的,所以两个选择的数据存储方式也就不一样了。OLTP的数据存储模型大多逃不过Key-Value、B-Tree、LSM-Tree三种行式存储,而OLAP对应的则是列式存储。

随着时代的发展,也诞生了类似C-Store、TiFlash/Tikv的混合存储方式:基于分布式系统的多副本模式,选择一部分副本使用行式存储,另一部分副本使用列式存储,根据SQL特性选择最合适的数据处理方式。

广义上的数据平台的存储数据的方式应该兼容并蓄,根据业务的不同,选择相应的数据存储格式。本文将聚焦于数据平台中关于数据仓库的部分,简单的讨论列式存储及其相关的实现。其余部分留待后文分享,数据模型的简要分析可参考旧文。

列式存储

列式存储诞生于数据仓库独有的分析模式:星型和雪花型模式。对于两种模型而言,它们需要数据平台提供:大规模读取和写入数据的能力;查询时不需要访问所有列,按需返回对应列的数据;并发不要求太高,容忍一定的时延。列式存储满足了这些要求。

想象一下,在数据仓库中往往都会存在成百上千列的宽表,当使用行式存储引擎时需要将数据平台中存储的数据里所有行从磁盘加载到内存中,解析它们,并过滤掉那些不符合要求的条件。但是当使用列式存储引擎时,只需要加载查询条件中对应的列,不需要所有行的数据,因此对于系统的负荷也相应地少了很多。

而列式存储的想法很简单:不要将数据按行存储在一起,而是按列存储在一起。所以对于列式存储而言,它依赖于每一个列文件都有着相同的顺序。

基于上述的想法,列式存储可以更好的根据每一列的特性对数据进行压缩(列压缩),使用位图去索引每一列的值(向量化),更多的优化技术详见参考文章。

常见的列式存储格式

列式存储的实现有很多种,最常见的就是Parquet、ORC。

  • Parquet Parquet格式起源于谷歌 Dremel 论文,然后由 Twitter 和 Coudera 合作开发并共享给 Apache 基金会。其核心思想就是使用类似于 Protocol Buffer 的方式,将嵌套数据结构变成扁平的数据结构以更好的使用列式存储技术。
  • ORC ORC格式起源于 Apache Hive 项目,用于提高 Hive 查询速度和降低 Hadoop 的数据存储空间。与Parquet最大的不同在于嵌套结构的处理,其余的列存储的设计理念相差无几。

Parquet和ORC都是Apache的顶级项目,需要根据计算引擎的不同选择不同的存储格式。

  • Hive对读取ORC格式做了优化,Parquet格式没有优化
  • Spark对读取Parquet格式做了优化,ORC格式没有优化
  • ...
衍生项目

因为传统的HDFS是不支持对数据进行删改查的,所以就有一些有趣的项目扩展了HDFS的能力,比如Apache Hudi和Spark delta lake。两者的设计都是通过metadata去管理某个文件夹下的数据,从而实现对数据的增量处理。

小结

基于Hadoop的数据仓库的存储格式选择是一个有趣的话题。选择一个适合集群计算引擎的存储格式,会大大提高数据查询效率,减少数据的存储空间。而对于数据仓库的设计模式而言,列式存储是最好的选择;不过随着技术的发展,类似HTAP的混合存储方式会成为主流。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引子
  • 列式存储
  • 常见的列式存储格式
    • 衍生项目
    • 小结
    相关产品与服务
    对象存储
    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档