json和pb的比较

1.介绍

在数据序列化和通信领域,schema 指的是用于定义数据结构的模式结构描述 。它描述了数据的字段、类型、嵌套结构和约束,并在数据验证和解释上发挥重要作用。常见的 schema 格式包括 Protocol Buffers (proto)、JSON Schema、XML Schema 等。

Protocol Buffers(简称 proto)和 JSON 都是用于数据交换的格式,但在 schema 的强度和类型系统上有一些关键差异,使得 proto 在某些方面比 JSON 更具优势。

1.1 pb类型检查更严格

  • Proto :proto 的 schema 定义了每个字段的确切类型(例如 int32floatstringboolenum、嵌套消息等),这使得数据更加清晰、可预测。proto 编译器会根据 schema 自动生成代码,确保序列化和反序列化的数据符合预定的类型和结构。
  • JSON:虽然 JSON Schema 可以定义字段的类型,但在实际使用中 JSON 并不强制类型检查。JSON 本身是一种松散的格式,通常在序列化或解析时不进行强类型约束,这容易导致数据格式和类型不一致的问题。

例子,数组 values 包含了整数、字符串、布尔值和对象等不同类型。JSON 不会强制验证数组元素的类型一致性,但在解析或操作 values 数组时,类型不一致可能会带来逻辑问题。

javascript 复制代码
{
    "values": [1, "2", true, {"nested": "object"}]
}

JSON 不进行类型检查,数据格式问题通常只能在应用程序层面捕获,并没有自动的类型校验机制。

1.2 数据大小和性能

  • Proto :proto 使用二进制格式进行序列化,更加紧凑和高效。在网络传输和存储方面,比 JSON 的文本格式更节省空间。proto 在读取、写入和传输数据时性能更高,尤其在处理大量数据时,proto 的 schema 能帮助优化数据处理流程。
  • JSON:JSON 是一种文本格式,通常比 proto 的二进制格式大,占用更多的带宽和存储空间。此外,由于 JSON 需要解析复杂的文本格式,相对耗时,尤其在数据量较大时性能较差。

1.3 前向兼容和后向兼容

  • Proto:proto schema 支持前向和后向兼容,允许定义字段时指定字段编号,以便在 schema 变化时保留旧字段并添加新字段。这样在不同版本间升级时,旧服务和新服务能继续通信而不会出错。
  • JSON:JSON 缺乏直接的前向和后向兼容支持。若添加、删除或更改字段,需要客户端和服务端都进行更新和兼容处理,不然可能导致数据解释失败。

后向兼容:

后向兼容(backward compatibility)意味着旧版本的客户端服务端 能够解析新版本数据 的主要字段。通常指的是在 schema 中新增字段 ,而不影响旧版本的解析。Proto 解析器会忽略未知字段,但依然可以成功读取和解析已知的字段。

前向兼容:

前向兼容(forward compatibility)指的是新版本的客户端服务端 能够解析旧版本数据 中的已知字段,而不会因缺少字段导致错误。这种兼容性通常是在删除或弃用字段时体现。被移除的字段在解析时为空。

相关推荐
floret*27 分钟前
在 hiveSQL 中判断一个字段是否包含某个值
前端·javascript·数据库
冰红茶兑滴水1 小时前
MySQL 数据库之库操作
数据库·mysql
MicrosoftReactor2 小时前
技术速递|.NET 9 中 System.Text.Json 的新增功能
ui·json·.net
Fireworkitte2 小时前
MongoDB
数据库·mongodb
来一杯龙舌兰2 小时前
【MongoDB】MongoDB的聚合(Aggregate、Map Reduce)与管道(Pipline) 及索引详解(附详细案例)
数据库·mongodb·mapreduce·索引·aggregate·pipline
爱吃烤鸡翅的酸菜鱼4 小时前
MySQL初学之旅(1)配置与基础操作
java·数据库·mysql·database
三日看尽长安花6 小时前
【分布式数据库】
数据库·分布式
天天进步20157 小时前
X2JS: XML与JSON的完美转换工具
xml·json
一 乐10 小时前
家常菜点餐|基于java和小程序的家庭大厨家常菜点餐系统设计与实现(源码+数据库+文档)
java·数据库·小程序·家庭点餐小程序·家庭家常菜点餐
小小不董10 小时前
Oracle OCP认证考试考点详解082系列08
linux·运维·服务器·数据库·oracle·dba