Лучший способ кодировать данные

У меня есть огромное количество данных в моей базе данных в формате:

lat;lon;speed;sec:lat;lon;speed;sec......

например:

 53.284534;50.227268;67;0:53.285481;50.226627;68;6:53.286429;50.226042;66;12:.......

формат — широта, долгота, скорость, число секунд от начала.
длина каждой строки от 1000 до 100000.
Я пытаюсь сжать его, прежде чем положить в базу данных с помощью gzcompress () и base64_encode ().
В случае длины исходной строки 7607 символов после gzcompress и base64_encode это будет 3444,
таким образом, сжатие составляет 50%.
Есть ли более эффективный способ сжатия строк, как это?

1

Решение

Существует четкая корреляция от образца к образцу. Я вычел бы из каждого образца предыдущий образец, за исключением, конечно, первого. Я бы закодировал каждую разницу как целое число переменной длины (не в виде текста, а в двоичном формате). Для широты и долготы я умножил бы на 1 000 000, исходя из предположения (которое необходимо проверить), что после десятичной запятой не должно быть более шести цифр. Второму и третьему образцам потребуется по шесть байтов.

затем я бы сжал с помощью gzip.

1

Другие решения

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

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

1

По вопросам рекламы [email protected]