V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
haosamax
V2EX  ›  Java

[binary protocol | text protocol] 大家都采用什么序列化方式,自定义还是现成的轮子?

  •  
  •   haosamax · 54 天前 · 1574 次点击
    这是一个创建于 54 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在看《设计数据密集型应用》,看到编码部分,又想到框架中的自定义编码,有所想: 框架自定义的序列化方式很难用(字段值编码后拼接,无需编码名称),每次处理循环体都要手动处理操作字节,而且前后兼容,想问下大伙:1 、为什么搜索结果都说 binary protocol 比 textprotocol 快; 2 、项目用的 protocol 是? 3 、有没有一种可读性高并且速度快的编码方式?

    22 条回复    2021-01-12 15:06:19 +08:00
    oott123
        1
    oott123   53 天前 via Android
    overhead 低信息密度高自然就快,本前端表示除了 json 和 msgpack 别的都不用(
    chendy
        2
    chendy   53 天前
    1. 二进制少一轮字符串解码编码,表示数字和布尔用的字节更少,不考虑人类阅读可以用更紧凑的格式,代价就是直接拿给人类看基本看不懂
    2. binary 只想到 protobuf,text 只想到 json
    3. json 也不慢
    togou
        3
    togou   53 天前
    解析二进制比 字符串各种查找 配对肯定快 xml json 肯定比不过 pb tars 这种二进制协议啊
    PureWhiteWu
        4
    PureWhiteWu   53 天前
    binary
    haosamax
        5
    haosamax   53 天前 via iPhone
    各位说的是,为社么快这块理解了
    liian2019
        6
    liian2019   53 天前
    json 和 protobuf
    MeteorCat
        7
    MeteorCat   53 天前 via Android
    json 主要是冗余太多了,还套个 http 协议,但是可视化很方便,基本上有个 web 浏览器就能调试
    haosamax
        8
    haosamax   53 天前
    @liian2019 那如果更换为 protobuf,有没有 JavaBean 生成.proto 的工具
    icyalala
        9
    icyalala   53 天前
    protobuf 有强类型这个 json 比不了,但是单看性能,不一定比 json + gzip + simdjson 快到哪里去,而且 pb 还会生成一大坨代码出来难用的要死。但凡想要点可读性那选 json 没错。
    chenqh
        10
    chenqh   53 天前
    json 太好调试了呀,二进制的东西调试成本比 json 高太多了
    liian2019
        11
    liian2019   53 天前
    @haosamax 一般都是 protobuf 转 java
    xiangbohua
        12
    xiangbohua   53 天前
    没什么特别需求无脑 json,或者 xml 啊,搞协议的搞搞 protobuf 啥的吧。
    xiangbohua
        13
    xiangbohua   53 天前
    哎,参加工作的第一年,一个做虚拟化的公司,用的 Protobuf 当时烧了不少脑细胞
    12101111
        14
    12101111   53 天前
    但是现在 json 的序列化用上 SIMD 之后速度惊人, 实际上也是按照二进制的方式解析的, 只不过按弱类型操作 json 容易有 bug
    nthhdy
        15
    nthhdy   53 天前
    binary 是快,但基本上就意味着可读性低,一般必须得用工具才能看。对性能要求不高时,json 很好用,可读性好,编码本身的扩展性也好,改字段、类型很容易。
    haosamax
        16
    haosamax   53 天前 via iPhone
    @xiangbohua 内部系统 socket 通讯,自定义的协议用着有点 egg pain
    haosamax
        17
    haosamax   53 天前 via iPhone
    @liian2019 是的。如果迁移的话岂不是都得写一遍 proto 文件
    daimiaopeng
        18
    daimiaopeng   52 天前
    要看应用场景是什么,要是对流量要需求比较高的话,比如说网络游戏,那肯定用偏二进制方面的编码
    liian2019
        19
    liian2019   51 天前
    @haosamax 这个没有接触过,可以 google 看看有没有什么好的解决方案。一般协议应该也不会太多吧
    onepix
        20
    onepix   50 天前
    textprotocol 可以理解成是在 string 的通用的 binary protocol 基础上又封装了一层,我们平时说的使用 UTF8 还是 GB2312 就是这个 string 的 binary protocol 的实现,所以 textprotocol 会慢一拍啊
    haosamax
        21
    haosamax   50 天前 via iPhone
    @onepix 理解了
    SkyLine7
        22
    SkyLine7   49 天前
    json
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   5223 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:13 · PVG 10:13 · LAX 18:13 · JFK 21:13
    ♥ Do have faith in what you're doing.