美文网首页
怎么选择数据序列化方案?

怎么选择数据序列化方案?

作者: 技术修行者 | 来源:发表于2023-03-12 06:52 被阅读0次

什么是序列化和反序列化

当数据在网络上传输时,传输数据的基本形式是二进制流,要想使用网络框架的API来传输结构化的数据,必须得先实现结构化的数据和字节流之间的双向转换。将结构化数据转换成字节流的过程称为序列化,将字节流转换成结构化数据的过程称为反序列化。

序列化除了用于在网络上传输数据之外,还可以将结构化的数据保存在文本中,因为在文件内数据的形式也是二进制序列,和网络传输过程中的数据是一样的,所以序列化同样适用于将结构化数据保存到文本中。

怎么选择序列化实现?

我们有很多种通用的序列化实现方案,既包括了编程语言汇总内置的实现,也有各种开源方案。

当我们为项目选择合适的序列化方案时,可以考虑以下因素:

  1. 序列化后的数据易于人类阅读。
  2. 实现的复杂度是否足够低。
  3. 序列化和反序列化的速度越快越好。
  4. 序列化后的信息密度越大越好,即同样的一个结构化数据,序列化后占用的存储空间越小越好。
  5. 序列化和反序列化的过程都是安全的。

没有任何一种序列化方案可以满足上面所有条件,例如可读性和信息密度就是两个相悖的条件。

对于一些强业务类系统,例如电商、社交类的应用,它们业务复杂、需求变化快,但是对性能要求没有那么严苛,这种情况下,我们可以使用JSON这种实现简单、数据可读性好的序列化方案,方便后期接口调试和问题排查。

实现高性能的序列化和反序列化

有些中间件会对网络通信的性能要求比较高,例如消息队列,普通的序列化无法达到性能要求,这时,一般会选择定制实现高性能的转用序列化和反序列化方案,可以有效减少序列化后的字节长度。

例如,针对下面的数据内容:

User:
  name: "zhangsan"
  age: 23
  married: true

使用普通的JSON序列化方式,结果如下:

{"name":"zhangsan","age":"23","married":"true"}

我们可以考虑使用固定字段顺序的方式,在序列化后的内容中不必包含字段名,只需要字段值,结果如下:

03   | 08 7a 68 61 6e 67 73 61 6e | 17 | 01
User |    z  h  a  n  g  s  a  n  | 23 | true

上述序列化后的内容,我们按照name、age、married的固定顺序来序列化这三个属性。

可以看到同样的对象,JSON序列化后需要47个字节,采用特定方式序列化后的内容只需要12个字节。

专用的序列化方式更加高效,序列化出来的字节更少,在网络传输过程汇总的速度也更快,但确定是需要为每种对象类型定义专门的序列化和反序列化方法,实现过程复杂。

因此,针对序列化方案选型,大多数情况下, 选择一个高性能的通用序列化框架都可以满足要求,在性能可以满足需求的前提下,推荐优先选择JSON这种可读性好的序列化方法。如果我们需要超高的性能或者带宽非常有限,那么我们可以使用专用的序列化方法来提升性能,节省传输流量。

相关文章

  • Java基础学习之序列化

    序列化 将数据结构或对象转换成二进制串的过程。 序列化方案 Serializeble Java序列化方案 在Jav...

  • Android基础之序列化

    序列化 将数据结构或对象转换成二进制串的过程。 序列化方案 Serializeble Java序列化方案 在Jav...

  • 聊聊llbc Stream、序列化、反序列化

    返回目录在实际项目开发中,数据的序列化、反序列化会成为一个比较麻烦的问题,业界也有许多解决方案可以选择,包括jso...

  • Android序列化和反序列化开发精要

    Serializable - Java原生的序列化方案Parcelable - android提供的序列化方案 S...

  • iOS数据本地持久化方法总结

    在iOS开发中,有很多数据持久化的方案,本文章将介绍以下6种方案: plist文件(序列化)preference(...

  • Spark任务调优

    0x01 数据序列化调优 在进行RDD缓存和Shuffle过程时,Spark会将数据对象进行序列化,所以选择合适的...

  • DRF使用篇(三):序列化

    一.序列化和反序列化 序列化将数据库数据序列化为前端所需要的格式,并返回 反序列化将前端发送的数据反序列化为模型类...

  • Sharding-JDBC介绍

    架构与核心概念 1、数据源选择的解决方案 数据源选择的解决方案层次:DAO:AbstractRoutingData...

  • Protocol Buffer nano使用

    Protocol Buffer介绍 以下翻译自维基百科: Protocol Buffer是一套序列化数据结构的方案...

  • 数据传输优化之FlatBuffers

    下面介绍三个数据序列化的候选方案:• Protocal Buffers:强大,灵活,但是对内存的消耗会比较大,...

网友评论

      本文标题:怎么选择数据序列化方案?

      本文链接:https://www.haomeiwen.com/subject/caefrdtx.html