如何在Haskell中持久存储大数据以实现高效的反序列化

hvr*_*hvr 9 haskell

我面临着将大型数据集编译为磁盘表示的一般问题,可以将其有效地反序列化为本机内存中的Haskell数据结构.

更具体地说,我有大量的图形数据,其中包含与边和顶点相关的各种属性.在C/C++中,我已经将数据编译成mmap()能够最大效率的表示,目前导致大约200MiB的C结构(并且其文本表示大约为600 MiB).

在(GHC)Haskell,我能做的下一个最好的事情是什么?

fuz*_*fuz 6

使用包二进制文件.它提供了一个工具箱,可以有效地序列化和反序列化Haskell中的数据.binary可以为您自动派生所需的类型类的实例,但您也可以手动编写优化的实例.

引自原始描述页面:

二进制包

使用惰性ByteStrings的高效,纯二进制序列化.Haskell值可以编码为二进制格式,也可以编码为二进制格式,或通过网络发送.已经观察到超过1 G/sec的序列化速度,因此该库应该适用于高性能场景.