serialization marshalling protocol-buffers bond

serialization - Diferencia entre los bonos de Microsoft y los búferes de protocolo de Google



marshalling protocol-buffers (1)

Recientemente (enero de 2015) Microsoft open-sourced Bond , su marco para trabajar con datos esquematizados. En muchos aspectos es similar a los Protocol Buffers de Google.

¿Cuáles son las mayores diferencias entre los dos? ¿Cuáles son los pros y los contras, es decir, en qué situaciones me gustaría usar una, pero no la otra? Por supuesto, no estoy hablando de cosas obvias como la coherencia con otros proyectos o las API ya existentes, sino las características de ambas bibliotecas. Para dar un ejemplo, Bond ha bonded<T> que, si recuerdo bien, no tiene una contraparte en Protocol Buffers.


En general, Bond tiene un mejor sistema de tipos y soporta múltiples protocolos.

En particular, los profesionales son:

  • Bond soporta genéricos
  • Bond tiene diferentes tipos para representar colecciones: vector<T> , map<T> , list<T>
  • Bond admite la deserialización perezosa de tipo seguro ( bonded<T> )
  • Bond admite múltiples formatos (binario rápido, binario compacto, XML, JSON) + cálculo de referencias y transcodificación

Contras:

  • Bond no admite tipos diferentes para la codificación de enteros fijos y variables. En Bond, la forma en que se codifican los enteros está determinada por el formato de salida (rápido o compacto), pero en los búferes de protocolo, hay tipos de enteros que siempre tienen un tamaño fijo: fixed32 y fixed64 .
  • Bond no admite tipos de unión (uno de ellos en Protocol Buffers)
  • Bond no tiene implementación de Java (todavía)

Hice algunas pruebas, y parece que el tamaño de los mensajes simples en los formatos binarios de Bond y ProtoBuf son casi iguales. Comparé el tiempo de serialización y deserialización utilizando la biblioteca ProtoBuf de Bond y C #: en mi caso, Bond se desempeñó un poco mejor, puede encontrar mi código fuente en GitHub

Para resumir, creo que es mejor usar Bond cuando trabaja con algunos tipos de datos complejos o cuando necesita representar los mismos datos en diferentes formatos: por ejemplo, almacenar como binarios, pero exponer como JSON, etc.