/ / Mongo Aggregate Abfrage großer Daten mit Java-Treiber? - Java, Frühling, Mongodb, Feder-Daten-Mongodb, Mongo-Java-Fahrer

Mongo-Aggregat Abfrage auf große Daten mit Java-Treiber? - java, spring, mongodb, spring-data-mongodb, mongo-java-treiber

Ich verwende Spring Batch Framework, um große Datenmengen in Mongo DB zu verarbeiten und erneut in Mongo DB zu speichern

Der Code ist wie folgt:

Aggregation agg = newAggregation(
project("field1")
//projection on few fields
group("field1")
//group opeartion
project(
// again project on grouped result
)
).withOptions(newAggregationOptions().allowDiskUse(true).build());

AggregationResults<BeanName> agreatiR = dbTemplate.aggregate(agg,collectionName,BeanName.class);

Für weniger Daten (ich habe es auf 100.000 getestet) funktioniert das Aggregat-Framework gut, für 2M gibt es jedoch eine Ausnahme von 16 MB.

Ich möchte die $ out-Operation nicht verwenden, da sie erstens nicht erforderlich ist und es scheint, dass keine API verwendet wird, um $ out in Spring Data Mongo zu verwenden

Ich habe auch von zurückkehrenden Cursern gelesen, die das Überschreiten der Größenbegrenzung zulassen, aber auch hier scheint es keine Spring Data Mongo API zu geben, die dies unterstützt.

Mongo DB-Version: 2.6

Mongo-Treiberversion: 3.2.0

Antworten:

0 für die Antwort № 1

Ich habe verstanden, dass Sie versuchen, 2M auf einmal zu übergeben. Dies ist schlecht, weil alle Beans in den Speicher geladen werden.

Du solltest benutzen commit-interval um diesen riesigen Job zu reduzieren. Hast du das gemacht?

<tasklet transaction-manager="transactionManager">
<chunk reader="itemReader" writer="itemWriter" commit-interval="500"/>
</tasklet>

Siehe Konfigurieren eines Schritts im offiziellen Dokument