Saya tahu bahwa pertanyaan ini agak ketinggalan zaman pada saat ini ... Saya pikir sangat penting untuk menyebutkan bahwa itu tergantung pada seperti apa lingkungan klien / server Anda.
Jika Anda meneruskan byte beberapa kali tanpa pemeriksaan, seperti dengan sistem antrian pesan atau entri log streaming ke disk, Anda mungkin lebih memilih pengkodean biner untuk menekankan ukuran kompak. Jika tidak, itu adalah masalah kasus per kasus dengan lingkungan yang berbeda.
Beberapa lingkungan dapat memiliki serialisasi dan deserialisasi yang sangat cepat ke / dari msgpack / protobuf, yang lain tidak begitu banyak. Secara umum, semakin rendah level bahasa / lingkungan, serialisasi biner yang lebih baik akan berfungsi. Dalam bahasa tingkat yang lebih tinggi (node.js, .Net, JVM) Anda akan sering melihat bahwa serialisasi JSON sebenarnya lebih cepat. Pertanyaannya kemudian menjadi apakah overhead jaringan Anda lebih atau kurang dibatasi daripada memori / cpu Anda?
Berkenaan dengan msgpack vs bson vs buffer protokol ... msgpack adalah byte terkecil dari grup, buffer protokol hampir sama. BSON mendefinisikan tipe asli yang lebih luas daripada dua lainnya, dan mungkin lebih cocok untuk mode objek Anda, tetapi ini membuatnya lebih bertele-tele. Buffer protokol memiliki keuntungan karena dirancang untuk streaming ... yang membuatnya menjadi format yang lebih alami untuk format transfer / penyimpanan biner.
Secara pribadi, saya akan bersandar pada transparansi yang ditawarkan JSON secara langsung, kecuali jika ada kebutuhan yang jelas untuk lalu lintas yang lebih ringan. Melalui HTTP dengan data yang di-gzip, perbedaan dalam overhead jaringan bahkan lebih sedikit menjadi masalah antar format.