Хотя может показаться заманчивым настроить конкретный алгоритм для вашей проблемы, он, вероятно, потребует неоправданного количества времени и усилий, в то время как стандартные методы сжатия незамедлительно обеспечат вам мощный импульс для решения проблемы потребления памяти.
«Стандартный» способ решения этой проблемы состоит в том, чтобы разделить исходные данные на небольшие блоки (например, 256 КБ) и сжимать их по отдельности. При доступе к данным в блоке вам необходимо сначала их декодировать. Следовательно, оптимальный размер блока действительно зависит от вашего приложения, то есть чем больше потоков приложений, тем больше блоков; с другой стороны, чем больше шаблон произвольного доступа, тем меньше размер блока.
Если вас беспокоит скорость сжатия / распаковки, используйте высокоскоростной алгоритм. Если скорость распаковки является наиболее важной метрикой (для времени доступа), что-то вроде LZ4 обеспечит вам скорость декодирования 1 ГБ / с на ядро , так что это дает вам представление о том, сколько блоков в секунду вы можете декодировать .
Если имеет значение только скорость декомпрессии, вы можете использовать вариант с высокой степенью сжатия LZ4-HC, который увеличит степень сжатия еще примерно на 30%, а также улучшит скорость декомпрессии.