感受下 protobuf 的力量

protobuf简介:

简单来讲, ProtoBuf 是结构数据序列化方法,可简单类比于 XML,其具有以下特点:

  • 语言无关、平台无关。即 ProtoBuf 支持 Java、C++、Python 等多种语言,支持多个平台
  • 高效。即比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单
  • 扩展性、兼容性好。你可以更新数据结构,而不影响和破坏原有的旧程序

使用protobuf背景:

由于推荐系统需要存储大量用户行为数据来丰富用户画像,实时数据必须要存到redis,导致内存资源进制,压缩存储必须要提上日程了!

redis 存储结构

目前使用的是 redis list 数据结构,一个list下200条数据,一条数据占 118 字节 (json格式)

转二进制存储结果对比

1000万条数据测试:

压缩了 58% !(value 结构越复杂越大,效果越好,如果本身就是基础类型,效果不会这么好

读取效率

压缩后肯定需要压测下读数据,虽然感觉读json和pb差不多,但是还是要用数据说话,直接上结果:

读取 50000条,每条200个元素,总共遍历1000万次 结构转化

结果 protobuf 16秒 FastJson 24秒

protobuf 解析到类居然比 fastjson 解析到类还要快8秒!!!!

结论

protobuf转二进制 除了在控制台看数据吃力些,需要写转换成json ,除此之外没有缺点。

番外

protobuf 还可用在java大类进行网络传输的效率提升,例如 用户画像需要存储的用户维度比较庞大,使用protobuf 会提高不少传输效率

分类:
开发工具
标签: