已知(请参阅此处this answer),Couchbase在使用MapReduce查询时提供二进制数据作为base64编码的文档。 但是,它也将它存储为base64吗?从 libcouchbase 的角度来看,它需要一个字节数组+长度,它是否会在以后转换为base64?
答案 0 :(得分:5)
Couchbase存储引擎在内部精确存储您的数据(即您指定的长度的字节流)。在协议级别使用CRUD密钥/值API读取数据时,您将获得完全相同的字节流。
这是可能的,因为低级键值协议在线路上是二进制的,因此每字节使用所有8位都没有问题。
不同的客户端SDK会以不同的方式向您公开。例如:
char*
缓冲区和length
。另一方面,Views API通过HTTP与JSON响应对象完成。 JSON 无法直接编码8位二进制数据,因此如果视图响应对象包含二进制数据,则Couchbase需要使用base64编码。
(顺便说一下,这是为什么建议索引emit
所需的最小数据量的原因之一,例如只需要感兴趣的文档的密钥,然后使用实际获取文档的CRUD键/值接口 - 在传输数据时,键/值接口没有base64开销。