Ich bin beeindruckt von der Geschwindigkeit der laufenden Transformationen, Ladedaten und Benutzerfreundlichkeit von Pandas
und möchte all diese netten Eigenschaften (unter anderem) nutzen, um einige große Datensätze zu modellieren (~ 100-200k Zeilen, < 20 Spalten). Ziel ist es, mit den Daten einiger Rechnerknoten zu arbeiten, aber auch über Flask
einen Blick auf die Datensätze in einem Browser zu ermöglichen.Pandas als schnelle Datenspeicher für Flask-Anwendung
Ich benutze derzeit eine Postgres-Datenbank, um die Daten zu speichern, aber der Import (aus csv-Dateien) der Daten ist langsam, mühsam und fehleranfällig und die Daten aus der Datenbank und die Verarbeitung ist nicht viel einfacher. Die Daten werden niemals nach dem Import geändert (keine CRUD-Operationen), daher dachte ich, dass es ideal ist, um es als mehrere Pandas DataFrame
(im Format hdf5 gespeichert und über Pytables geladen) zu speichern.
Die Frage ist:
(1) Ist das eine gute Idee, und was sind die Dinge zu achten? (Ich erwarte zum Beispiel keine Nebenläufigkeitsprobleme, da DataFrame
s (sollte?) Staatenlos und unveränderlich sein sollten (von der Anwendungsseite aus erledigt)). Worauf muss noch geachtet werden?
(2) Wie gehe ich vor, um die Daten nach dem Laden aus der hdf5-Datei in eine DataFrame
zwischenzuspeichern, sodass sie nicht für jede Clientanforderung geladen werden muss (mindestens die neuesten/häufigsten Datenframes). Flask
(oder werkzeug
) hat eine SimpleCaching
Klasse, aber intern werden die Daten gepickt und die zwischengespeicherten Daten beim Zugriff entfernt. Ich frage mich, ob dies in meinem speziellen Fall notwendig ist (vorausgesetzt, das zwischengespeicherte Objekt ist unveränderlich). Ist eine solche einfache Caching-Methode auch anwendbar, wenn das System mit Gunicorn bereitgestellt wird (ist es möglich, statische Daten (den Cache) zu haben und können gleichzeitige (unterschiedliche Prozesse?) Anfragen auf den gleichen Cache zugreifen?).
Ich weiß, das sind viele Fragen, aber bevor ich mehr Zeit investieren und einen Proof-of-Concept erstellen, dachte ich, ich bekomme hier ein Feedback. Irgendwelche Gedanken sind willkommen.
Interessante Frage. Ich beschäftige mich auch mit großen Mengen schreibgeschützter Daten und frage mich oft nach einem schlanken und pragmatischen Ansatz. Kann ich dich fragen, mit wie vielen Aufzeichnungen du es zu tun hast? (Ich habe etwa 300 Millionen = ca. 4 GB Daten) – Hexatonic
Es liegt im Bereich von Zehntausenden (vielleicht niedrigen 100.000 bei max). Ich habe mich mit hdf5 begnügt und bin sehr glücklich mit dieser Entscheidung und der Verwendung von Pandas (seit fast 2 Jahren). Das Gute an hdf5 und pytables ist, dass Sie Abfragen auf der Festplatte ausführen können, ohne die gesamte Datei zu laden. Mit meinem kleinen Datensatz hatte ich jedoch nie die Notwendigkeit, dies zu tun (in Ihrem Fall kann das anders sein). Ich war besonders beeindruckt von der E/A-Geschwindigkeit beim Lesen einer hdf5-Datei im Vergleich zu einer SQL-Abfrage. – orange