Протокол буфера против JSON или BSON - PullRequest
86 голосов
/ 04 января 2010

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

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

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

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

Ответы [ 4 ]

74 голосов
/ 04 января 2010

В этом сообщении сравниваются скорости и размеры сериализации в .NET, включая JSON, BSON и XML.

alt text

alt text

http://james.newtonking.com/archive/2010/01/01/net-serialization-performance-comparison.aspx

63 голосов
/ 04 января 2010

Thrift - это еще одна альтернатива, подобная буферам протокола.

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

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

Microsoft выпустила пакет C # NuGet Microsoft.Hadoop.Avro ​​.

50 голосов
/ 18 августа 2010

Вот некоторые недавние тесты , показывающие производительность популярных сериализаторов .NET.

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

enter image description here

По существу буферы протокола ( protobuf-net ) примерно на 7x быстрее, чем самый быстрый Serializer библиотеки базовых классов в .NET (XML DataContractSerializer). Он также меньше, чем у конкурентов, так как он также 2,2x меньше, чем самый компактный формат сериализации Microsoft (JsonDataContractSerializer).

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

22 голосов
/ 04 января 2010
* Протоколы буфера

предназначены для передачи:

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

JSON - это просто текст, и он должен быть проанализирован .подсказка: для кодирования «миллиарда» int в него потребуется довольно много символов: Billion = 12 char (long scale), в двоичном виде он умещается в uint32_t. А как насчет попытки кодировать double?это было бы намного хуже.

...