Вопрос

Есть ли у кого-нибудь какая-либо информация о характеристиках производительности буферов протокола по сравнению с 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.

alt text

alt text

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

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

В Ориентиры " Горящих монахов " покажите производительность сериализации простого POCO, в то время как всесторонний Ориентиры Северного Ветра покажите объединенные результаты сериализации строки в каждой таблице набора данных Northwind от Microsoft.

enter image description here

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top