他们核心区别在于,bson在json基础上增加了数据日期、文档类型,并支持二进制传输;而protocol buffer则对传输数据和结构定义进行了分离。一般来说与浏览器通信通常使用json,如果需要跨语言通信,且考虑效率,则可以采用protocol buffer。
JSON
特点:
文本存储和传输,结构与数据一体,肉眼可识别
优点:
- 通用性好,各种语言都支持;
- 可用于存储
缺点:
- 采用文本传输,占用体积大,传输性能差
- 序列化,反序列化性能较差
- 不支持二进制,日期等数据类型
Bson
特点:
采用二进制传输,结构与数据一体
优点:
- 在json基础上增加二进制和日期等格式;
- 传输性能较好
- 序列化,反序列化性能较好
缺点:
- 多语言支持一般
- 传输数据与结构定义仍然在一体
Protocol Buffer
特点:
结构定义与传输数据分离,只传输二进制数据
优点:
- 用protoc工具可以根据proto文件生成各种语言对应代码
- 字段被编号,新添加的字段不影响老结构,解决了向后兼容问题。
- 二进制无结构消息,效率高,性能高。
缺点:
- 二进制格式,可读性差(抓包dump后的数据很难看懂)
- 默认不具备动态特性