我正在尝试通过使用异步获取来提高查询沙发床视图的性能。我已经阅读了他们的文档,了解这样做的正确方法,内容如下:
Cluster cluster = CouchbaseCluster.create();
Bucket bucket = cluster.openBucket();
List<JsonDocument> foundDocs = Observable
.just("key1", "key2", "key3", "key4", "key5")
.flatMap(new Func1<String, Observable<JsonDocument>>() {
@Override
public Observable<JsonDocument> call(String id) {
return bucket.async().get(id);
}
})
.toList()
.toBlocking()
.single();
效果很好,也很快速,但是由于我依赖结果的顺序,因此我似乎需要做一些额外的工作来保持结果有序。在上面的示例中,JsonDocument列表包含所有5个文档,但是顺序在调用之间是随机变化的。是否有使用JavaRx功能或Couchbase Java SDK功能对结果进行排序的简便方法?
我能想到的唯一解决方案是将结果保存到HashMap中,然后使用此HashMap将原始ID列表转换为JsonDocuments的有序列表。
除了flatMap
,您可以使用:
concatMap
:将保留顺序,但实际上会等待每个内部GET
完成之后再触发下一个(可能会以较低的性能恢复为顺序执行)concatMapEager
:将立即订阅内部Observable(因此触发inner GET
)。通过缓冲乱序到达的响应来维持顺序,直到可以在序列中的正确索引处重放它们为止。就订购和性能而言两全其美。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句