Hallo,
ich habe folgendes Problem:
Von einer Datenbank werden Daten geladen und in eine Liste von Objekten geschrieben. Jedes Objekt hat 36 Attribute, die befüllt werden.
Zusammen also eine Liste von ca 70000-300000 Objekten von je 36 Attributen.
Diese Objekte werden anhand von unterschiedlichen Sortierkriterien Sortiert.
Soweit so gut, klappt alles prima.
Jetzt soll in den sortierten Objekten gearbeitet werden. Je nach Grad der Übereinstimmung werden "PärchenObjekte" erstellt, die je auch ca 20Attribute haben.
Früher war es so, daß in der sortierten Liste immer "nur" objekt[j] mit objekt[j+1] verglichen wurde.
Das System hat leider mängel, weil es ggf Paare übersieht, weil sie eben nicht direkt untereinander sortiert wurden.
Jetzt war die Idee die sortierte Liste in Teilmengen mit 100% - Übereinstimmung zu unterteilen, also jedesmal zu prüfen ob ojekt[j] mit objekt von [j+k] in einer vorgegebenen Sortierung, also in den vorgegebenen Sortierattributen 100% übereinstimmen. falls ja werden die objekte auch vergleichen und k um 1 erhöht.
Sobald ojekt[j] und objekt [j+k] nicht mehr zu 100% übereinstimmen wird j um eins erhöht.
Fakt ist, daß der Algorithmus, bzw. das java-programm schon bei der kleinsten Datenabfrage von ca 70000 Objekten über 4gb ram benötigt.
Unser "schnellster" Rechner hat aber auch "nur" 8GB ram.
In sofern muss ich mir eine andere Lösung überlegen.
Meine erste Idee wäre jetzt die Daten wie vorher zu sortieren und dann die sortierte Liste in eine Datei zu schreiben (also inc. Attribute).
Dann eben nur noch "häppchenweise" die Daten zu laden, zB 5000er Blöcke, die sich je um ca 100 überschneiden und dann den neuen Algorithmus durchlaufen zu lassen.
Was meint ihr? Gibt es andere Möglichkeiten den benötigten RAM zu verringern? bzw. Was benötigt alles "RAM" bei Java? vor allem Attribute?
LG
ich habe folgendes Problem:
Von einer Datenbank werden Daten geladen und in eine Liste von Objekten geschrieben. Jedes Objekt hat 36 Attribute, die befüllt werden.
Zusammen also eine Liste von ca 70000-300000 Objekten von je 36 Attributen.
Diese Objekte werden anhand von unterschiedlichen Sortierkriterien Sortiert.
Soweit so gut, klappt alles prima.
Jetzt soll in den sortierten Objekten gearbeitet werden. Je nach Grad der Übereinstimmung werden "PärchenObjekte" erstellt, die je auch ca 20Attribute haben.
Früher war es so, daß in der sortierten Liste immer "nur" objekt[j] mit objekt[j+1] verglichen wurde.
Das System hat leider mängel, weil es ggf Paare übersieht, weil sie eben nicht direkt untereinander sortiert wurden.
Jetzt war die Idee die sortierte Liste in Teilmengen mit 100% - Übereinstimmung zu unterteilen, also jedesmal zu prüfen ob ojekt[j] mit objekt von [j+k] in einer vorgegebenen Sortierung, also in den vorgegebenen Sortierattributen 100% übereinstimmen. falls ja werden die objekte auch vergleichen und k um 1 erhöht.
Sobald ojekt[j] und objekt [j+k] nicht mehr zu 100% übereinstimmen wird j um eins erhöht.
Fakt ist, daß der Algorithmus, bzw. das java-programm schon bei der kleinsten Datenabfrage von ca 70000 Objekten über 4gb ram benötigt.
Unser "schnellster" Rechner hat aber auch "nur" 8GB ram.
In sofern muss ich mir eine andere Lösung überlegen.
Meine erste Idee wäre jetzt die Daten wie vorher zu sortieren und dann die sortierte Liste in eine Datei zu schreiben (also inc. Attribute).
Dann eben nur noch "häppchenweise" die Daten zu laden, zB 5000er Blöcke, die sich je um ca 100 überschneiden und dann den neuen Algorithmus durchlaufen zu lassen.
Was meint ihr? Gibt es andere Möglichkeiten den benötigten RAM zu verringern? bzw. Was benötigt alles "RAM" bei Java? vor allem Attribute?
LG