将数据存储到aerospike中

时间:2016-03-13 12:42:24

标签: java database aerospike

我有一些数据要存储在针对列的空气动力学中

假设输入数据是

overflow-scroll='false'

现在第一个问题是如何用Java保存这些数据。

我试过这个。

["A", 1]

当我尝试使用

将此数据写入aerospike时
ArrayList value = new ArrayList();
value.add(new String("A"));
value.add(new Integer(2));

然后,如果我使用AQL查询,那么我正在看

  

| AC ED 00 05 73 72 00 13 6A 61 76 61 2E 75 74 69 6C 2E 41 72 72 61 79 4C 69 73 74 78 81 D2 1D 99 C7 61 9D 03 00 01 49 00 04 73 69 7A 65 78 70 00 00 00 02 77 04 00 00 00 02 73 72 00 11 6A 61 76 61 2E 6C 61 6E 67 2E 49 6E 74 65 67 65 72 12 E2 A0 A4 F7 81 87 |

一些HexaDecimal数字

但是当我尝试使用

将数据存储到Aerospike中时
AerospikeClient client = client.put(new WritePolicy(), 
         new Key("namespace", "set", "test"), 
         new Bin("binName", value) );

然后通过AQL触发查询给我

  

[" A",1]

当我使用Aerospike客户端获取值并检查其类型时,这似乎是预期的行为

AerospikeClient client = client.put(new WritePolicy(), 
         new Key("namespace", "set", "test"), 
         new Bin("binName", Value.getAsList(value)) );

然后我可以看到print语句虽然我最初发送了Integer数据。

为什么会发生这种情况,任何人都可以告诉我任何替代解决方案将输入数据保存到aerospike中说数据是

List<Object> ret = (List<Object>) client.get(new Policy(), key, "test").getValue("binName");

    if(ret.get(0) instanceof Long){
        System.out.println("Got instance of long");
    }

PS:请用小代码snippit支持你的回答

在GITHUB上发现了一些信息

参考this链接有一些功能

我在下面复制/粘贴

["A",1]
  

有一条评论说服务器将数字转换为长

现在我有一个问题。那么这种类型的Case整数是否意味着无法存储?

1 个答案:

答案 0 :(得分:1)

如果查看Aerospike datatypes,您会发现它们只支持64位整数,这些整数是Java中的long类型。

如果您不需要通过Lua UDF脚本在服务器上访问此数据,则可以将其另存为序列化blob数据。 java驱动程序已经支持本机序列化,这是您在第一次尝试时所做的。 AQL只显示序列化的字节,但你可以在java客户端中读回来。

或者您可以将其存储为json序列化字符串,以便它与您将来可能使用的其他语言驱动程序更兼容。