Буферы протокола по сравнению с JSON или [закрытым] BSON

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

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

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

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

90
задан StaxMan 11 January 2011 в 06:57
поделиться

4 ответа

Thrift также является альтернативой буферам протоколов.

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

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

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

.
64
ответ дан 24 November 2019 в 06:59
поделиться

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

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

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

22
ответ дан 24 November 2019 в 06:59
поделиться

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

alt text

alt text

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

74
ответ дан 24 November 2019 в 06:59
поделиться

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

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

enter image description here

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

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

50
ответ дан 24 November 2019 в 06:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: