Ich versuche, die Leistung der Abfrage einer Couchbase-Ansicht zu verbessern, indem Async verwendet wird. Ich habe ihre Dokumentation über die richtige Art und Weise zu lesen, dies zu tun, es geht so etwas wie:Wie bestellt man Ergebnisse von couchbase mit Bulk bekommt
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();
Welche großen und schnell funktioniert, aber da ich auf der Reihenfolge der Ergebnisse verlassen, scheint es, dass ich tun muss etwas zusätzliche Arbeit, um die Ergebnisse geordnet zu halten. Im obigen Beispiel enthält die JsonDocument-Liste alle 5 Dokumente, aber die Reihenfolge ändert sich zufällig von Anruf zu Anruf. Gibt es eine elegante Möglichkeit, das Ergebnis mithilfe von JavaRx-Funktionen oder Couchbase Java SDK-Funktionen zu bestellen?
Die einzige Lösung, die ich mir vorstellen kann, speichert die Ergebnisse in eine HashMap und dann die ursprüngliche Liste von IDs mit dieser HashMap in eine geordnete Liste von JsonDocuments transformieren.
Gibt es einen Grund, concatMap über concatMapEager zu wählen? Die Reihenfolge der inneren GET-Ausführungen spielt keine Rolle, aber die Reihenfolge der zurückgegebenen Liste sollte mit der Eingabeliste übereinstimmen. – Eyal
ConcatMap hat keinen Puffer, der sehr groß werden könnte, wenn zB alle Antworten in umgekehrter Reihenfolge sind und man viel bekommt. Das wäre Speicher Overhead. Ansonsten nicht wirklich AFAIK –