Couchbase:存储二进制数据时是否存在base64编码开销?

时间:2014-04-24 09:20:19

标签: couchbase

已知(请参阅此处this answer),Couchbase在使用MapReduce查询时提供二进制数据作为base64编码的文档。 但是,它也将它存储为base64吗?从 libcouchbase 的角度来看,它需要一个字节数组+长度,它是否会在以后转换为base64?

1 个答案:

答案 0 :(得分:5)

Couchbase存储引擎在内部精确存储您的数据(即您指定的长度的字节流)。在协议级别使用CRUD密钥/值API读取数据时,您将获得完全相同的字节流。

这是可能的,因为低级键值协议在线路上是二进制的,因此每字节使用所有8位都没有问题。

不同的客户端SDK会以不同的方式向您公开。例如:

  • C SDK(低级别)直接为您提供char*缓冲区和length
  • Python SDK提供Transcoding功能,其中使用文档中的标记'用于编码文档类型的元数据,因此它可以自动将其转换为原始类型,例如Python序列化对象或JSON对象。

另一方面,Views API通过HTTP与JSON响应对象完成。 JSON 无法直接编码8位二进制数据,因此如果视图响应对象包含二进制数据,则Couchbase需要使用base64编码。

(顺便说一下,这是为什么建议索引emit所需的最小数据量的原因之一,例如只需要感兴趣的文档的密钥,然后使用实际获取文档的CRUD键/值接口 - 在传输数据时,键/值接口没有base64开销。