执行BinIndexQuery

时间:2019-03-08 15:58:19

标签: riak riak-2i

我正在使用riak来存储和检索一些数据。我还需要能够检索在特定时间范围内生成的值的键,因此,当我存储值时,我向其中添加了包含时间戳记的String索引。

到目前为止,一切都很好,我可以存储和读取值,但是,当我尝试使用索引来检索键时,我从未从riak得到答案。

这是我用来获取特定时间范围内的键的代码:

protected List<String> fetchRangeIndex(String domainUid, String index, String from, String to) {

    String fullDomainUid = getFullDomainUid(domainUid);

    Namespace namespace = new Namespace(fullDomainUid);
    BinIndexQuery binIndexQuery = new BinIndexQuery.Builder(namespace, index, from, to).build();

    logger.debug("fetching keys in range domainUid=" + domainUid + ", index=" + index +", from=" + from + ", to=" + to);

    try {
        List<SecondaryIndexQuery.Response.Entry<String>> entries = riakClient.execute(binIndexQuery).getEntries();
        List<String> keys = new ArrayList<>();
        logger.debug("Finished reading riak");
        for (SecondaryIndexQuery.Response.Entry<String> entry : entries) {
            keys.add(entry.getIndexKey());
        }

        logger.debug("Got keys from riak=" + keys);

        return keys;
    } catch (Throwable e) {
        throw this.exceptionHandler.handleException(e);
    }

}

执行此代码时,它会卡在执行程序上,而不会给出任何响应或错误。

我也尝试调试,发现命令已正确执行,甚至可以看到它读取了我期望的数据,但似乎将响应标记为未完成,因此从不返回任何内容。

这是我配置RiakClient的方式

    String[] hostIPs = StringUtils.commaDelimitedListToStringArray(hosts);

    // The clustered Riak client that is configuration for as many nodes there
    // is in the Riak cluster and uses round robin between requests and retries.

    RiakNode.Builder builder = new RiakNode.Builder();
    builder.withMinConnections(2).withMaxConnections(maxConnections).withRemotePort(port);
    List<RiakNode> nodes = RiakNode.Builder.buildNodes(builder, Arrays.asList(hostIPs));

    RiakCluster riakCluster = new RiakCluster.Builder(nodes).build();
    riakCluster.start();
    riakClient = new RiakClient(riakCluster);

我将riak客户端2.1.1与riak服务器1.2.1一起使用

能否请您帮助我了解我在做什么错或者我还能做些什么来获取钥匙列表

请注意,我不能更改riak服务器版本,也不能使用riak客户端1.x

0 个答案:

没有答案