具有公共元素的大型数据结构的内存高效序列化

时间:2015-04-21 17:48:33

标签: memory serialization ocaml

假设数据结构如下:

type data = A of a_struct | B 

and a_struct = { s : string ; cross : data list ; down : data list }

其中交叉元素基本上是由包含向下元素的树复制的。由于内存使用(几GB),使用yojson序列化这样一棵树的大型实例(~250MB)会破坏我的系统。这可能是因为json不知道在树中共享多个副本。我对S-Expressions也有同样的看法。

有没有办法以更接近OCaml内部表示的格式进行序列化,还是我必须自己压缩数据?

2 个答案:

答案 0 :(得分:1)

Core binprot在太空中非常有效,但不支持共享。据我所知,目前只有Marshal模块支持共享,但它不是很稳定,因为它可以改变每个不同版本的编译器的格式。如果它对你不重要,那么它可能是一个不错的选择。

答案 1 :(得分:0)

Marshal模块默认保留共享。 (您可以用旗帜将其关闭。)