У кого-нибудь есть информация о характеристиках производительности протокольных буферов по сравнению с BSON (двоичный JSON) или по сравнению с JSON в целом?
- Размер провода
- Скорость сериализации
- Скорость десериализации
Они кажутся хорошими двоичными протоколами для использования через HTTP. Мне просто интересно, что было бы лучше в долгосрочной перспективе для среды C #.
Вот некоторая информация, которую я читал о BSON и буферах протокола .
c#
json
comparison
protocol-buffers
bson
Джефф Фрикаделька Ян
источник
источник
Ответы:
Экономия - это еще одна альтернатива, подобная протоколу.
Сообщество Java дает хорошие результаты по сериализации / десериализации и размеру проводов этих технологий: https://github.com/eishay/jvm-serializers/wiki
В общем, JSON имеет немного больший размер проводов и немного хуже DeSer, но выигрывает в повсеместности и способности легко интерпретировать его без исходного IDL. Последний пункт - это то, что пытается решить Apache Avro , и он превосходит оба с точки зрения производительности.
Microsoft выпустила пакет C # NuGet Microsoft.Hadoop.Avro .
источник
В этом посте сравниваются скорости и размеры сериализации в .NET, включая JSON, BSON и XML.
http://james.newtonking.com/archive/2010/01/01/net-serialization-performance-comparison.aspx
источник
Вот несколько недавних тестов, показывающих производительность популярных сериализаторов .NET.
В тестах Горения Монахов показывают производительность сериализации простой ПОКИ в то время как комплексные Northwind тесты показывают , объединенные результаты сериализации строки в каждой таблице Борого набора данных Microsoft.
Обычно буферы протокола ( protobuf-net ) примерно в 7 раз быстрее, чем самый быстрый сериализатор библиотеки базовых классов в .NET (XML DataContractSerializer). Он также меньше, чем у конкурентов, поскольку он также в 2,2 раза меньше, чем самый компактный формат сериализации Microsoft (JsonDataContractSerializer).
Сериализаторы текста ServiceStack наиболее близки к производительности двоичного protobuf-net, где его сериализатор Json всего в 2,58 раза медленнее, чем protobuf-net.
источник
буферы протокола предназначены для проводов:
JSON - это просто текст, и его нужно проанализировать . Подсказка: для кодирования "миллиарда" int в него потребуется довольно много символов: Billion = 12 char (длинная шкала), в двоичном формате он умещается в uint32_t. А как насчет попытки кодирования double? это было бы НАМНОГО хуже.
источник
the wire
означает просто сеть. Сейчас, когда мы используем так много беспроводных сетей, это может показаться странным.