Wiem, że to pytanie jest trochę przestarzałe w tym momencie ... Myślę, że bardzo ważne jest, aby wspomnieć, że zależy to od tego, jak wygląda środowisko klienta / serwera.
Jeśli przekazujesz bajty wiele razy bez inspekcji, na przykład w systemie kolejek komunikatów lub przesyłaniu strumieniowym wpisów dziennika na dysk, możesz preferować kodowanie binarne, aby podkreślić kompaktowy rozmiar. W przeciwnym razie jest to problem indywidualny w różnych środowiskach.
Niektóre środowiska mogą mieć bardzo szybką serializację i deserializację do / z msgpack / protobuf, inne nie tak bardzo. Ogólnie rzecz biorąc, im bardziej niski poziom języka / środowiska, tym lepsza serializacja binarna będzie działać. W językach wyższego poziomu (node.js, .Net, JVM) często zauważysz, że serializacja JSON jest faktycznie szybsza. Powstaje zatem pytanie, czy narzut sieci jest bardziej czy mniej ograniczony niż pamięć / procesor?
W odniesieniu do buforów msgpack vs bson vs protokołów ... msgpack jest najmniejszą liczbą bajtów w grupie, bufory protokołów są mniej więcej takie same. BSON definiuje szersze typy natywne niż pozostałe dwa i może lepiej pasować do twojego trybu obiektowego, ale to czyni go bardziej szczegółowym. Bufory protokołów mają tę zaletę, że są zaprojektowane do przesyłania strumieniowego ... co sprawia, że jest to bardziej naturalny format dla binarnego formatu przesyłania / przechowywania.
Osobiście skłaniałbym się ku przejrzystości, którą JSON oferuje bezpośrednio, chyba że istnieje wyraźna potrzeba lżejszego ruchu. W przypadku protokołu HTTP z danymi spakowanymi gzip różnica w obciążeniu sieci jest jeszcze mniejszym problemem między formatami.