数据库是否使用自己的二进制编码将数据存储在磁盘上?为什么不使用 Google Protobuf?

Do databases use their own binary encodings to store data on disk? Why not use Google Protobuf?

  1. SQLite 3、MySQL、PostgreSQL 等数据库使用哪些二进制编码将数据保存在磁盘上?
  2. 如果 Google Protobuf 很好,为什么不使用它来编码并将数据存储在磁盘上?
  3. GoogleProtobuf / Facebook Thrift 是否只对微服务到另一个微服务的网络通信有用?
  4. 为什么我们不使用这些第三方二进制编码库在磁盘上存储数据?

[此博客] 讨论了 Protobufs 如何在响应时间上击败 JSON。 我很困惑像protobuf、Avro、Thrift这些二进制编码库是不是只用于网络通信而不用于存储数据到磁盘?

“好”是上下文相关的; protobuf 对于 x-plat 通用数据表示是“好的”,其中数据需要支持 round-trip 意外字段等;这些与数据库面临的问题不同。数据库通常使用基于行布局的自定义 data/memory 布局 - 最快的序列化方法是仅使用 磁盘上完全相同的布局 - 也许使用 mmap; protobuf 不是一个好的候选者,因为它是可变大小的;数据库通常需要恒定大小(ish),因此行在页面内是确定的。添加到事务性等...

另外:protobuf 可以并且已经用于在磁盘上存储数据;只是;通常不作为 RDBMS 的一部分。