我可以使用二进制的Data.Binary附加到文件吗?

时间:2018-09-03 22:43:54

标签: haskell binary append disk

我有一个[Something]值,我想每 n 秒将此值保存到磁盘上。

但是,该值可能包含大量元素,并且每次写入完整值都可能导致不必要的磁盘磨损。因此,我希望改为附加到文件上。

列表本身([Something])始终会被附加,并且不会以任何方式修改其“原始”内容。

是否可以为此目的使用Data.Binary

我确实找到了appendhttp://hackage.haskell.org/package/binary-0.8.6.0/docs/Data-Binary-Builder.html#v:append)函数,但这似乎无法满足上述用例。

如果不可能,是否可以使用其他库?

1 个答案:

答案 0 :(得分:1)

您的列表有多大?如果是数百万,那么有条件追加是可行的,前提是您能够在每一轮中提取新添加的元素。如果是数千或更少,那么每次都写它们可能更容易。

看来您可以自己附加到文件。也就是说,encode将新添加的元素ByteStringappend到文件。 (确保确保一次只有一个进程在执行该操作!)

然后在读取文件时,迭代decodeOrFail,将上一次调用中未使用的输入反馈给它,直到您解析所有内容并到达空的ByteString


有些正交,我发现使用safe-copy非常有帮助。它使序列化向前/向后兼容非常容易。

如果您不介意一直写所有数据,那么acid-state为您的数据提供了非常有力的保证。它还与安全复制集成。