Ich habe hier ein Performanceproblem in meinem Objectcache (einfach Objekte serialisieren und in ein RandomAccessFile werfen - die Liste mit Pointer und Länge der Chunks werden im Speicher verwaltet).
Die Engine bietet an, den Cache zu sortieren. Das ist im Moment so gelöst, dass die Cacheobjekte "Comparable" implementieren. Für den Quick-Sort wird nun der Chunk von Platte gelesen, deserialisiert, compareTo(..) ausgeführt und entsprechend der Index in der Chunkliste getauscht.
Im konkreten Fall muss eine Bilderliste nach Datum (long) sortiert werden, die Chunks sind 10-40MB gross - entsprechend lahm ist der Sort.
Die eine Variante wäre, dass ich mir mein eigenes Comparable definiere wo zusätzlich verlangt wird dass der Chunk den zu vergleichenden Wert zurückgibt. Dann könnte mir den Wert bei beim .add(Object value) abgreifen und für den Sort zwischenspeichern.
Die andere Variante wäre ein Sort, der mit möglichst wenigen Zugriffen auskommt und sich ggf. Zwischenergebnisse merken kann (ich meine mal von sowas gehört zu haben).
Stand schonmal jemand vor diesem Problem oder hat eine näherungsweise Lösung?
bernd
Die Engine bietet an, den Cache zu sortieren. Das ist im Moment so gelöst, dass die Cacheobjekte "Comparable" implementieren. Für den Quick-Sort wird nun der Chunk von Platte gelesen, deserialisiert, compareTo(..) ausgeführt und entsprechend der Index in der Chunkliste getauscht.
Im konkreten Fall muss eine Bilderliste nach Datum (long) sortiert werden, die Chunks sind 10-40MB gross - entsprechend lahm ist der Sort.
Die eine Variante wäre, dass ich mir mein eigenes Comparable definiere wo zusätzlich verlangt wird dass der Chunk den zu vergleichenden Wert zurückgibt. Dann könnte mir den Wert bei beim .add(Object value) abgreifen und für den Sort zwischenspeichern.
Die andere Variante wäre ein Sort, der mit möglichst wenigen Zugriffen auskommt und sich ggf. Zwischenergebnisse merken kann (ich meine mal von sowas gehört zu haben).
Stand schonmal jemand vor diesem Problem oder hat eine näherungsweise Lösung?
bernd