Могу ли я добавить файл, используя двоичный файл Data.Binary? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть значение [Something], я хотел бы сохранять это значение на диск каждые n секунд.

Однако это значение может иметь большое количество элементов, и запись полного значения каждый раз может привести к ненужному износу диска. Поэтому вместо этого я хочу добавить файл.

Сам список ([Something]) всегда будет добавляться, и его «оригинальный» контент не будет изменен каким-либо образом.

Можно ли использовать Data.Binary для этой цели?

Я нашел функцию append (http://hackage.haskell.org/package/binary-0.8.6.0/docs/Data-Binary-Builder.html#v:append)), но, похоже, она не соответствует описанному выше варианту использования.

Если это невозможно, могу ли я использовать альтернативную библиотеку?

1 Ответ

0 голосов
/ 06 сентября 2018

Насколько велик ваш список? Если это миллионы, имеет смысл добавить, при условии, что вы сможете извлекать вновь добавленные элементы в каждом раунде. Если их тысячи или меньше, то, вероятно, проще каждый раз писать их все.

Похоже, вы могли бы самостоятельно добавить файл. То есть кодирует вновь добавленные элементы в ByteString и добавляет их в файл. (Сделайте уверенным , что только один процесс делает это одновременно!)

А затем при чтении файла итерируйте decodeOrFail, передавая ему неизрасходованный ввод из предыдущего вызова, пока вы не проанализируете все и не получите пустой ByteString.


Несколько ортогонально, я нашел, что использование safe-copy очень полезно. Это позволяет сделать сериализацию прямой / обратной совместимости очень простой.

Если вы не возражаете писать все данные целиком, то acid-state дает вам очень надежные гарантии относительно ваших данных. Он также имеет интеграцию с безопасным копированием.

...