2016-06-29 8 views
1

Ich habe eine große Daten-CSV-Datei mit Schlüssel: Wert Zeilen. Wie kann ich es parallel lesen? Ich kann es nicht in Chunk teilen, weil jede Zeile eine andere Byte-Größe hat. Was soll ich in diesem Fall tun?So lesen Sie Dateikonkurenz auf Java + Akka

Ich kann kein Beispiel für Java finden.

Antwort

2

Es gibt eigentlich keinen Grund, die gleiche Datei parallel zu lesen, da dies die Geschwindigkeit des Dateilesens NICHT erhöht. Wenn Sie eine Datei lesen möchten, haben Sie mehrere Möglichkeiten, es zu tun:

  1. lesen Sie die gesamte Datei auf ein byte [] auf einmal, das ist der schnellste Weg, um die Datei zu laden und danach können Sie es geteilt zu neuen Zeilen und verwalten Sie die Daten.

  2. Sie lesen die Zeilen aus der Datei mit einem Scanner und der nextLine-Methode. Das ist nicht wirklich effizient, also empfehle ich das nicht.

  3. Sie lesen die Datei mit einem Puffer-Byte-Array. Das ist eine effiziente Lösung für die Speichernutzung, aber die 1. Option ist immer noch die beste.

Auch, weil der Laden der Datei ist relativ langsam (im Vergleich zum Datenmanagement in RAM) Sie sollten einen Thread machen (ja, eben nur ein, gibt es keine Notwendigkeit für mehr), die alle Dateien auf Byte-Arrays lesen und vielleicht ein anderer Thread, der das Byte [] in Ihre geladene Konfiguration konvertiert, weil das auch viel Zeit in Anspruch nehmen kann, wenn die Datei groß ist.