跳转到内容

常见数据传输格式与协议对比

1. 文本数据格式 (Text-Based Formats)

Section titled “1. 文本数据格式 (Text-Based Formats)”

这类格式的特点是 人类可读性强,但效率相对较低。

格式核心特点优点缺点典型应用
JSON (JavaScript Object Notation)轻量级的键值对和数组结构,基于文本。跨平台/跨语言兼容性极高;人类可读性好;易于编写和解析。数据冗余(键名重复传输);解析和传输效率低(需要序列化/反序列化);不支持复杂数据类型。Web API 通信(RESTful API)、配置文件、简单数据存储。
XML (eXtensible Markup Language)使用标签嵌套来定义数据结构,非常灵活。可扩展性强;支持命名空间、文档校验(Schema);适合复杂文档结构。过于冗长(标签多);解析复杂且慢;数据冗余度远高于 JSON。SOAP 协议、配置管理、文档交换。
CSV (Comma-Separated Values)纯文本格式,以逗号或其他分隔符区分字段。结构简单,可直接用电子表格软件打开;文件小,易于导入导出。无类型信息;难以处理嵌套结构;分隔符问题(数据中包含逗号)。大型表格数据存储、数据导入导出。

这类格式牺牲了部分人类可读性,以换取极高的 传输和计算效率

格式核心特点优点缺点典型应用
Protocol Buffers (Protobuf)Google 开发的语言无关、平台无关的序列化机制。极度紧凑(文件小);解析速度快;强制使用 Schema(结构定义),确保数据一致性;支持版本向前兼容。不具备人类可读性;需要额外的编译步骤来生成代码;Schema 更改后需要重新编译。微服务间通信、数据存储、gRPC 底层格式。
Apache AvroHadoop 生态系统中的数据序列化系统,侧重于 模式演化Schema 存储在数据中或与数据一同传输;支持 模式演化(读写模式不同时仍可兼容)。不具备人类可读性;数据相对 Protobuf 略大。Kafka 消息队列、Hadoop/Hive 数据存储。
格式核心特点优点缺点典型应用
Apache Arrow跨语言、内存内的列式数据格式标准零拷贝(Zero-Copy):数据无需序列化即可在不同系统间传输;高度优化:内存布局完美适配向量化执行和 CPU 缓存。不是持久化存储格式(设计目标是内存传输);人类可读性极差。高性能数据分析(Polars, DuckDB)、跨语言数据交换、Arrow Flight 协议。
Apache Parquet列式存储的 磁盘持久化格式极高压缩率查询效率高(可只读取需要的列);支持复杂嵌套类型。不具备人类可读性;写入相对复杂。数据湖存储(S3, HDFS)、大规模 OLAP 分析。

这类技术定义了数据如何通过网络传输,并通常依赖特定的序列化格式。

协议核心特点优点缺点底层数据格式
REST/HTTP 1.1/2基于 HTTP 协议,无状态。兼容性最好,几乎所有平台都支持;易于调试 and 理解。请求头冗余;性能依赖于底层的 JSON 或 XML 格式。JSON、XML、自定义格式
gRPC基于 HTTP/2 协议 and Protocol Buffers高性能(HTTP/2 的多路复用、Protobuf 的高效);双向流(Streaming)支持;强类型 接口定义。部署相对复杂;主要使用 Protobuf,与其他格式的兼容性差;需要客户端和服务端都生成 Stub 代码。Protocol Buffers
Apache Arrow Flight基于 gRPC and Arrow 格式。极致高性能:利用 Arrow 的零拷贝 and gRPC 的高效传输,特别适合 大数据集传输仅限于传输 Arrow 格式的数据;生态相对较新。Apache Arrow

  1. 易用性和可读性优先(人与系统交互):
    • JSON: 适用于 REST API、配置文件,以及任何需要人类轻松阅读和修改的场景。
  2. 高性能和系统间通信优先(微服务):
    • gRPC/Protobuf: 适用于对 速度和效率要求极高 的微服务或内部系统间通信。
  3. 数据分析和大数据优先(分析工作流):
    • Apache Arrow: 适用于 内存内 的跨语言、跨框架(如 Python、R、Java)的数据交换,以消除序列化瓶颈。
    • Apache Parquet: 适用于 磁盘存储,作为数据湖中表格数据的标准持久化格式。