ITPub博客

首页 > 数据库 > 数据库开发技术 > 为什么要做序列化?

为什么要做序列化?

原创 数据库开发技术 作者:金融数士 时间:2024-08-31 13:59:32 0 删除 编辑

最近内部分享时,我问了一位新同学有关序列化的问题,得到的答案并不令人不满意。在我看来,序列化概念属于程序员的必知必会内容,对理解完整的IT技术栈还是蛮重要的,所以这里也记录下自己的理解,希望能帮到接触开发工作时间不长的朋友。


关于序列化,百度百科的定义是“序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程”。这个定义简洁明确,我觉得没问题,但后续百科上的对于序列化使用的解释就显得晦涩、冗长,而且非常有局限性。下面补充做个说明,解释下为什么需要序列化。


我们编写的计算机程序是静态的,只有被执行起来后,成为运行态的进程,这时才具备处理信息的能力。更具体的说,进程是在CPU和内存的资源支持下,将信息以不同的数据结构放置在内存中,通过CPU计算能力进行加工处理。


作为信息载体的数据结构,在不同的程序语言中有各自的定义方式,从简单类型如int,string到复杂些的数组、队列,再到面向对象等更高级的数据结构,相同或者近似的数据类型,在不同语言程序进程中所占用的内存大小没有统一标准,表述方式也存在差异。


这就出现一个问题,数据结构是具体存在于某个程序语言所定义的封闭体系内的,如何跨越单个体系处理信息,也就是,如何实现进程以及系统间的协同呢?这好比,每个国家都有自己的语言,但在跨国交流时就必须约定某种语言媒介才能进行交流。


有人可能会想到HTTP、TCP/IP等通讯协议,但通讯协议主要是解决网络传输可靠性和性能问题,还需要有技术对数据内容的可解释性负责。序列化本质就是为了解决这个问题而存在的,为了在不同技术的封闭体系之间进行交流而产生的。


交流的形式主要是两种一是借助网络,二是借助硬盘,两者本质都是信息交换的物理媒介。序列化协议是附着在物理媒介上的软媒介,具体技术有很多种,比较典型的有Google推出的Protocol Buffer (protobuf) 、大数据生态下的avro,甚至json也可以算一种序列化方式。从数据结构的表达能力上,protobuf是强类型描述的代表,json则是弱类型描述的代表。弱类型的可读性好但不严谨,强类型的相反。序列化技术展开还有很多内容,有时间我们再细聊。


最后总结一下,序列化的目的就是为了在封闭技术体系间进行协同,完成数据交换,而封闭技术体系的最小单元通常是进程。


#技术随笔


原文作者:金融数士;如有侵权,请联系管理员删除。

上一篇: 什么是幂等性?
请登录后发表评论 登录
全部评论

注册时间:2017-12-22

  • 博文量
    38
  • 访问量
    12401