Couchbase批量检索Java中的多个密钥

时间:2015-02-03 18:57:50

标签: java couchbase rx-java

在couchbase中,考虑一个文档有一个字段,其中包含一组引用其他文档的键

{
    "some_ids": ["otherdoc1", "otherdoc2", "otherdoc3"]
}

这两个用于检索some_ids字段中所有文档的解决方案中哪一个能够提供最佳性能?

  1. Batching with RxJava

    List<JsonDocument> foundDocs = Observable
    .just("otherdoc1", "otherdoc2", "otherdoc3")
    .flatMap(new Func1<String, Observable<JsonDocument>>() {
        @Override
        public Observable<JsonDocument> call(String id) {
            return bucket.async().get(id);
        }
    })
    .toList()
    .toBlocking()
    .single();
    
  2. 创建设计视图,然后使用startKeyendKey

    检索其索引的子集
    // Map function
    function(doc, meta) {
        if (doc.type == 'otherdoc') {
            emit(meta.id, doc);
        }
    }
    
    // ViewQuery (in a java method)
    ViewQuery.from('designOther', 'viewOther')
      .startKey('otherdoc1')
      .endKey('otherdoc2');
    

1 个答案:

答案 0 :(得分:2)

在Couchbase中,当您知道密钥时,SDK会知道要求该密钥的节点(通过散列)。另一方面,查询视图意味着视图引擎要联系集群中的每个节点。

所以直接得到&amp;&amp;在RxJava中进行批处理,因为你知道密钥,会为你节省额外的往返次数,并且最终会有更好的表现!