Я знаю, що це питання трохи датоване на даний момент ... Я думаю, що це дуже важливо згадати, що це залежить від того, як виглядає середовище вашого клієнта / сервера.
Якщо ви передаєте байти кілька разів без перевірки, наприклад, із системою черги повідомлень або потоковими записами журналу на диск, то ви можете віддати перевагу двійковому кодуванню, щоб підкреслити компактний розмір. В іншому випадку це стосується конкретного випадку в різних середовищах.
Деякі середовища можуть мати дуже швидку серіалізацію та десеріалізацію до / з msgpack / protobuf, інші - не так вже й багато. Загалом, чим нижчий рівень мови / середовища, тим краще працюватиме двійкова серіалізація. У мовах вищого рівня (node.js, .Net, JVM) ви часто бачите, що серіалізація JSON насправді швидша. Тоді виникає питання, чи ваша мережа накладних витрат більш-менш обмежена, ніж ваша пам'ять / процесор?
Що стосується msgpack vs bson vs протокольних буферів ... msgpack - найменший байт групи, буфери протоколів приблизно однакові. BSON визначає більш широкі натурні типи, ніж інші два, і може краще відповідати вашому об'єктовому режиму, але це робить його більш багатослівним. Буфери протоколів мають перевагу в тому, що вони розроблені для передачі потоку ..., що робить його більш природним форматом для бінарного формату передачі / зберігання.
Особисто я б схилявся до прозорості, яку пропонує безпосередньо JSON, якщо тільки немає чіткої потреби у більш легкому русі. У HTTP із gzipped даними різниця між накладними витратами на мережу є ще меншою проблемою між форматами.