Sé que esta pregunta está un poco anticuada en este momento ... Creo que es muy importante mencionar que depende de cómo se vea su entorno cliente / servidor.
Si está pasando bytes varias veces sin inspección, como con un sistema de cola de mensajes o entradas de registro de transmisión al disco, entonces puede preferir una codificación binaria para enfatizar el tamaño compacto. De lo contrario, es un problema caso por caso con diferentes entornos.
Algunos entornos pueden tener una serialización y deserialización muy rápida hacia / desde msgpack / protobuf's, otros no tanto. En general, cuanto más bajo sea el lenguaje / entorno, mejor funcionará la serialización binaria. En los lenguajes de nivel superior (node.js, .Net, JVM), a menudo verá que la serialización JSON es realmente más rápida. Entonces, la pregunta es si su sobrecarga de red es más o menos limitada que su memoria / CPU.
Con respecto a los búferes msgpack vs bson vs protocolo ... msgpack es el mínimo de bytes del grupo, los búferes de protocolo son casi iguales. BSON define tipos nativos más amplios que los otros dos, y puede ser una mejor coincidencia con su modo de objeto, pero esto lo hace más detallado. Los buffers de protocolo tienen la ventaja de estar diseñados para transmitir ... lo que lo convierte en un formato más natural para un formato de transferencia / almacenamiento binario.
Personalmente, me inclinaría hacia la transparencia que JSON ofrece directamente, a menos que haya una clara necesidad de un tráfico más ligero. Sobre HTTP con datos comprimidos, la diferencia en la sobrecarga de la red es un problema aún menor entre los formatos.