Ich benutze Atom / Electron für den Aufbau einer App, die Visualisierungen über Video basierend auf Daten hat. Jedes Video hat eine entsprechende CSV-Datei mit Informationen für jeden Frame. Die Videos sind ungefähr 100 Minuten lang, also haben die Dateien viele Daten!
Das Problem, das ich habe, ist, dass es ein paar Sekunden dauert, die Datei zu laden und zu analysieren. Meistens ist das kein Problem. Aber ich muss Playlists für Teile von Videos erstellen und das Laden der gesamten CSV-Datei jedes Mal, wenn ein Video geändert wird, ist keine praktikable Option.
Ich habe versucht, Streaming-Optionen als Fast-csv zu speichern, aber ich habe es nicht geschafft, für einen beliebigen Teil der Datei zu lesen.
EDIT: aus der FS-Dokumentation. In diesem Fall lautet die Frage: Wie kann ich wissen, welches Byte der gewünschten Position in der Datei entspricht?
-Optionen können Start- und Endwerte enthalten, um einen Bereich von Bytes zu lesen aus der Datei anstelle der gesamten Datei. Sowohl Anfang als auch Ende sind inklusive und bei 0 beginnen.
Was wäre Ihrer Meinung nach der bessere und performantere Ansatz für diese Situation?
Im Konkreten:
Gibt es eine Möglichkeit, einen Stream von einem beliebigen Teil einer CSV-Datei zu lesen?
Glauben Sie, dass es eine andere Speichermethode gibt, mit der ich dieses Problem besser lösen könnte?
UPDATE:
Am Ende habe ich das gelöst, indem ich die Daten in einer Datei im Binärformat gespeichert habe. Da ich weiß, wie viele Spalten die Datei hat, kann ich direkt aus dem Segment der Datei lesen, ohne irgendwelche Auswirkungen auf die Leistung.
Nach meinem Kommentar scheint Sqlite das zu sein, wonach du suchst. Es ist vielleicht nicht Ihre dauerhafte Lösung auf lange Sicht, aber es wird sicherlich vorläufig funktionieren, während Sie entschieden haben, ob Sie dabei bleiben oder Ihre eigene Lösung programmieren wollen.
Innere Funktionsweise von Sqlite
Sqlite ist auf den Kern optimiert, hat aber drei Hauptmerkmale, die dazu führen, dass es schneller als normale Plattenlesevorgänge ausgeführt wird, insbesondere CSV-Dateien:
Wenn Sie wirklich daran interessiert sind, den vollen Umfang von all dem zu verstehen, habe ich keine bessere Erklärung gefunden als diesen tollen Blogpost von Julia Evans .
Mögliche Nachteile
Sqlite ist neben den internen Funktionen als Client-Seite gedacht, die auf dem Benutzercomputer arbeitet. Wenn dies keine praktikable Lösung ist, gibt es Workarounds, die durchgeführt werden können. Sqlite kann zum Beispiel als Webserver verwendet werden, aber es gedeiht am besten in einer eigenständigen oder gemischten Installation. Denken Sie auch daran, dass jeder Clientcomputer anders ist. Ein Computer verarbeitet möglicherweise Datensätze schneller als die nächste, aber im Allgemeinen müssen Sie sich keine Sorgen machen, da clientseitige Computer normalerweise nur wenig belastet werden.
Zusammenfassung
Sqlite wird für das funktionieren, was Sie brauchen, aber vielleicht benötigen Sie ein paar Hausaufgaben, um es auf die von Ihnen benötigte Weise einzurichten. Sqlite4java zum Beispiel ist einfach zu installieren, aber verwirrend zu lernen, da ihre Dokumentation so schlecht ist; Stack Overflow hat mich aber durchgebracht. Sqlite ist auch eine Verwendung und vergessen Sie es Art der Installation, um Ihre Frage zu beantworten, wird es 25 Zeilen pro Sekunde wie Kuchen behandeln, müssen Sie sich keine Sorgen über die Optimierung nur Ihren eigenen Code.
Ich würde Papaparse dafür sehr empfehlen. Es ermöglicht das zeilenweise Streaming einer CSV-Datei, die im JSON-Format basierend auf den Headern in der Datei verarbeitet werden kann.
Innerhalb eines config-Objekts, das an die Parsing-Funktion übergeben wird, können Sie einen "step" -Parameter angeben, der eine Funktion ist, die für jede Zeile der Datei ausgeführt wird, während sie durchläuft.
Hinweis: Kann auch für die Verwendung eines Worker-Threads konfiguriert werden, um die Leistung bei der Verarbeitung sehr großer CSVs zu erhöhen
Tags und Links javascript node.js csv file electron