Строковая кодировка таблицы против сжатия gzip - PullRequest
0 голосов
/ 12 сентября 2009

В моем приложении мне нужно хранить и передавать данные, которые содержат много повторяющихся строковых значений (например, имена объектов в XML-документе). У меня есть два предложенных решения:

  • A) создать таблицу строк для хранения вдоль документа, а затем использовать ссылки на индексы (используя многобайтовое кодирование) в теле документа, или
  • B) просто сожмите документ, используя gzip или аналогичный алгоритм сжатия.

Какой из них, вероятно, будет работать лучше с точки зрения скорости и размера данных? (Очевидно, что это зависит от качества реализаций, но предположим, что опция A динамически создает массив строк и разумным образом кодирует тело документа).

Кроме того, если вариант B, вы рекомендуете более потенциально подходящий метод сжатия, кроме gzip?

Ответы [ 3 ]

2 голосов
/ 12 сентября 2009

Простое использование gzip определенно будет самым простым и, вероятно, достаточным. Я бы порекомендовал попробовать таблицу строк, а затем распаковать ее, чтобы увидеть, получится ли немного лучшее сжатие, чем при использовании одного только gzip.

1 голос
/ 12 сентября 2009

gzip - это хороший алгоритм, когда стоимость передачи / хранения не слишком высока по сравнению со стоимостью процессорного времени. Вы можете получить лучшие коэффициенты сжатия с bzip2, 7zip и особенно для естественного языка, с различными алгоритмами PPM .

Конечно, важны не только вычисления (и статические, либо динамические требования к памяти) в зависимости от степени сжатия - различные форматы сжатия позволяют варьировать степени эффективного поиска произвольного доступа, декодирования потока с малой задержкой и объединения сжатых данных (например cat a.gz b.gz | gunzip -c совпадает с gunzip -c a.gz;gunzip -c b.gz

1 голос
/ 12 сентября 2009

Это будет зависеть от многих вещей, которые не рассматриваются в вашем сообщении.

Почему бы вам сначала не попробовать метод zip, поскольку его легко реализовать. Затем, если он соответствует вашим требованиям к скорости / сжатию, все готово и вы можете перейти к следующей функции.

...