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

相关推荐
施嘉伟1 小时前
Oracle 11g RAC ASM磁盘组剔盘、加盘实施过程
数据库·oracle
橘猫云计算机设计2 小时前
springboot基于hadoop的酷狗音乐爬虫大数据分析可视化系统(源码+lw+部署文档+讲解),源码可白嫖!
数据库·hadoop·spring boot·爬虫·python·数据分析·毕业设计
卓怡学长3 小时前
w304基于HTML5的民谣网站的设计与实现
java·前端·数据库·spring boot·spring·html5
冰^3 小时前
MySQL VS SQL Server:优缺点全解析
数据库·数据仓库·redis·sql·mysql·json·数据库开发
电商数据girl3 小时前
产品经理对于电商接口的梳理||电商接口文档梳理与接入
大数据·数据库·python·自动化·产品经理
Spring小子4 小时前
黑马点评商户查询缓存--缓存更新策略
java·数据库·redis·后端
溜溜刘@♞5 小时前
数据库之mysql优化
数据库·mysql
uwvwko6 小时前
ctfhow——web入门214~218(时间盲注开始)
前端·数据库·mysql·ctf
柯3496 小时前
Redis的过期删除策略和内存淘汰策略
数据库·redis·lfu·lru
Tiger_shl6 小时前
【Python语言基础】24、并发编程
java·数据库·python