Ich möchte Node.js-Modul erstellen, das in der Lage sein soll, riesige Binärdateien (einige größer als 200 GB) zu parsen. Jede Datei ist in Blöcke unterteilt und jeder Block kann größer als 10 GB sein. Ich versuchte, fließende und nicht-fließende Methoden zu verwenden, um Datei zu lesen, aber das Problem liegt daran, dass das Ende des gelesenen Puffers beim Parsen von Chunk erreicht wird, so dass das Parsen dieses Chunks beendet werden muss, bevor das nächste onData
Ereignis auftritt. Dies ist, was ich versucht habe:Große Binärdateien in Node.js analysieren
var s = getStream();
s.on('data', function(a){
parseChunk(a);
});
function parseChunk(a){
/*
There are a lot of codes and functions.
One chunk is larger than buffer passed to this function,
so when the end of this buffer is reached, parseChunk
function must be terminated before parsing process is finished.
Also, when the next buffer is passed, it is not the start of
a new chunk because the previous chunk is not parsed to the end.
*/
}
ganze Brocken in Prozessspeicher Laden ist nicht prossible, weil ich nur 8 GB RAM haben. Wie kann ich synchron Daten aus dem Stream lesen oder wie kann ich die Funktion parseChunk
anhalten, wenn das Ende des Puffers erreicht ist und warten bis neue Daten verfügbar sind?
Wenn Sie Streams verwenden, schalten Sie das Lesen/Schreiben und Puffern in den Stream um. Aber Sie scheinen genaue Kontrolle darüber zu haben, was genau gelesen wird und wann es gelesen wird. Warum liest du nicht direkt die genaue Anzahl der Bytes, die du selbst lesen willst, ohne einen Stream, den du nicht vollständig kontrollierst? – jfriend00
@ jfriend00. Weil diese Dateien nicht auf meiner Festplatte sein müssen. Stream kann aus der Serverdatei, aus einem Teil des anderen Prozessspeichers oder aus einem Puffer abgerufen werden. –