10 Stimmen

Python: Interaktion mit komplexen Datenlagern

Wir haben hart gearbeitet, um ein volldimensionales Datenbankmodell unseres Problems zu erstellen, und nun ist es an der Zeit, mit der Programmierung zu beginnen. Bei unseren früheren Projekten wurden die Abfragen mit Hilfe von String-Manipulationen erstellt.

Gibt es eine beste/Standard-Praxis für die Schnittstelle zwischen Python und eine komplexe Datenbank-Layout?

Ich habe kurz SQLAlchemy, SQLObject und Django-ORM evaluiert, aber (es kann sein, dass ich etwas übersehe) sie scheinen auf winzige Web-Transaktionen (OLTP) abgestimmt zu sein, während ich analytische (OLAP) Transaktionen mit hohem Volumen durchführe.

Einige meiner Anforderungen, die vielleicht etwas anders sind als üblich:

  1. große Datenmengen relativ schnell laden
  2. kleine Datenmengen schnell und einfach aktualisieren/einfügen
  3. problemlos eine große Anzahl von Zeilen verarbeiten (300 Einträge pro Minute über 5 Jahre)
  4. Änderungen des Schemas für zukünftige Anforderungen zu ermöglichen

Das Schreiben dieser Abfragen ist einfach, aber das Schreiben des Codes, um die Daten in eine Reihe zu bringen, ist mühsam, vor allem, wenn sich das Schema weiterentwickelt. Das scheint etwas zu sein, das ein Computer gut kann?

6voto

S.Lott Punkte 371691

Lassen Sie sich nicht von Ihren Anforderungen verwirren. Eine Größe passt nicht für alle.

große Datenmengen relativ schnell laden

Warum nicht die nativen Lader der Datenbanken dafür verwenden? Verwenden Sie Python, um die Dateien vorzubereiten, aber verwenden Sie Datenbank-Tools zum Laden. Sie werden feststellen, dass dies erstaunlich schnell ist.

kleine Datenmengen schnell und einfach aktualisieren/einfügen

Damit werden die Regeln für ein Data Warehouse umgestoßen. Es sei denn, Sie sprechen von Master Data Management zur Aktualisierung von Berichtsattributen einer Dimension.

Dafür sind ORMs und Web-Frameworks da.

problemlos eine große Anzahl von Zeilen verarbeiten (300 Einträge pro Minute über 5 Jahre)

Auch hier verwenden Sie eine Pipeline mit Python-Frontend-Verarbeitung, aber die eigentlichen INSERTs werden von Datenbank-Tools durchgeführt. Nicht Python.

einfaches Ändern des Schemas (zusammen mit der Python-Schnittstelle) für zukünftige Anforderungen

Sie haben kaum einen Nutzen davon, dies zu automatisieren. Es ist sicherlich die Aufgabe mit der niedrigsten Priorität für die "Programmierung". Sie werden dies oft manuell tun, um die Daten ordnungsgemäß zu erhalten.

Nebenbei bemerkt, "handgefertigte Abfragen, die mit Hilfe von String-Manipulationen erstellt wurden" ist wahrscheinlich der größte Fehler überhaupt. Diese sind für den RDBMS-Parser schwer zu handhaben - sie sind langsamer als Abfragen, die Bindungsvariablen eingefügt haben.

3voto

Mariano Punkte 670

Ich verwende SQLAlchemy mit einem ziemlich großen Datawarehouse und ich verwende es für den gesamten ETL-Prozess mit Erfolg. Besonders bei bestimmten Quellen, bei denen ich einige komplexe Transformationsregeln habe oder bei einigen heterogenen Quellen (z. B. Webservices). Ich verwende nicht den Sqlalchemy ORM, sondern die SQL Expression Language, weil ich im ETL-Prozess nicht wirklich etwas mit Objekten abbilden muss. Es ist erwähnenswert, dass ich, wenn ich eine wortwörtliche Kopie einiger der Quellen mitbringe, eher die DB-Tools dafür verwende, z. B. das PostgreSQL Dump Utility. Das ist unschlagbar. Die SQL Expression Language kommt mit SQLAlchemy (oder einem anderen ORM) dem handgeschriebenen SQL am nächsten, aber da man das SQL programmatisch aus Python generieren kann, spart man Zeit, besonders wenn man einige wirklich komplexe Transformationsregeln zu befolgen hat.

Allerdings ändere ich mein Schema lieber von Hand. Ich traue keinem Tool für diese Aufgabe.

2voto

dekomote Punkte 3571

SQLAlchemy auf jeden Fall. Im Vergleich zu SQLAlchemy sehen alle anderen ORMs wie Kinderspielzeug aus. Besonders das Django-ORM. Was Hibernate für Java ist, ist SQLAlchemy für Python.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X