JSON非常慢:这里有更快的替代方案!( 三 )

协议缓冲区总大?。?~38 字节
MessagePack
二进制表示法(十六进制):
a36a6964000000000a4a6f686e20446f650c6a6f686e646f65406578616d706c652e636f6d042100000005011241313302bdcccc3f0530112434353625029a99993f信息包总大?。?~34 字节
Binary Representation (Hexadecimal):
3e0000001069640031000a4a6f686e20446f6502656d61696c006a6f686e646f65406578616d706c652e636f6d1000000022616765001f04370e4940BSON 总大?。?~43 字节
Avro
二进制表示法(十六进制):
0e120a4a6f686e20446f650c6a6f686e646f65406578616d706c652e636f6d049a999940040a020b4108312e3525312e323538323539Avro 总大?。?~32 字节

JSON非常慢:这里有更快的替代方案!

文章插图
图片
现在 , 你可能想知道,为什么这些格式中的某些会输出二进制数据,但它们的大小却各不相同 。Avro、MessagePack 和 BSON 等二进制格式具有不同的内部结构和编码机制,这可能导致二进制表示法的差异,即使它们最终表示的是相同的数据 。下面简要介绍一下这些差异是如何产生的:
1. Avro
  • Avro 使用模式对数据进行编码,这种模式通常包含在二进制表示法中 。
  • Avro 基于模式的编码通过提前指定数据结构 , 实现了高效的数据序列化和反序列化 。
  • Avro 的二进制格式设计为自描述格式,这意味着模式信息包含在编码数据中 。这种自描述性使 Avro 能够保持不同版本数据模式之间的兼容性 。
2. MessagePack
  • MessagePack 是一种二进制序列化格式,直接对数据进行编码,不包含模式信息 。
  • 它使用长度可变的整数和长度可变的字符串的紧凑二进制表示法,以尽量减少空间使用 。
  • MessagePack 不包含模式信息,因此更适用于模式已提前知晓并在发送方和接收方之间共享的情况 。
  •  
3. BSON
  • BSON 是 JSON 数据的二进制编码,包括每个值的类型信息 。
  • BSON 的设计与 JSON 紧密相连,但它增加了二进制数据类型 , 如 JSON 缺乏的日期和二进制数据 。
  • 与 MessagePack 一样,BSON 不包括模式信息 。
这些设计和编码上的差异导致了二进制表示法的不同:
  • Avro 包含模式信息并具有自描述性,因此二进制文件稍大,但与模式兼容 。
  • MessagePack 的编码长度可变,因此非常紧凑,但缺乏模式信息 , 因此适用于已知模式的情况 。
  • BSON 与 JSON 关系密切 , 并包含类型信息 , 与 MessagePack 等纯二进制格式相比,BSON 的大小会有所增加 。
总之,这些差异源于每种格式的设计目标和特点 。Avro 优先考虑模式兼容性,MessagePack 侧重于紧凑性,而 BSON 在保持类似 JSON 结构的同时增加了二进制类型 。格式的选择取决于您的具体使用情况和要求,如模式兼容性、数据大小和易用性 。
优化 JSON 性能下面是一些优化 JSON 性能的实用技巧以及代码示例和最佳实践:
1.最小化数据大小
  • 使用简短的描述性键名:选择简洁但有意义的键名,以减少 JSON 对象的大小
// Inefficient{"customer_name_with_spaces": "John Doe"}// Efficient{"customerName": "John Doe"}
  • 尽可能缩写:在不影响清晰度的情况下,考虑对键或值使用缩写 。
// 效率低{"transaction_type": "purchase"} // 效率高{"txnType": "purchase"}2.明智使用数组
  • 尽量减少嵌套:避免深度嵌套数组 , 因为它们会增加解析和遍历 JSON 的复杂性 。
// 效率低{"order": {"items": {"item1": "Product A","item2": "Product B"}}}// 效率高{"orderItems": ["Product A", "Product B"]}3.优化数字表示法尽可能使用整数:如果数值可以用整数表示,就用整数代替浮点数 。
// 效率低{"quantity": 1.0}// 效率高{"quantity": 1}


推荐阅读