Лучшая библиотека сжатия / формат для сжатия на лету и бинарный поиск? - PullRequest
2 голосов
/ 11 февраля 2011

Я ищу библиотеку / формат сжатия со следующими возможностями:

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

Контекст: я пишу приложение на C ++, которое прослушивает входящие данные, нормализует их, а затем должно сохранить нормализованный вывод на диск. Данные уже сжимаются довольно хорошо, когда я запускаю gzip для файлов вручную. Тем не менее, объем входящих данных потенциально огромен, и я хотел бы сделать сжатие на лету. С каждой записью в файле связана временная метка, и меня может интересовать только кусок данных между временем X и временем Y, поэтому чтобы быстро найти этот фрагмент, я хотел бы иметь возможность двоичного поиска. И даже повторить в обратном порядке, если это возможно. Выделяются ли какие-либо конкретные библиотеки / форматы сжатия как особенно подходящие для моего проекта? Я обнаружил библиотеки, которые удовлетворяют # 1, но часто работают ли # 2 или # 3 без документов.

1 Ответ

1 голос
/ 11 февраля 2011

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

...