最近在看《设计数据密集型应用》,看到编码部分,又想到框架中的自定义编码,有所想: 框架自定义的序列化方式很难用(字段值编码后拼接,无需编码名称),每次处理循环体都要手动处理操作字节,而且前后兼容,想问下大伙:1 、为什么搜索结果都说 binary protocol 比 textprotocol 快; 2 、项目用的 protocol 是? 3 、有没有一种可读性高并且速度快的编码方式?
1
oott123 2021-01-08 10:32:26 +08:00 via Android
overhead 低信息密度高自然就快,本前端表示除了 json 和 msgpack 别的都不用(
|
2
chendy 2021-01-08 10:40:04 +08:00
1. 二进制少一轮字符串解码编码,表示数字和布尔用的字节更少,不考虑人类阅读可以用更紧凑的格式,代价就是直接拿给人类看基本看不懂
2. binary 只想到 protobuf,text 只想到 json 3. json 也不慢 |
3
togou 2021-01-08 12:11:04 +08:00
解析二进制比 字符串各种查找 配对肯定快 xml json 肯定比不过 pb tars 这种二进制协议啊
|
4
PureWhiteWu 2021-01-08 12:11:28 +08:00
binary
|
5
haosamax OP 各位说的是,为社么快这块理解了
|
6
liian2019 2021-01-08 14:04:58 +08:00
json 和 protobuf
|
7
MeteorCat 2021-01-08 14:28:00 +08:00 via Android
json 主要是冗余太多了,还套个 http 协议,但是可视化很方便,基本上有个 web 浏览器就能调试
|
9
icyalala 2021-01-08 14:35:06 +08:00
protobuf 有强类型这个 json 比不了,但是单看性能,不一定比 json + gzip + simdjson 快到哪里去,而且 pb 还会生成一大坨代码出来难用的要死。但凡想要点可读性那选 json 没错。
|
10
chenqh 2021-01-08 14:37:04 +08:00
json 太好调试了呀,二进制的东西调试成本比 json 高太多了
|
12
xiangbohua 2021-01-08 19:38:28 +08:00
没什么特别需求无脑 json,或者 xml 啊,搞协议的搞搞 protobuf 啥的吧。
|
13
xiangbohua 2021-01-08 20:00:46 +08:00
哎,参加工作的第一年,一个做虚拟化的公司,用的 Protobuf 当时烧了不少脑细胞
|
14
12101111 2021-01-08 21:30:06 +08:00
但是现在 json 的序列化用上 SIMD 之后速度惊人, 实际上也是按照二进制的方式解析的, 只不过按弱类型操作 json 容易有 bug
|
15
nthhdy 2021-01-08 22:33:44 +08:00
binary 是快,但基本上就意味着可读性低,一般必须得用工具才能看。对性能要求不高时,json 很好用,可读性好,编码本身的扩展性也好,改字段、类型很容易。
|
16
haosamax OP @xiangbohua 内部系统 socket 通讯,自定义的协议用着有点 egg pain
|
18
daimiaopeng 2021-01-09 16:56:25 +08:00
要看应用场景是什么,要是对流量要需求比较高的话,比如说网络游戏,那肯定用偏二进制方面的编码
|
20
onepix 2021-01-11 17:29:01 +08:00
textprotocol 可以理解成是在 string 的通用的 binary protocol 基础上又封装了一层,我们平时说的使用 UTF8 还是 GB2312 就是这个 string 的 binary protocol 的实现,所以 textprotocol 会慢一拍啊
|
22
SkyLine7 2021-01-12 15:06:19 +08:00
json
|