找回密码
 立即注册
查看: 166|回复: 5

如何解析超长的protobuf(大于512MB)?

[复制链接]
发表于 2024-7-15 17:23 | 显示全部楼层 |阅读模式
如何解析超长的protobuf(大于512MB)?
发表于 2024-7-15 17:24 | 显示全部楼层
如果客户端是java代码的话,可以在protobuf文件中加上这句 option java_multiple_files = true;
发表于 2024-7-15 17:25 | 显示全部楼层
不管是不是protobuf ,512M的长度肯定是系统设计问题,按照正常的正确的架构设计,是绝对不允许出现这么长的串的
发表于 2024-7-15 17:25 | 显示全部楼层
一般来说先问你要解决什么问题?设计实现方案为什么要序列化超过 512 MiB 的数据?

如果单纯回答如何解析,那就直接解析超大的对象咯,缺什么补什么。缺内存补内存,计算速度不够升级 CPU 呗。
发表于 2024-7-15 17:26 | 显示全部楼层
不要用protobuf或者JSON解析这种数据比较好,以我的经验来说,就算能成功,也会创造出非常多的碎片对象,占用大量的内存。
如果是一个或者少量二进制数据(每个都比较大)夹杂元数据构成的数据结构,可以考虑将二进制数据拼起来放在一起,将每段数据的开始位置和长度信息以及其他元数据构造一个protobuf放在开头,这样在各种意义上都比较好。
如果是一个巨大的对象数据那样的,那可能也没有太好的办法,可以考虑下是不是可以流式传输流式处理,系统压力会低一些。
发表于 2024-7-15 17:26 | 显示全部楼层
protobuf 官方指南里有关于large data sets的指南:
Protocol Buffers are not designed to handle large messages. As a general rule of thumb, if you are dealing in messages larger than a megabyte each, it may be time to consider an alternate strategy.
https://developers.google.com/protocol-buffers/docs/techniques#large-data
不过这并不意味着不可以用protobuf序列化和反序列化大数据集。
由于protobuf不支持random access文件,所以大protobuf带来的比较大的问题是需要把整个protobuf文件先读到内存里。如果在内存资源丰富的情况下这并不是问题(如果有读取时间要求可以缓存读取结果)。
如果是在移动设备这种内存资源紧张的应用场景下,可以考虑不要把整个数据结构序列化成一个protobuf而是把每个子结构序列化成一个protobuf文件。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-2-23 19:45 , Processed in 0.102410 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表