Python SQLalchemy -> Große Datenbanktabellen aufspliten

Crashdowns

Ensign
Registriert
Juni 2010
Beiträge
138
Hallo Leute,
ich arbeite momentan an einem Pythonprojekt und benutze für die Datenbankanbindung SQLalchemy. In einer Datenbank existieren mehrere Tabellen und eine dieser Tabellen beinhaltet die täglichen Daten von Aktien (Schlusskurs, Volumen, Höchstkurs,etc (die Aktie selber ist in einer seperaten Tabelle untergebracht)). Diese Tabelle hat während einiger Testläufe mehr als 50 Millionen Einträge erreicht, wodurch häufige Abfragen leider etwas langsam werden. Ich würde jetzt gerne die Tabelle aufsplitten, so dass immer die Tagesdaten der Aktien, die an einer bestimmten Börse gehandelt werden in einer Tabelle sind, ohne dafür jetzt jedes mal eine neue Klasse erzeugen zu müssen. Hat jemand eine Idee wie das umzusetzen ist?

Mfg Crash
 
Hallo,

ich weiß jetzt nicht wie deine Zugrissrechte auf die DB sind, aber sollte es Dir möglich sein dort temporäre Tabellen erzeugen zu dürfen ist mein Vorschlag das Aufteilen schon von der DB erledigen zu lassen die nur die gewünschten Daten enthalten.

E.o.B
 
@E.o.B
Ich habe uneingeschränkte DB-Rechte. Allerdings habe ich deinen Vorschlag leider nicht verstanden. Kannst du den noch etwas genauer ausführen?
 
Gerne,

wenn ich das richtig Verstanden habe existiert ein Datenbestand mit Daten von verschiedenen Börsen. Da eine Auswertung über diesen gesamten Datenbestand zu lange dauert möchtest Du jeweils nur mit den Daten einer Börse arbeiten.

"..so dass immer die Tagesdaten der Aktien, die an einer bestimmten Börse gehandelt werden in einer Tabelle sind.."
und genau das kann eine Datenbank für dich mit wenigen Zeilen machen:

1. eine oder mehrere temporäre Tabellen anlegen
" CREATE TEMPORARY TABLE tbl_name [table_options] [select_statement] " (MySQL Beispiel)
2. diese mittels gewünschtem SELECT füllen
3. mit diesen Temp-Tabellen Arbeiten
(4. Temp-Tebelle löschen)
Eine TEMPORARY-Tabelle ist nur für die aktuelle Verbindung sichtbar und wird beim Beenden dieser Verbindung automatisch gelöscht.

1. 2. und 4. ist sehr schnell, da es vom DB-Server gemacht wird und 3. sollte wenig Arbeit machen in der Anpassung der Software

Ich hoffe das verdeutlicht die Idee hinter diesen alternativen Ansatz und ist nicht nur OffTopic.
 
wenn ich das richtig Verstanden habe existiert ein Datenbestand mit Daten von verschiedenen Börsen. Da eine Auswertung über diesen gesamten Datenbestand zu lange dauert möchtest Du jeweils nur mit den Daten einer Börse arbeiten.

Ok, das war vielleicht undeutlich ausgedrückt von mir. Das Projekt ist in Entwicklung und der Datenbestand wurde während eines eingeschränkten Testlaufes erzeugt. Wenn die Software in den produktiven Einsatz geht wird ein bedeutend größerer Datenbestand in die Datenbank gebracht. Also ist es momentan kein Problem, den gesamen Inhalt zu dropen bzw. ein alternatives DB-Schema aufzustellen.

Außerdem würde ich natürlich gerne innerhalb von SQLAlchemy bleiben und nicht anfangen eigene SQL-Befehle mit denen Befehlen von SQLAlchemy zu mischen. Oder geht das über die Fähigkeiten von SQLAlchemy hinaus?

Mfg Crash
 
Guten morgen,

ich glaube wir missverstehen uns grade etwas daher auch der zusatz dass ich hier etwas OffTopic bin.

Meine Idee war es zum einfachen handhaben den Datenbestand zur Verarbeitung schon auf DB-Ebene vorzubereiten.
Die Tabellen wie sie schon vorhanden sind bleiben so wie sie sind, nur für den Zeitraum der Auswertung wird eine zeitlich begrenzte vorsortierung seitens der DB vorgenommen um einzelne Tebellen für je eine Börse zu schaffen.

Dennoch wünsch ich ein schönes Wochenende
E.o.B
 
Einfach Antwort gib den gegenwertigen Ansatz auf. Wenn es bei den Testläufen schon abschmiert dann kannst es im Produktiveinsatz total vergessen.
Stell das System auf eine Verteilte Datenbank um dann kannst du beliebig skalieren.
 
Zurück
Oben