TXT oder Datenbank wer ist schneller?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

Hallo Liebe Python Freunde


Ich habe mal eine Grundsatz Frage ich schreibe Börsen Handelssysteme und
verarbeite die Kurse im CSV Format. Da die Dateim immer zwischen 500 MB bis 2GB
Groß sind ist die verarbeitungs Geschwindigkeit Recht Langsamm ca 3 - 6 Minuten.

Sind Datenbanken hier schneller oder gibt es noch andere Wege die Daten schneller zu verarbeiten ??

LG ST
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

Hallo,

die Frage ist zu allgemein, die kann man so schwer bis gar nicht beantworten.
Es gibt verschiedene Faktoren die da mit reinspielen. Wenn du die Daten sequentiell aus der Datei liest, also einmal von oben nach unten durch rauscht, dann ist da nicht mehr viel mit optimieren. Es sei denn du hälst die Daten die ganze Zeit im Speicher und sparst dir so den Festplattenzugriff.

Wenn es allerdings darum geht die Daten zu filtern, gruppieren oder bestimmte Datensätze im Betrieb auszuwählen könnte eine Datenbank um einiges schneller sein. Da liegt immerhin das Augenmerk darauf bestimmte Dataensätze recht schnell zu finden und entsprechendes Know-How liegt auf den Indexen, etc.

Gruß
Sparrow
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

sttrader hat geschrieben:Sind Datenbanken hier schneller oder gibt es noch andere Wege die Daten schneller zu verarbeiten ??
Hier findest du zwar keine finale Antwort, aber zumindest Anregungen zum Weiterdenken:
http://www.python-forum.de/viewtopic.ph ... 0&p=185537
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

Hallo

Danke für die Antworten :D
Kann man denn mit dem CSV Modul auch auf datein im Ram direkt zugreifen bzw wie
Lade ich denn die CSV in den Ram ?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

sttrader hat geschrieben: Kann man denn mit dem CSV Modul auch auf datein im Ram direkt zugreifen bzw
Naja mittels `StringIO`-Modul kannst Du immer File-like Objekte im RAM vorrätig halten. Die Frage ist nur: Wieso solltest Du das wollen?

Letztlich sind Speicherformate wie CSV ja nur serialisierte Daten; diese muss man vor einer internen Verarbeitung eben parsen. Sinn dahinter ist aber ja gerade, diese Daten in geeignete Datenstrukturen der Programmiersprache zu überführen.

Bei CSV fallen einem da spontan Listen, Tupel oder gar Dicts ein.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

Hallo


Was meint ihr mit Raid 0 sollte es doch eigentlich auch Deutlich schneller werden oder Täusche ich mich da???

LG ST
BlackJack

@sttrader: So etwas kann man nicht so pauschal beantworten. Am besten sind IMHO immer Messungen um zu sehen wo die meiste Zeit verbraucht wird, um die Stellen zu finden, wo sich Verbesserungen am ehesten lohnen. Du könntest zum Beispiel die Zeiten zwischen Verarbeitung der gleichen Daten von Festplatte und aus einer RAM-Disk vergleichen um zu sehen welchen Anteil Festplatten-I/O am Gesamtprogramm hat. Dabei musst Du aber darauf achten, dass die Daten beim Festplattentest tatsächlich von der Platte und nicht aus dem Cache kommen. Und das die Daten bei der RAM-Disk auch parallel zum benötigten Speicher bei der Verarbeitung ins physische RAM passen, damit eine Auslagerung auf Festplatte das Ergebnis nicht verfälscht.

Ansonsten müsstest Du um belastbare Zahlen zu bekommen halt mal ein RAID 0 aufsetzen und das testen.
Benutzeravatar
/me
User
Beiträge: 3554
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

sttrader hat geschrieben:Was meint ihr mit Raid 0 sollte es doch eigentlich auch Deutlich schneller werden oder Täusche ich mich da???
Ein Börsen-Handelssystem möchtest du nicht mit RAID-0 implementieren. So ein System sollte möglichst nicht ausfallen und mit RAID-0 erhöhst du die Ausfallwahrscheinlichkeit noch.

Wenn das Entscheidende die Leseperformance ist, dann verwende RAID-5. Dort kannst du parallel lesen wie bei RAID-0, hast aber noch die redundanten Informationen die bei einem Ausfall einer Platte dein System weiterarbeiten lassen. Wenn du zusätzlich noch eine hohe Schreibgeschwindigkeit benötigst, dann nimm RAID-10 (also ein RAID-0 über mehrere RAID-1 Systeme).

Bevor du allerdings anfängst hier in Hardware zu investieren solltest du allerdings wirklich erst den Flaschenhals in der aktuellen Verarbeitung finden und - falls möglich - beseitigen.
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

Hallo BlackJack und /me

Danke für eure Ideen und vor allem Anregungen, das Performance Problem hab ich ja nur
im Backtest auf Tick Daten der Handel per Python ist gar kein Problem Sau schnell, nur wenn
ich 1,9 GB Historische Tick Daten also wirklich jeden gehandelten Kurs (je sekunde bis 10 werte) durch ein
Handelssystem jage dann dauert es schon eine ganze weile.

Erste Messung: AMD x2 2450e, 4GB DDR2 800 Ram, hat der Test 3:30 Minuten gedauert
Zweite Messung: AMD x4 955 BE 4 GB DDR2 800 Ram, hat der Test 2:34 Minuten gedauert

Die Daten Liegen im CSV Format vor
Objekt Orientierung nicht genutzt, sondern Funktion da OO ja auch ein wenig verlangsamt,
und bei den Projekten auch nicht unbedingt nötig ist.

Wenn ich nun in den Handelssystem z.b per Brute Force Optimierung die Parameter des Regelwerkes
zu Optimieren versuchen würde, würde das jeden Normalen Zeit rammen sprengen.

Deshalb werde ich noch mal ein Test in einer RamDisk machen und mal sehen ob das was bringt ???
Irgendwo muss er doch sein der Flaschenhals :-)

LG ST
BlackJack

@sttrader: Der Flaschenhals dürfte nicht bei der Festplatte liegen. 2 GiB ⁄ 6 min sind ≈5,7 MiB⁄s und 500 MiB ⁄ 3 min sind ≈2,8 MiB⁄s. Das sind Durchsätze, die jede normale Festplatte auch ohne zusätzliche Verarbeitungszeit packt.
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

Hallo


Du hast recht Blackjack an der Festplatte liegt es nicht in der RAMDISK lief es überhaupt nicht schneller,
aber ich hab gesehen das einer der vier Kerne mit 100% Läuft :-(

Bei den Prozessen macht Python zwischen 92 und 108 :-(

Jetzt gehen mir die Ideen aus :-(

LG ST
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

``multiprocessing`` eventuell?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sttrader
User
Beiträge: 53
Registriert: Dienstag 12. Januar 2010, 11:22
Kontaktdaten:

Da wäre der Aufwand zu groß es müssten zu viele Systeme
grundlegend geändert werden :-(

Es bleibt also dabei mit dem Langsamen Leben zu Müssen oder
eben weniger Tick Daten sondern er Minuten Daten zu nutzen was
ja geht wenn man keine Scalping System schreibt.

:-)

LG ST
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Ich kenn deine Daten nicht, aber evtl. lässt sich das ganze mit numpy erheblich beschleunigen.
http://www.scipy.org/Cookbook/InputOutput
Antworten