在nodejs

时间:2018-02-09 10:35:15

标签: node.js aerospike msgpack

我试图解码垃圾箱'使用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的替代格式。

如果是这样我可以找到这个备用协议吗?

1 个答案:

答案 0 :(得分:1)

wire protocol并非基于msgpack。

CDT个分区使用带有custom extensions的msgpack进行编码。

修改

扩展程序用于表示地图的排序方式,可能是unordered, key ordered, or key-value ordered。有关Java客户端如何解压缩此信息,请参阅here