Храню большие наборы 32-битныйх целых чисел, сортированные по возрастанию. Сейчас, не долго думая, просто пишу по 4 байта на каждое. С ростом системы объём файловых данных стал ощутимым, бэкапы в облака стали стоит заметную копейку.
Т.к. единственная задача - последовательное чтение этих целых, то представляю, что можно заметно сократить объём данных, если записывать только первое значение целиком + последовательные инкременты, которые могут умещаться и в 1-2-3 байта.
Вопросы:- наверняка есть известный формат/алгоритм сжатия подходящий для описанной ситуации – какой?
- надо ли, и как - заморачиваться на контроль целостности данных?
Upd. Пока оптимальным кажется такой вариант, блоками по 4 инкремента с одним байтом в начале для указания длинн этих инкрементов. Так сохраняется грануляция до целых байтов:
01010101 01010101 01010101 01010101 - начальное значение
10110101 - b - сколько байт в следующих 4 блоках
(10 11 01 01 = 2, 3, 1, 1)
01010101 01010101 - inc - инкремент
01010101 01010101 01010101 - inc
01010101 - inc
01010101 - inc
Следующий блок из 4 инкрементов:
11011101 - b - (11 01 11 01 = 3, 1, 3, 1)
01010101 01010101 01010101 - inc
01010101 - inc
01010101 01010101 01010101 - inc
01010101 - inc
...
В конце файла блок нулевые длины инкрементов, если те лишние.