我们使用Couchbase的增量功能将一些计数器存储在具有恒定prefix的变量键上SomePrefix_
。我们定义了一个视图,该视图获取所有以键开头的文档SomePrefix_
:
function (doc, meta) {
if (meta.id.indexOf("SomePrefix_") === 0) {
emit(meta.id, doc);
}
}
当我们查询视图,我们得到的值一样"Mg=="
,"MQ=="
等.NET SDK加载失败查看结果,并将其映射为整数。
任何解决方法?
首先,根据目标是什么,视图可能不是最佳方法。如果所有键都是已知的,那么使用CRUD操作而不是视图将更快。如果要求使用reduce来查找所有键的平均值或最大值,或者键不简单,则视图是正确的解决方法。
Couchbase Server计数器内部存储为二进制而不是JSON。结果,视图引擎将二进制文件转换为base64。当doc被解码(decodeBase64(doc)
)时,它将是ASCII码。然后String.fromCharCode(decode[i])
需要使用转换为字符串。需要依次对每个数字进行转换。
例如,如果计数器doc是Mg==
,则在解码时将具有ASCII码50
即十进制字符串2
。
这种观点应该可以解决问题。
function (doc, meta) {
if (meta.id.indexOf("counter_") === 0) {
var decode = decodeBase64(doc);
var value = null;
for (i = 0; i < decode.length; ++i) {
if (value == null) {
value = String.fromCharCode(decode[i]);
} else {
value += String.fromCharCode(decode[i]);
}
}
emit(meta.id, parseInt(value));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句