首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据序列化的那些事

数据序列化的那些事

作者头像
luoxn28
发布2020-02-17 11:50:15
9110
发布2020-02-17 11:50:15
举报
文章被收录于专栏:TopCoderTopCoder

戳蓝字「TopCoder」关注我们哦!

编者注:关于数据序列化,首先要了解为什么需要序列化以及数据序列化的意义是什么,然后再了解下当前较为广泛的几种序列化方式。

为什么需要数据序列化呢?因为数据要“传输”,比如将数据网络通信传递给其他服务器,或者持久化到磁盘。那么传输为什么需要序列化呢?因为在内存中的数据,当前进程是知道数据格式和内容的,但是数据传输是二进制(或文本格式),所以需要有一个内存数据格式转换为二进制(或文本格式)的过程。数据序列化,可以进行数据压缩、数据格式多语言兼容等。下面就按照序列化的技术演变过程一起看下序列化的发展之路。

文本格式序列化

直接将数据转变为文本格式,也就是字符串形式的文本保存,如果一个数据存在多个字段可使用固定分隔符(比如",")分隔,该方案存储简单但是针对复杂对象比如嵌套数据,存储起来较为麻烦,并且无法表示本来就是二进制格式的数据,比如图片、视频等。

语言内置序列化

目前编程语言基本都内置了至少一种数据序列化机制,比如Java的 Serialization、Python的pickle等,语言内置的序列化机制大都和该语言绑定,也就是说反序列化也必须是该语言才行,因此很难做到跨语言的读取写入。

跨语言序列化

语言内置的序列化大都和语言绑定,因此有了应用范围广泛、跨语言的数据序列化格式,例如json、xml等,但是这些跨语言序列化方案存在的最大劣势就是有性能问题,并且无数据类型信息,同时数据序列化冗余较大,比如json会保存每个属性名字。除了json和xml这种跨语言序列化之外,还有类似于hession这种跨语言序列化(这是序列化框架本身支持跨语言,目前只会Python/Java/C++等)的机制,序列化数据是二进制格式,并且包含数据类型信息。

带schema描述序列化

带有schema描述的数据表示格式,通过统一化的schema描述,可约束每个字段的类型,进而为存储和解析数据带来优化的可能。此外,统一schema的引入,可减少属性名称重复存储带来的开销,同时,也有利于数据共享。带有schema描述的序列化常用的有Thrift、Protocol Buffers和Avro,它们一般被称为Language Of Data,使得跨语言序列化成为可能,并且它们提供了代码生成工具,方便为开发者生成各个语言的代码。Language Of Data具有特性如下:

  • 提供IDL(Interface Description language)用以描述数据schema,用来定义结构化或者非结构化数据;
  • 跨语言支持,至少支持Java、Python和C/C++
  • 数据编码压缩,比如字符串压缩和整数变长编码等;
  • 数据序列化兼容,保证序列化的向后兼容性,比如旧schema序列化的数据可由新schema反序列化,新schema序列化也可以由旧schema解析等。

关于protobuf为什么这么快可以参考文档:https://www.jianshu.com/p/72108f0aefca。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TopCoder 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档