当前位置: 首页 > news >正文

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 数组时,类型不一致可能会带来逻辑问题。

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

http://www.lryc.cn/news/476082.html

相关文章:

  • Redis-基本了解
  • HarmonyOS第一课 06 构建更加丰富的页面-习题解析
  • 计算机的错误计算(一百四十三)
  • 大数据之——Window电脑本地配置hadoop系统(100%包避坑!!方便日常测试,不用再去虚拟机那么麻烦)
  • 汽车固态电池深度报告
  • HTB-Cicada 靶机笔记
  • 使用DJL和PaddlePaddle的口罩检测详细指南
  • 基于stm32的多旋翼无人机(Multi-rotor UAV based on stm32)
  • 第二十四章 v-model原理及v-model简化表单类组件封装
  • Java基于SpringBoot 的校园外卖点餐平台微信小程序(附源码,文档)
  • 细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的方法
  • 无人机场景 - 目标检测数据集 - 夜间车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」
  • Dubbo 构建高效分布式服务架构
  • Unity XR Interaction Toolkit 开发教程(1):OpenXR 与 XRI 概述【3.0 以上版本】
  • 自扶正救生艇,保障水上救援的安全卫士_鼎跃安全
  • 《Qwen2-VL》论文精读【下】:发表于2024年10月 Qwen2-VL 迅速崛起 | 性能与GPT-4o和Claude3.5相当
  • WebSocket消息帧的组成结构
  • 如何利用低代码开源框架实现高效开发?
  • 使用 RabbitMQ 有什么好处?
  • 机器学习周报(RNN的梯度消失和LSTM缓解梯度消失公式推导)
  • 一篇文章理解前端中的 File 和 Blob
  • 串口屏控制的自动滑轨(未完工)
  • DFA算法实现敏感词过滤
  • Python自动化运维:技能掌握与快速入门指南
  • 在linux系统中安装pygtftk软件
  • decodeURIComponentSafe转义%问题记录URI malformed
  • 自由学习记录(18)
  • vue3-ref 和 reactive
  • Apache Calcite - 查询优化之自定义优化规则
  • 大型语言模型(LLM)的小型化研究进展