Протокол буферов в сравнении с JSON и BSON по


есть ли у кого-нибудь информация о характеристиках производительности буферов протокола против BSON (двоичный JSON) или против JSON в целом?

  • провод размере
  • скорость сериализации
  • десериализации скорость

Они кажутся хорошими двоичными протоколами для использования через HTTP. Мне просто интересно, что было бы лучше в долгосрочной перспективе для среды C#.

вот некоторая информация, которую я читал BSON и Протокол Буферы.

4 86

4 ответа:

бережливость это еще один протокол буферов, как альтернатива, а также.

есть хорошие тесты от сообщества Java по сериализации / десериализации и размеру провода этих технологий:https://github.com/eishay/jvm-serializers/wiki

В общем, JSON имеет немного больший размер провода и немного хуже DeSer, но выигрывает в повсеместности и способности легко интерпретировать его без исходного IDL. Последний пункт-это то, что Apache Avro пытается решить, и это бьет как с точки зрения производительности.

Microsoft выпустила пакет c# NuGet Microsoft.платформа Hadoop.Авро.

здесь некоторые недавние показатели отображение производительности популярных сериализаторов .NET.

The сжигание монахи показатели показать производительность сериализации простой POCO в то время как всеобъемлющий Northwind benchmarks показать объединенные результаты сериализации строки в каждой таблице набора данных Microsoft Northwind.

enter image description here

в основном буферы протокола (protobuf-net) составляет 7x быстрее, чем самый быстрый сериализатор библиотеки базовых классов в .NET (XML DataContractSerializer). Его также меньше, чем конкуренция, как это также 2.2 x меньше, чем Microsofts самый компактный формат сериализации (JsonDataContractSerializer).

текстовые сериализаторы ServiceStack наиболее близки к соответствию производительности двоичной protobuf-сети, где ее Сериализатор Json только 2.58 x медленнее, чем protobuf-чистая.

протокол буферов предназначен для провода:

  1. очень маленький размер сообщения-один аспект является очень эффективным целочисленным представлением переменного размера.
  2. очень быстрое декодирование - это двоичный протокол.
  3. protobuf генерирует суперэффективный C++ для кодирования и декодирования сообщений -- подсказка: если вы кодируете все var-целые числа или статические элементы размера в него, он будет кодировать и декодировать с детерминированной скоростью.
  4. он предлагает очень богатую модель данных -- эффективное Кодирование очень сложных структур данных.

JSON-это просто текст и он должен быть парсится. подсказка: кодирование" миллиарда " int в него займет довольно много символов: Billion = 12 char (длинная шкала), в двоичном формате он вписывается в uint32_t теперь как насчет попытки кодировать двойной? это было бы намного хуже.