Java: der Schnellste Weg, das zu tun, random reads auf den riesigen Festplatten-Datei(en)

Habe ich eine mäßig große Menge von Daten, über 800 MB oder so, das ist im Grunde einige große vorausberechnete Tabelle, die ich brauche, um die Geschwindigkeit um etwa die Berechnung von mehreren Größenordnungen (das erstellen dieser Datei dauerte mehrere mutlicores Computern Tagen zu produzieren, mit einem optimierten und multi-threaded-algo... ich Mach wirklich müssen, dass-Datei).

Nun, es wurde einmal berechnet, dass 800 MB Daten nur Lesen.

Kann ich nicht halten Sie in Erinnerung.

Ab jetzt ist es eine riesig große 800MB-Datei, sondern aufteilen in kleinere Dateien ist nicht ein problem, wenn es helfen kann.

Ich Lesen müssen, über 32-bit-Daten hier und da in dieser Datei eine Menge Zeit. Ich weiß nicht, bevor die hand, wo werde ich brauchen, um Lesen Sie diese Daten ein: das liest sich gleichmäßig verteilt.

Was wäre der Schnellste Weg in Java zu tun, meine random liest in einer Datei oder Dateien? Idealerweise sollte ich tun, diese liest aus mehreren voneinander unabhängigen threads (aber ich könnte Warteschlange der liest in einem einzigen thread, falls erforderlich).

Ist Java NIO der Weg zu gehen?

Ich bin nicht vertraut mit 'memory-mapped file': ich denke, ich will keine Karte die 800 MB im Speicher.

Alles was ich will ist die Schnellste zufällig liest, die ich bekommen kann, um Zugriff auf diese 800 MB disk-basierte Daten.

btw falls Leute Fragen, das ist nicht das gleiche, wie die Frage, die ich vor nicht langer Zeit:

Java: schnelle disk-basierte hash-set

  • Gibt es keine Möglichkeit zu werfen, dass die Daten in eine Datenbank, die exakt optimiert, das zu tun diese Art von Sachen?
  • Ich bin vorausgesetzt, es ist bereits sortiert-und Sie tun binäre [oder interpolation] Suche Sie es mit der rechten? Auch, wenn möglich, Sie könnte schieben Sie es in eine DB, die ist optimiert für die Abfrage von großen Datenmengen, perf. viel besser sein wird.
  • Warum können Sie nicht setzen alles in den Speicher? Den Kauf von mehr Speicher wird wahrscheinlich viel billiger sein, als code zu schreiben um die situation zu verbessern - und es hat den Vorteil, so dass Sie mehr Speicher für andere Dinge auch... 800 MB ist wirklich nicht viel Speicher in diesen Tagen.
  • Sie möchten die Geschwindigkeit Ihres random-access-um eine Größenordnung. Holen Sie mehr RAM, wie Jon sagt, oder wenn nicht möglich, verwenden Sie ein solid-state-Laufwerk.
  • Skeet und JRL: leider ist dies für etwas, das bereitgestellt wird, auf eine Menge von Maschinen...
  • Und solche Maschinen sind alle Massiv short Speicher? Würden Sie nicht profitieren, im Allgemeinen? Im ernst, mehr Speicher wird wahrscheinlich geben Ihnen die beste bang für die buck im Allgemeinen.

InformationsquelleAutor cocotwo | 2010-02-27
Schreibe einen Kommentar