Как сжать метку времени Unix?
Отметка времени Unix, выраженная в секундах, выглядит следующим образом (конечно, округленная)
1409134929
Проблема заключается в том, что наша система ограничена памятью, и мы каждую секунду генерируем и храним метку времени. К ним обращаются случайным образом один за другим, поэтому "целое" сжатие не будет работать.
Smaz не поможет, так как он сжимает только короткие строки, и LZMA не собирается его обрезать.
Существует ли какой-либо специальный алгоритм сжатия или словарь для достижения этого типа сжатия?
1 ответ
Не используйте строку, но двоичное значение. Метка времени POSIX (EPOCH) хранится в 32-битном значении (по крайней мере, на 32-битном ПК).
Хранение вашей временной метки в строке может занять 9x8bit=72bit или до 9x32bit =288bit, если тип char использует 32-битный слот памяти.
Ваше решение состоит в том, чтобы получить двоичную форму вашей строки.
Вот что вы получите в двоичном виде:
Если вы используете язык C, обратите внимание на функцию mktime.