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

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


这两种用于检索some_ids字段中所有文档的解决方案中,哪一种解决方案具有最佳性能?


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();



创建一个设计视图,然后使用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');

最佳答案

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

因此,由于您知道密钥,因此RxJava中的直接get &&批处理将为您节省额外的往返行程,并且最终会带来更好的性能!

09-11 19:56