在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();
创建一个设计视图,然后使用
startKey
和endKey
检索其索引的子集// 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 &&批处理将为您节省额外的往返行程,并且最终会带来更好的性能!