Input/Output Schneller Sort mit wenigen Zugriffen (oder was anderes?)

Bernd Hohmann

Top Contributor
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
 

Ark

Top Contributor
Interessanterweise stehe ich momentan vor einem ähnlichen Problem. Leider bin ich da noch unschlüssig, ob ein fertiges Datenbanksystem nutzen sollte oder eine Eigenentwicklung meine Anforderungen besser erfüllt.

Aber mal zu deinem Problem, ganz konkret: Spricht was dagegen, die Datumsangaben zusammen mit den dazugehörigen Pointern im Arbeitsspeicher mitzuführen? Also etwa: ein long[]-Array d mit den Datumsangaben und ein long[]-Array p mit den Pointern zu den Objekten, wobei jedes d das Datum zum Objekt ist, auf das p zeigt?

Ark
 

Bernd Hohmann

Top Contributor
Aber mal zu deinem Problem, ganz konkret: Spricht was dagegen, die Datumsangaben zusammen mit den dazugehörigen Pointern im Arbeitsspeicher mitzuführen? Also etwa: ein long[]-Array d mit den Datumsangaben und ein long[]-Array p mit den Pointern zu den Objekten, wobei jedes d das Datum zum Objekt ist, auf das p zeigt?


Da spricht nur dagegen, dass ich ein anderes Comparable Interface brauche - nämlich eines, was den Vergleichswert abgreifen lässt. Wenn es sich nicht vermeiden lässt, mache ich das so.

Der Source für meinen ObjectCache fliegt hier im Forum herum (werde ich gelegentlich mal aktualisieren), ein anderer Kollege hatte ein ähnliches Projekt in dem Thread angesprochen - da hättest Du schonmal was zum abschreiben.

Bernd
 

Bernd Hohmann

Top Contributor
Ark,

hat sich im ersten Coding-Ansatz als "Problembehaftet" gezeigt als ich das mal mit Strings testen wollte. Da ist ja der Vergleich nicht so trivial wie bei einem long/int etc.. und ich muss den String zum Vergleichen im Speicher halten.

Als ich das mit 50GB Texten probierte tats einfach nur noch einen dumpfen Knall *fg*.

Bernd
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Dieses Programm schneller machen? Allgemeine Java-Themen 2
M Dateien schneller kopieren Allgemeine Java-Themen 1
D Eine Forschleife mit Threads abarbeiten um es zu schneller zu machen. Ist das möglich? Allgemeine Java-Themen 20
M While-Schleife schneller, solange die Abbruchbedingung nicht vom Schleifeninneren abhängt Allgemeine Java-Themen 3
B Threads Timer wird immer schneller Allgemeine Java-Themen 6
G Erste Schritte Aufgabe - Geht das auch schneller ? Allgemeine Java-Themen 7
X Images painten - Was ist schneller? Allgemeine Java-Themen 2
L Assoziatives Datenfeld, schneller wie Hashmap Allgemeine Java-Themen 35
V Thread schneller stoppen Allgemeine Java-Themen 2
D NetBeans Programm in NetBeans deutlich schneller als als Jar Allgemeine Java-Themen 33
F ArrayList schneller als LinkedHashMap? Allgemeine Java-Themen 8
feuervogel Performanzprobleme - Code schneller machen Allgemeine Java-Themen 18
J Was ist schneller? Neue Variable oder neuer Wert speziell int Allgemeine Java-Themen 3
R Was ist schneller? Allgemeine Java-Themen 3
E Schneller Einstieg in Java und Web Services Allgemeine Java-Themen 3
C Wer kanns schneller? Allgemeine Java-Themen 13
M Was ist schneller und effizienter GZIP(java) oder 7zip ? Allgemeine Java-Themen 5
D Was ist schneller? Zuweisung oder Vergleich? Allgemeine Java-Themen 18
D Geht es auch schneller doppelte Einträge zu löschen? Allgemeine Java-Themen 23
B Vermeiden das JButton schneller hintereinander drücken Allgemeine Java-Themen 3
m@nu Thumbnails schneller erstellen Allgemeine Java-Themen 2
T Warum mein such-tool schneller als Windows such-tool? Allgemeine Java-Themen 5
A Wie mach ich, das mein Button schneller reagiert. Allgemeine Java-Themen 13
D binär einlesen schneller? Allgemeine Java-Themen 3
S Gehts schneller? Allgemeine Java-Themen 10
R Formel Bubble Sort Allgemeine Java-Themen 1
M Bubble Sort Allgemeine Java-Themen 3
Aartiyadav Comparisons and Swapa in Bubble-sort Java Allgemeine Java-Themen 6
Cromewell Tail-Rekursiver Counting Sort Allgemeine Java-Themen 20
Kirby.exe Bucket Sort Allgemeine Java-Themen 7
Kirby.exe Merge Sort Allgemeine Java-Themen 11
A Heap-Sort Allgemeine Java-Themen 2
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
J Array-List Bubble-Sort Allgemeine Java-Themen 12
M Arrays.sort Problem Allgemeine Java-Themen 2
B Counting Sort (Sortieren durch Zählen) Allgemeine Java-Themen 13
F File.listFiles ohne .sort Allgemeine Java-Themen 6
A External Sort - too many open files Allgemeine Java-Themen 6
X einfach verkettete Liste und Insertion Sort Allgemeine Java-Themen 3
S Array-Sort mittels Binärsuche Allgemeine Java-Themen 2
M Insertion sort Allgemeine Java-Themen 13
K Bound mismatch: The generic method sort(List<T>) of ty Allgemeine Java-Themen 4
T Sortierung mit Collections.sort() Allgemeine Java-Themen 4
L-ectron-X Problem mit Collections.sort() mit Java 1.5 Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben