2008-10-25 3 views
3

У меня есть клиентское серверное приложение, которое отправляет XML через TCP/IP от клиента к серверу, а затем передает его другим клиентам. Как я могу узнать, какой минимальный размер XML должен гарантировать улучшение производительности путем сжатия XML, а не отправки по регулярному потоку.Сжатие XML-показателей.

Есть ли хорошие показатели на этом или примерах?

ответ

2

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

Другой вариант - обмен файлами в двоичном формате; BinaryFormatter или NetDataContractSerializer - это простые параметры, но оба они, как известно, несовместимы (например, с java) по сравнению с xml.

Другим вариантом будет переносимый двоичный формат, такой как «буферы протокола» Google. Я поддерживаю версию .NET/C# под названием protobuf-net. Он предназначен для совместимости с обычными подходами .NET (например, XmlSerializer/DataContractSerializer), но намного меньше, чем xml, и требует значительно меньшей обработки (CPU и т. Д.) Для сериализации и десериализации.

This page показывает некоторые номера для XmlSerializer, DataContractSerializer и protobuf-net; I думал включил статистику с/без сжатия, но они, кажется, исчезли ...

[обновление] Я должен был сказать - в проекте QuickStart есть пример TCP/IP.

0

Обязательно сжимайте его всегда.

Это сэкономит вам пропускную способность для чего-либо более чем с 2 тегами.

+0

, но нет накладных расходов путем застежки-молнии и распаковки ?? – leora 2008-10-25 14:44:52

0

Чтобы решить, имеет ли какое-либо преимущество сжатие, вам нужно выполнить некоторые тесты, используя фактический или ожидаемый объем ожидаемого потока данных, который будет проходить через вашу систему.

Надеюсь, это поможет.

1

Свободной метрикой было бы сжать что-либо большее, чем один пакет, но это просто nitpicking.

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

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

0

В тестах, которые мы сделали, мы нашли огромное преимущество, однако имейте в виду последствия CPU.

В одном проекте, над которым я работал, мы отправляли на большое количество данных XML (> 10 мегабайт) клиентам, работающим с .NET. (Я не рекомендую это как способ сделать что-то, это только та ситуация, в которой мы оказались!) Мы обнаружили, что по мере того, как XML-файлы получили достаточно большие библиотеки Microsoft XML не смогли разобрать файлы XML (машины закончились памяти, даже на машинах> 1 гигабайт). В конечном итоге менялось изменение библиотек синтаксического анализа XML, но до этого мы включили сжатие GZIP на переданные нами данные, которые помогли нам разобрать большие документы. На наших двух серверах websphere, основанных на Linux, мы смогли сгенерировать XML, а затем gzip довольно легко. Я думаю, что с 50 пользователями, делающими это одновременно (загрузка примерно от 10 до 20 из этих файлов), мы смогли сделать это нормально, причем около 50% CPU.Сжатие XML, казалось, было лучше обработано (например, парсинг/cpu time) на серверах, чем на .net gui, но это, вероятно, было связано с вышеупомянутыми недостатками используемых библиотек Microsoft XML. Как я уже упоминал, есть более доступные библиотеки, которые быстрее и используют меньше памяти.

В нашем случае мы также получили значительные улучшения в размере - мы сжимали файлы размером 50 мегабайт в некоторых случаях до примерно 10 мегабайт. Это, очевидно, помогло повысить производительность сети.

Поскольку мы были обеспокоены воздействием и имели ли это другие последствия (наши пользователи, казалось, делали что-то в больших волнах, поэтому мы были обеспокоены тем, что у нас закончилось CPU), у нас была переменная конфигурации, которую мы могли бы используйте для включения/выключения gzip. Я бы рекомендовал вам это сделать.

Другое дело: мы также закрепили файлы XML до их сохранения в базах данных, и это сэкономило около 50% пространства (файлы XML варьировались от нескольких К до нескольких мегабайт, но в основном довольно небольшие). Вероятно, легче сделать все, чем выбрать определенный уровень, чтобы отличать, когда использовать сжатие или нет.

 Смежные вопросы

  • Нет связанных вопросов^_^