专业的编程技术博客社区

网站首页 > 博客文章 正文

为什么数据格式很重要?Parquet vs Protobuf vs JSON

baijin 2024-11-08 10:22:49 博客文章 8 ℃ 0 评论

数据格式是什么?

  1. 数据格式是一种特定的数据表示或排列方式。
  2. 数据格式定义了信息的结构、传输和编码方式。
  3. 基于文本的格式: CSV、JSON、XML
  4. 二进制格式: Avro、协议缓冲区(protobuf)
  5. 数据库特定格式: SQLite 数据库文件(.db)、MySQL 数据集(.sql)
  6. 列式存储格式: Parquet、Apache Arrow、Google Bigtable
  7. 文档格式: PDF(便携式文档格式)、DOCX
  8. 图像格式: JPEG、PNG、GIF。
  9. 音频/视频格式: MP3、WAV、MP4、AVI。

为什么数据格式很重要?

数据格式会对数据相关工作流程的各个方面产生重大影响。不同的格式针对不同的使用情况进行了优化。

  1. 不同的数据格式提供不同程度的压缩。选择具有高效压缩功能的格式可以大大降低存储需求,节约成本并改善整体数据管理。
  2. 数据格式会影响查询引擎读取和处理数据的效率。列式存储格式(如 Parquet)针对分析查询进行了优化,在需要读取特定列而无需读取整个数据集的情况下,可以获得更好的性能。
  3. 将数据转换成适合存储或传输的格式(序列化)并将其转换回原始格式(反序列化)的过程可能会产生开销。有些格式在序列化和反序列化速度方面效率更高。
  4. 当数据需要在系统间传输时,选择一种紧凑高效的序列化格式对于最大限度地减少带宽使用和确保快速数据传输至关重要。在这种情况下,JSON、XML 和协议缓冲区等格式可满足不同的需求。将数据转换成适合存储或传输的格式(序列化)并将其转换回原始格式(反序列化)的过程可能会产生开销。有些格式在序列化和反序列化速度方面效率更高。

什么是数据序列化?数据序列化是将对象或数组等复杂数据结构转换为易于通过网络传输或存储在文件中的格式的过程。从本质上讲,它是将内存中的对象转换为易于通过网络存储或发送的格式的过程。

  1. 模式演进是指数据存储或序列化格式能够从容应对数据模式(结构)随时间发生的变化。换句话说,它允许修改、添加或删除数据集中的字段或结构,同时保持与新旧版本模式的兼容性。
  2. 数据格式处理模式变化而无需修改整个数据集的能力至关重要。Avro 和 Parquet 等格式以支持模式演进而著称。让我们看看 JSON 中的一个示例:模式演进是指数据存储或序列化格式能够从容应对数据模式(结构)随时间发生的变化。换句话说,它允许修改、添加或删除数据集中的字段或结构,同时保持与新旧版本模式的兼容性。

初始模式:

{
    "name": "John",
        "age": 25
}

进化模式:

{
    "name": "John",
        "age": 25,
            "email": "john@email.com"
}

JSON:一种轻量级数据交换格式,便于人类读写,也便于机器解析和生成。

  1. 注重人的可读性:适用于配置文件、应用程序接口以及注重人的可读性的场景。
  2. 速度慢、体积大:与二进制格式相比,它的序列化和反序列化速度较慢。它不够紧凑,导致数据量较大。注重人的可读性:适用于配置文件、应用程序接口以及注重人的可读性的场景。

Parquet: 它是 Apache Hadoop 项目开发的一种开源列式存储格式。由于它是一种二进制列式存储格式,因此不具备人工可读性。

  1. 专为高效存储和处理大型数据集(分析、数据仓库)而设计,尤其是在 Apache Spark 和 Apache Hive 等大数据框架中。
  2. 使用先进的压缩技术: 使用字典编码和运行长度编码,有效压缩数据。这样可以减少存储空间需求,加快数据检索速度。
  3. 针对读取繁重的工作负载进行了优化: 它针对经常进行分析查询的重读取工作负载进行了优化。它可能不太适合写密集型工作负载,因为列格式需要在更新时重写整个列。使用先进的压缩技术: 使用字典编码和运行长度编码,有效压缩数据。这样可以减少存储空间需求,加快数据检索速度。

Protobuf:Protobuf 是协议缓冲区(Protocol Buffers)的简称,是谷歌开发的一种二进制格式。

  1. 针对序列化和高效数据交换进行了优化:
  2. 用于高性能方案: 需要预定义模式(在 .proto 文件中定义)。它是强类型的,并强制执行数据结构。它常用于高性能场景,尤其是分布式系统和微服务之间的通信。针对序列化和高效数据交换进行了优化:非人工可读,针对序列化和高效数据

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表