我试图解码垃圾箱'使用nodejs通过aerospike get查询返回的数据,但我不断获取包含奇怪的\u0003
unicode字符的数据。
我使用一个简单的脚本将数据存储在aerospike中,就像默认示例
一样'use strict';
const Aerospike = require('aerospike');
const key = new Aerospike.Key('test', 'test_set', '1234');
const client = Aerospike.client({hosts: '127.0.0.1'});
const bins = {
test: {
'123': '1',
'456': '1'
}
};
client.connect((err) => {
if(err) return console.error('Could not connect to aerospike', err);
return client.put(key, bins, (err) => {
if(err) return console.error('Error when inserting data', err);
console.log('Record has been written');
});
});
然后我检索密钥箱及其相关值。
82a403313233a20331a403343536a20331
是我们之前插入的bin test
的十六进制内容。
使用各种nodejs msgpack库解码时:
我总是得到相同的结果,而不是我首先插入的结果:
{
test: {
'\u0003123': '\u00031',
'\u0003456': '\u00031'
}
}
我试过的所有msgpack库似乎都与here描述的msgpack规范相匹配,这意味着Aerospike使用基于msgpack的替代格式。
如果是这样我可以找到这个备用协议吗?
答案 0 :(得分:1)
wire protocol并非基于msgpack。
CDT个分区使用带有custom extensions的msgpack进行编码。
扩展程序用于表示地图的排序方式,可能是unordered, key ordered, or key-value ordered。有关Java客户端如何解压缩此信息,请参阅here。