相比传统的行式存储引擎,列式存储引擎具有更高的压缩比,更少的IO操作而备受青睐(注:列式存储不是万能高效的,很多场景下行式存储仍更加高效),尤其是在数据列(column)数很多,但每次操作仅针对若干列的情景,列式存储引擎的性价比更高。在互联网大数据应用场景下,大部分情况下,数据量很大且数据字段数目很多,但每次查询数据只针对其中的少数几行,这时候列式存储是极佳的选择,目前在开源实现中,最有名的列式存储引擎是Parquet和ORC,在最近一年内,它们都晋升为Apache顶级项目,可见它们的重要性。本文尝试比较这两种存储引擎。

Apache Parquet

源自于google Dremel系统(可下载论文参阅),Parquet相当于Google Dremel中的数据存储引擎,而Apache顶级开源项目Drill正是Dremel的开源实现。

Apache Parquet 最初的设计动机是存储嵌套式数据,比如Protocolbuffer,thrift,json等,将这类数据存储成列式格式,以方便对其高效压缩和编码,且使用更少的IO操作取出需要的数据,这也是Parquet相比于ORC的优势,它能够透明地将Protobuf和thrift类型的数据进行列式存储,在Protobuf和thrift被广泛使用的今天,与parquet进行集成,是一件非容易和自然的事情。 除了上述优势外,相比于ORC, Parquet没有太多其他可圈可点的地方,比如它不支持update操作(数据写成后不可修改),不支持ACID等。

Apache ORC

ORC(OptimizedRC File)存储源自于RC(RecordColumnar File)这种存储格式,RC是一种列式存储引擎,对schema演化(修改schema需要重新生成数据)支持较差,而ORC是对RC改进,但它仍对schema演化支持较差,主要是在压缩编码,查询性能方面做了优化。RC/ORC最初是在Hive中得到使用,最后发展势头不错,独立成一个单独的项目。Hive 1.x版本对事务和update操作的支持,便是基于ORC实现的(其他存储格式暂不支持)。ORC发展到今天,已经具备一些非常高级的feature,比如支持update操作,支持ACID,支持struct,array复杂类型。你可以使用复杂类型构建一个类似于parquet的嵌套式数据架构,但当层数非常多时,写起来非常麻烦和复杂,而parquet提供的schema表达方式更容易表示出多级嵌套的数据类型。

Parquet与ORC对比

总结

目前在互联网领域,列式存储已经逐步被用于各种产品线中,比如twitter已经将部分数据格式转换为parquet,所占空间和查询时间减少了约1/3(来源:https://adtmag.com/articles/20 ... .aspx )。在Twitter,日志格式使用thrift描述,使用Parquet存储,下图是一个典型的数据格式描述,共有87个字段,7层嵌套关系。

Apache开源列式存储引擎Parquet和ORC比较相关推荐

  1. 两种列式存储格式:Parquet和ORC

    背景 随着大数据时代的到来,越来越多的数据流向了Hadoop生态圈,同时对于能够快速的从TB甚至PB级别的数据中获取有价值的数据对于一个产品和公司来说更加重要,在Hadoop生态圈的快速发展过程中,涌 ...

  2. OLAP列式存储之引擎特性

    本文简要从存储结构.索引结构和数据更新方式等几个方面介绍当前比较热门的OLAT/HATP列式存储引擎,包括ClickHouse和SqlServer. ClickHouse 1.1 存储结构和索引结构 ...

  3. 数据库中的 【行式存储】和【列式存储】

    传统的关系型数据库,如 Oracle.DB2.MySQL.SQL SERVER 等采用行式存储法(Row-based),在基于行式存储的数据库中, 数据是按照行数据为基础逻辑存储单元进行存储的, 一行 ...

  4. “行式存储”和“列式存储”的区别

    https://www.jianshu.com/p/3d3950c9fb06 我们知道 当今的数据处理大致可分为两大类 联机事务处理 OLTP (on-line transaction process ...

  5. tablestore列式存储原理_10分钟搞透:技术人必会的MySQL体系结构与存储引擎!

    MySQL是目前使用最广的开源数据库,不管从装机量.使用人群.专职人员.社区发展,还是基于MySQL的其他分支,都是当之无愧的No.1. 本文将从以下4个方面,带你搞透MySQL体系结构与存储引擎. ...

  6. Flink大数据实时计算系列-列式存储parquet文件格式介绍、Flink进行rowformat格式文件保存

    Flink大数据实时计算系列-列式存储parquet文件格式介绍 Flink进行rowformat格式文件保存 列式存储parquet文件格式介绍

  7. 为什么 OLAP 需要列式存储

    为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点.对具体实现造成的影响 ...

  8. 用户关系表 存储_列式存储系列(一)CStore

    作者:辛庸,阿里巴巴计算平台事业部 EMR 技术专家.Apache Hadoop,Apache Spark commiter.对 Hadoop.Spark.Hive.Druid 等大数据组件有深入研究 ...

  9. 大数据的列式存储格式:Parquet

    之前简单介绍了一下列式存储: 和谐号为啥快?因为铁轨是列式存储!  今天介绍一种大数据时代有名的列式存储文件格式:Parquet,被广泛用于 Spark.Hadoop 数据存储.Parquet 的中文 ...

最新文章

  1. 输入带空格字符串的两种方法
  2. Algorithms_算法专项_Bitmap原理及应用
  3. 网工路由基础(4)EIGRP协议
  4. Oracle数据文件的备份与恢复
  5. java.util.concurrent.Exchanger应用范例与原理浅析
  6. Gartner发布2021年低代码魔力象限,Mendix名列前位
  7. c++ 暂停功能_2020.10.16撸友简报:NC资本澄清;去嗨皮打赏交易
  8. Spring框架jar包分类(转)
  9. 索尼XA3曝光:同样是21:9屏幕 带鱼手机屏或成新潮流
  10. 前端笔记 | HTML基础
  11. 第三节: 串口通信(用CubeMX学习STM32)
  12. H.264学习过程中遇到的英文缩写整理
  13. 华为鸿蒙系统和奔驰公司,华为已行动,又是一个千亿BG,奔驰已经加入
  14. 简单好用的ImageAI编程库!选择最适合你的!
  15. Segmentation简记5-AuxNet: Auxiliary tasks enhanced Semantic Segmentation for Automated Driving
  16. 获取ccid的标准方法
  17. 解决richedit的内容不能超过64k的方法
  18. 2.0显示为整数 java_关于java:我知道为什么我需要在这里将整数文字转换为(int)?...
  19. Python 3 《array》入门练习
  20. excel快速自动填充空白单元格上一行的内容

热门文章

  1. 10 个免费的服务器监控工具
  2. vs2013 无法创建项目 终极解决方案
  3. dB、W、dBW和信噪比SNR的关系
  4. 有效字符区域 获取textview_Android之TextView 详细字典
  5. 苹果5壁纸_iPhone12蓝色橙色壁纸图片下载_iPhone12蓝色橙色壁纸图片无水印免费分享 v1.0...
  6. 硬盘中sata2和sata3接口的区别是什么?
  7. 科普:原型验证系统VS硬件仿真器,哪一个更好?
  8. hyper-v安装android
  9. 迪赛智慧数——其他图表(矩形树图):人体每日膳食合理摄入结构
  10. [EDI 案例] 汽车地带/Autozone EDI解决方案