У меня есть огромное количество данных в моей базе данных в формате:
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 000 000, исходя из предположения (которое необходимо проверить), что после десятичной запятой не должно быть более шести цифр. Второму и третьему образцам потребуется по шесть байтов.
затем я бы сжал с помощью gzip.
Попробуйте просто хранить их как двоичные числа. Это очень просто и очень быстро.
Каждое число будет использовать 4 байта, и это позволит использовать их непосредственно из вашего кода.
Или, если они вам нужны более точно, умножьте каждый компонент на предварительно определенное значение (которое может отличаться для каждого компонента) и сохраните как 32-разрядные целочисленные слова.