Различие между Microsoft Bond и Google Protocol Buffers

Недавно (январь 2015 г.) была выпущена Microsoft с открытым исходным кодом, их инфраструктура для работы с схематизированными данными. Во многих отношениях он похож на буфер протокола Google.

Каковы самые большие различия между этими двумя? Каковы плюсы и минусы, то есть, в каких ситуациях я хотел бы использовать один, а не другой? Конечно, я говорю не об очевидных вещах, таких как согласованность с другими проектами или уже существующими API, а скорее об особенностях обеих библиотек. Чтобы привести пример, Бонд имеет bonded<T> который, если я правильно помню, не имеет аналога в буферах протокола.

1 ответ

Решение

В целом, Bond имеет лучшую систему типов и поддерживает несколько протоколов.

В частности, плюсы:

  • Бонд поддерживает дженерики
  • Бонд имеет различные типы для представления коллекций: vector<T>, map<T>, list<T>
  • Бонд поддерживает ленивую десериализацию (bonded<T>)
  • Bond поддерживает несколько форматов (быстрый двоичный, компактный двоичный, XML, JSON) + маршалинг и транскодирование

Минусы:

  • Бонд не поддерживает разные типы для фиксированной и переменной целочисленной кодировки. В Bond способ кодирования целых чисел определяется форматом вывода (быстрый или компактный), но в буферах протокола существуют целочисленные типы, которые всегда имеют фиксированный размер: fixed32 а также fixed64,
  • Бонд не поддерживает типы объединений (oneof в протоколе буферов)
  • Бонд не имеет реализации Java (пока)

Я провел несколько тестов, и оказалось, что размер простых сообщений в двоичных форматах Bond и ProtoBuf примерно одинаков. Я сравнил время сериализации и десериализации с использованием библиотеки Bond и C# ProtoBuf: в моем случае Bond работал немного лучше, мой исходный код вы можете найти на GitHub

Подводя итог, я думаю, что лучше использовать Bond, когда вы работаете с некоторыми сложными типами данных или когда вам необходимо представлять одни и те же данные в разных форматах: например, хранить в виде двоичных файлов, но представлять как JSON и т. Д.

Другие вопросы по тегам