Ich habe einen Stream (oder eine lange Liste von Elementen, könnte Tausende oder Millionen sein), und ich muss die ersten N Gruppen (24 in meiner Situation) sortiert nach der Durchschnitt der Gruppe. So sind Elemente in der Form:Effiziente Möglichkeit zum Gruppieren, Sortieren und Zurückgeben der ersten N Ergebnisse
{groupId: 1, value: 10}, {groupId: 2, value: 4}, {groupId: 1: value: 2}
und bilden Gruppen:
{groupId: 1, average: 6}, {groupId: 2: average}
Klar, dass die naive Lösung ist iterieren, gruppieren, sortieren Gruppen von durchschnittlich und geben die ersten 24 Gruppen. Irgendeine Idee für eine Hochleistungslösung, die mit Millionen von Artikeln umgehen kann?
Wenn Sie die Gruppen nach ihrem Durchschnitt sortieren möchten, gibt es keine Möglichkeit, die gesamte Liste zu durchlaufen. Aber selbst für "Millionen" sollte dies kein großes Problem darstellen. –
Hmm. Sie haben nicht gesagt, um welche Art von Daten es sich handelt. Vielleicht können Sie eine Micro-Batch-App wie Apache Spark oder Apache Storm verwenden –
@CaptainFogetti diese Daten stammen aus Lucene-Index, und ich versuche, einen Lucene Collector für meinen Anwendungsfall zu implementieren. – agori