2009-03-24 2 views
0

У меня есть проект, где нам нужно приложение для отправки данных в сжатом виде в базу данных и в другое приложение. Сжатие может использовать алгоритм, такой как GZIP или ZLIB.Использование сжатия данных при обмене данными между приложением и базой данных?

Может ли кто-нибудь указать мне какую-нибудь помощь, особенно для компонента VCL (или ActiveX), который может сжимать трафик данных между коммуникационным приложением и базой данных?

Просто подумайте о чате или приложении IM, но используйте сжатие между каждым трафиком данных.

Моя среда:
- Delphi 7 или BDS 2006
- будет использовать Indy для связи между приложением
- будет использовать ADO для обмена данными приложения в базе данных
- TCP/IP или HTTP будет использоваться в качестве протокола

Спасибо,
Dels

ответ

3

вы можете использовать любой алгоритм сжатия для сжатия байтов или поток, если вы используете Indy. Подобно сборке в сжатии ZLib. Это потому, что вы контролируете обе стороны связи. Это происходит при подключении к базе данных. Вы можете сжимать только, если сервер базы данных понимает сжатие. Обычно вы не сжимаете, но пусть это будет обрабатываться драйверами базы данных, которые вы используете. Так что это зависит от вариантов, которые они предлагают.

http://www.swissdelphicenter.ch/torry/showcode.php?id=1617 является примером того, как сжимать поток с помощью ZLib Delphi. Сжатие потока для отправки с Indy примерно одинаково.

+0

любые компоненты и примеры как предложение? – Dels

+0

+1 - Я использовал такой метод несколько раз с большим успехом, однако не обязательно использовать Indy. Synapse отлично работает и в этом scenerio. – skamradt

+0

И вы можете сжимать данные в базу данных, если вы поместите данные в поле BLOB. Вы просто не сможете обрабатывать данные вне своих приложений. – skamradt

3

Я не знаю, как сжать данные во время передачи, и чтобы база данных автоматически понимала и распаковывала ее на другом конце, просто чтобы сэкономить на пропускной способности, если это то, о чем вы говорите. И я бы рекомендовал только сжатие данных для отправки в вашу базу данных, если это большой BLOB или блок текста. Если это так, просто сжимайте его, как упоминал Ларс, и сохраните сжатый результат в виде поля BLOB. Но для обычных данных лучше оставить его распакованным и в обычном формате SQL. Таким образом, ваша база данных может оптимизировать свою память для скорости и правильно ее индексировать.