Есть ли в MySQL функция, которая будет сжимать результаты, возвращаемые запросом? - PullRequest
1 голос
/ 01 марта 2009

Я бы хотел сжать результаты, если они достигли определенного числа строк.

Клиентская программа затем распаковывает результат и обрабатывает.

Это рабочий стол с архитектурой клиент / сервер, некоторые клиенты подключаются через vpn.

Когда клиент подключается, он отправляет данные на сервер. После того как сервер завершит обработку, клиент загрузит обновленные данные с сервера.

Клиенты находятся в нескольких городах, в среднем 50-100 км. далеко. Они будут подключаться через Интернет, используя VPN. Но это первоначальный план, еще не реализованный с использованием vpn или других средств.

Ответы [ 3 ]

3 голосов
/ 01 марта 2009

Существует функция COMPRESS , которую можно использовать для сжатия строк в двоичные строки. Однако, в зависимости от ваших потребностей, это может не решить проблему, особенно потому, что записи базы данных обычно уже очень компактны по своей природе, поэтому я не уверен, какую выгоду вы получите от попыток дальнейшего сжатия набора результатов.

Одна вещь, с которой вам нужно быть осторожным, это преждевременная оптимизация. Часто вы можете вносить ненужную сложность и фактически снижать производительность, если вы пытаетесь оптимизировать, прежде чем правильно определить фактические узкие места, а не просто вслепую выявлять возможные.

В этом ключе я хотел бы спросить, действительно ли вы выявили узкое место в своем заявлении? Если да, то где именно он и какова его природа? В какой среде вы работаете? Это веб-разработка или рабочий стол с архитектурой клиент / сервер?

Возможно, вы сможете добавить эту дополнительную информацию к своему вопросу, и тогда вам будет легче помочь?

2 голосов
/ 01 марта 2009

Большинство клиентов MySQL поддерживают сжатие (опция --compress)

Но вы уверены, что хотите сделать это в MySQL? Это больше похоже на задачу для веб-сервера или сервера приложений?

Большинство веб-серверов поддерживают сжатие ответов с помощью gzip и т. Д.

Есть ли у вас еще какие-то подробности о том, что это за проблема и какие платформы и инструменты вы используете?

1 голос
/ 02 марта 2009

MySQL поддерживает сжатый протокол, но в зависимости от того, какие инструменты вы используете для подключения к базе данных, способ использования протокола будет отличаться.

Сжатие

Сжатие используется, если и клиент, и сервер поддерживает сжатие zlib, и клиент запрашивает сжатие.

Сжатый заголовок пакета: пакет длина (3 байта), номер пакета (1) байт) и длина несжатого пакета (3 байта). Несжатый пакет Длина - это количество байтов в оригинальный, несжатый пакет. Если это ноль, то данные не сжатая.

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

( ссылка ) * +1017 *

Если вы предоставите дополнительную информацию о том, как вы подключаетесь, мы можем предоставить вам дополнительную информацию. Например, в параметрах соединения Connector / ODBC есть флаг, который будет «Использовать сжатый протокол клиент / сервер».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...