Буферы протокола в сравнении с JSON или BSON
-
18-09-2019 - |
Вопрос
Есть ли у кого-нибудь какая-либо информация о характеристиках производительности буферов протокола по сравнению с BSON (двоичный JSON) или по сравнению с JSON в целом?
- Размер провода
- Скорость сериализации
- Скорость десериализации
Они кажутся хорошими двоичными протоколами для использования через HTTP.Мне просто интересно, что было бы лучше в долгосрочной перспективе для среды C #.
Вот некоторая информация, которую я читал на БСОН и Буферы протокола.
Решение
Бережливость это также другая альтернатива, подобная буферам протокола.
От сообщества Java есть хорошие тесты по сериализации / десериализации и размеру проводимости этих технологий: https://github.com/eishay/jvm-serializers/wiki
В целом, JSON имеет немного больший размер wire и немного худший DeSer, но выигрывает в повсеместности и способности легко интерпретировать его без исходного IDL.Последний пункт - это то, что Apache Авро пытается решить, и это превосходит оба варианта с точки зрения производительности.
Microsoft выпустила пакет C # NuGet Майкрософт.Hadoop.Авро.
Другие советы
Этот пост сравнивает скорости и размеры сериализации в .NET, включая JSON, BSON и XML.
http://james.newtonking.com/archive/2010/01/01/net-serialization-performance-comparison.aspx
Вот такие некоторые недавние контрольные показатели показ производительности популярных сериализаторов .NET.
В Ориентиры " Горящих монахов " покажите производительность сериализации простого POCO, в то время как всесторонний Ориентиры Северного Ветра покажите объединенные результаты сериализации строки в каждой таблице набора данных Northwind от Microsoft.
В основном протокольные буферы (протобуф-сеть) находится вокруг 7x быстрее, чем самый быстрый сериализатор библиотеки базового класса в .NET (XML DataContractSerializer).Это также меньше, чем у конкурентов, так как это также 2.2x меньше, чем самый компактный формат сериализации Microsoft (JsonDataContractSerializer).
Текстовые сериализаторы ServiceStack наиболее близки к соответствию производительности двоичной protobuf-сети, где ее Сериализатор Json это всего лишь 2.58x медленнее, чем protobuf-net.
буферы протокола предназначены для проводного:
- очень маленький размер сообщения - одним из аспектов является очень эффективное целочисленное представление переменного размера.
- Очень быстрое декодирование - это двоичный протокол.
- protobuf генерирует суперэффективный C ++ для кодирования и декодирования сообщений -- подсказка:если вы закодируете в него все переменные числа или элементы статического размера, он будет кодировать и декодировать с детерминированной скоростью.
- Он предлагает ОЧЕНЬ богатую модель данных - эффективное кодирование очень сложных структур данных.
JSON - это просто текст, и он должен быть разобранный.подсказка:кодирование "миллиарда" int в нем заняло бы довольно много символов:Миллиард = 12 символов (длинная шкала), в двоичном формате он помещается в uint32_t Теперь, как насчет попытки закодировать double ?это было бы НАМНОГО, НАМНОГО хуже.