сжимать текст перед сохранением в базе данных MySQL - PullRequest
1 голос
/ 20 марта 2012

Я занимаюсь разработкой веб-приложения с использованием php и MySQL.Я сжимаю текст с помощью функции php gzcompress () перед сохранением в базе данных MySQL / сохранением сжатой формы текста в базе данных.Мой вопрос в том, что это нормально?хранить сжатую форму?Или этот метод создаст проблемы или нет для меня?Я сжимаю текст для экономии места на диске.

Ответы [ 3 ]

4 голосов
/ 31 мая 2017

Мой подход.Мне нужно было сохранить текст электронной почты в таблице MySQL.Тип столбца: TEXT.

Сжатие:

$compressed_string_for_db = base64_encode(gzcompress('big email text', 9));

Распаковка:

$email_text = gzuncompress(base64_decode($compressed_string_from_db));

Мой результат сжатия:

длина строки дохода: 41072

длина сжатой строки: 5312

3 голосов
/ 20 марта 2012

Честно говоря, я не вижу никаких практических преимуществ хранения сжатых текстов. Конечно, вы могли бы сэкономить немного места, но если ваш текст настолько большой, что вы получаете практическую выгоду от его сжатия, я думаю, вам нужно больше беспокоиться о том, что ЦП вашего сервера должен сжимать / распаковывать громоздкий текст всякий раз, когда посетитель посещает ваш страниц (и не говоря уже о поисковом тексте означает, что вы должны распаковать его для поиска).

2 голосов
/ 12 октября 2016

Я определенно вижу много практических преимуществ хранения сжатого текста ...
Сжатие gz быстрое, может передаваться в потоковом режиме и экономит много места в некоторых сценариях.

При практическом использовании в реальной жизни у меня используется около 50 МБ данных на 1000 записей, и я получаю миллионы записей.
Сжатый, я могу уменьшить это до 10 МБ на 1000 записей, что означает, что я плачу 1/5 от обычной платы за хранение данных своему облачному провайдеру.
Если это не практическая выгода, что еще?;)

Кроме того, считали ли вы, что загрузка процессора gzip минимальна? gzip уже является стандартом HTTP, stackoverflow отправляется в ваш браузер в потоке gzip, как почти любой веб-сайт, если вы не используете браузер с 1985 года.
Я предполагаю, что доступ к диску (особенно к жестким дискам) оказывает большее влияние, чем gzip, на получение данных. Таким образом, уменьшая объем данных за счет сжатия, вы фактически можете повысить производительность.

Вот код, который я использую для сжатия данных в совместимом с MySQL формате:
Вот мой код для этого сценария, для распаковки вы также можете использовать PHP и просто извлечь первые 4 байта.
Вывод mysql:

mysql : "select hex(compress('1234512345'))"
0A000000789C3334323631350411000AEB01FF

PHP-эквивалент:

$string="1234512345";
$data=gzcompress($string);
$len=mb_strlen($string);
$head=pack('V',$len);

echo($head);
echo($data);

Вывод PHP:

php test.php  | hexdump -C
00000000  0a 00 00 00 78 9c 33 34  32 36 31 35 04 11 00 0a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...