Textdatei vs. MySQL (Performance)

Textdatei vs. MySQL (Performance)

am 29.05.2006 16:30:31 von TorstenR

Hallo,

aktuell nutze ich einige tausend Textfiles, die jeweils in je einer
Zeile kommagetrennte Daten beinhalten. Pro Sekunde werden parallel von
verschiedenen Scripten bis zu 500 Dateien zum Lesen und direkt danach
zum Schreiben geöffnet - immer genau 1 Datei je Scriptaufruf.

Würde es sich positiv oder negativ auswirken, die Daten in eine
MySQL-Tabelle zu packen? Das Problem ist, dass die Datenbankverbindung
nicht offen gehalten werden kann und dann pro Sekunde bis zu 500
MySQL-Verbindungen auf- und wieder abgebaut werden müssten und das alles
für sehr simple Abfragen/Updates.

Ist es hier performancemäßig sinnvoller das weiterhin über einzelne
Textdateien laufen zu lassen? Es geht mir nicht um das Handling oder
darum, dass eine persistente SQL-Verbindung besser wäre etc, sondern
wirklich nur um die Performance unter den gegebenen Umständen.

Viele Grüße,
Torsten

Re: Textdatei vs. MySQL (Performance)

am 29.05.2006 17:01:32 von Frank Seitz

TorstenR wrote:

> aktuell nutze ich einige tausend Textfiles, die jeweils in je einer
> Zeile kommagetrennte Daten beinhalten. Pro Sekunde werden parallel von
> verschiedenen Scripten bis zu 500 Dateien zum Lesen und direkt danach
> zum Schreiben geöffnet - immer genau 1 Datei je Scriptaufruf.
>
> Würde es sich positiv oder negativ auswirken, die Daten in eine
> MySQL-Tabelle zu packen? Das Problem ist, dass die Datenbankverbindung
> nicht offen gehalten werden kann und dann pro Sekunde bis zu 500
> MySQL-Verbindungen auf- und wieder abgebaut werden müssten und das alles
> für sehr simple Abfragen/Updates.

Was verstehst Du unter positiv und negativ?
Der Zugriff über ein DBMS ist mit Sicherheit teurer als das
simple Öffnen/Schließen einer Datei, falls das Deine Frage ist,
auch wenn MySQL recht flott ist.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Textdatei vs. MySQL (Performance)

am 29.05.2006 20:11:23 von Florian Weimer

* TorstenR:

> Ist es hier performancemäßig sinnvoller das weiterhin über einzelne
> Textdateien laufen zu lassen? Es geht mir nicht um das Handling oder
> darum, dass eine persistente SQL-Verbindung besser wäre etc, sondern
> wirklich nur um die Performance unter den gegebenen Umständen.

Wenn das auf einem Linux läuft und alles ins Cache (insbesondere
dcache) paßt, wirst Du es nicht schneller bekommen. Ansonsten
(z.B. bei Solaris, oder bei knappem Speicher) helfen SQLite oder
Berkeley DB. Klassische SQL-Datenbank sind wegen des Aufwandes, eine
Verbindung aufzubauen, eher ungeeignet.

Re: Textdatei vs. MySQL (Performance)

am 29.05.2006 20:12:44 von Christian Winter

TorstenR schrieb:
> Hallo,
>
> aktuell nutze ich einige tausend Textfiles, die jeweils in je einer
> Zeile kommagetrennte Daten beinhalten. Pro Sekunde werden parallel von
> verschiedenen Scripten bis zu 500 Dateien zum Lesen und direkt danach
> zum Schreiben geöffnet - immer genau 1 Datei je Scriptaufruf.
>
> Würde es sich positiv oder negativ auswirken, die Daten in eine
> MySQL-Tabelle zu packen? Das Problem ist, dass die Datenbankverbindung
> nicht offen gehalten werden kann und dann pro Sekunde bis zu 500
> MySQL-Verbindungen auf- und wieder abgebaut werden müssten und das alles
> für sehr simple Abfragen/Updates.

Wie Frank schon schrieb, ein MySQL-Connect ist sicherlich teurer
als ein Fileopen. Bist Du Dir aber ganz sicher, dass die DB-Verbindung
nicht offen gehalten werden kann?

Eventuell könnte hier auch sowas wie ein Proxy mit konstant geöffneter
Datenbankverbindung und Zugriff der "Agents" über eine lokale Socket
(Unix Socket, Named Pipe etc.) eine Option sein.

-Christian

Re: Textdatei vs. MySQL (Performance)

am 31.05.2006 15:32:47 von TorstenR

Hallo,

> Wie Frank schon schrieb, ein MySQL-Connect ist sicherlich teurer
> als ein Fileopen. Bist Du Dir aber ganz sicher, dass die DB-Verbindung
> nicht offen gehalten werden kann?

Es handelt sich um eine Webanwendung mit gut 100.000 Zeilen Quellcode
(verstreut über ~100 Dateien) die leider in Bezug auf Namensräume etc
nicht sehr sauber programmiert ist. Das ganze mod_perl kompatibel zu
machen wäre daher ein ziemlicher Kraftakt.

Würde es sich denn in Bezug auf die Performance lohnen, d.h. würden bei
persistenter DB-Verbindung die Abfragen (~70%) und Updates (~30%)
weniger Last machen als die entsprechenden Fileopens bei Textdateien?

Gruß,
Torsten

Re: Textdatei vs. MySQL (Performance)

am 31.05.2006 16:57:18 von Peter Ehrenberg

TorstenR writes:

> [...] Es handelt sich um eine Webanwendung mit gut 100.000 Zeilen
> Quellcode (verstreut über ~100 Dateien) die leider in Bezug auf
> Namensräume etc nicht sehr sauber programmiert ist. Das ganze
> mod_perl kompatibel zu machen wäre daher ein ziemlicher Kraftakt.

mod_perl ist ja nicht der einzige Weg. SpeedyCGI ist da vielleicht
besser.

> Würde es sich denn in Bezug auf die Performance lohnen, d.h. würden
> bei persistenter DB-Verbindung die Abfragen (~70%) und Updates (~30%)
> weniger Last machen als die entsprechenden Fileopens bei Textdateien?

Ich glaube nicht. Zumindest dann nicht, wenn du die Daten flach wie in
der Datei in die Datenbank packst und lediglich die
Datei-IO-Operationen durch SQL-Statements ersetzt. Dann wird die Sache
langsamer und nicht schneller.

Die Anwendung auf relationale Datenstrukturen zu protieren, ist
wahrscheinlich nicht einfach möglich, oder?

Dann solltest du erstmal prüfen, ob die Performanceprobleme überhaupt
von den IO-Operationen herrühren. Wenn das tatsächlich der Fall ist
bleibt dir möglicherweise nur ein schnelleres Blech zu kaufen (gerade
im Disk-IO-Bereich kann man heute viel Gas geben), oder die Anwendung
auf Basis eines RDBMS neu zu schreiben. Das ist häufig gar nicht so
aufwändig, wenn man weiß, was man haben will.

Peter

--
Dipl.-Ing. Peter Ehrenberg Tel.: +49 40 756604-40
Auf der Höhe 29 Netz: http://dipe.de/
21109 Hamburg Perl · Oracle · Linux · Netzwerk
Germany Softwareentwicklung · Installation · Administration

Re: Textdatei vs. MySQL (Performance)

am 31.05.2006 19:46:50 von Christian Winter

TorstenR schrieb:
>> Wie Frank schon schrieb, ein MySQL-Connect ist sicherlich teurer
>> als ein Fileopen. Bist Du Dir aber ganz sicher, dass die DB-Verbindung
>> nicht offen gehalten werden kann?
>
> Es handelt sich um eine Webanwendung mit gut 100.000 Zeilen Quellcode
> (verstreut über ~100 Dateien) die leider in Bezug auf Namensräume etc
> nicht sehr sauber programmiert ist. Das ganze mod_perl kompatibel zu
> machen wäre daher ein ziemlicher Kraftakt.
>
> Würde es sich denn in Bezug auf die Performance lohnen, d.h. würden bei
> persistenter DB-Verbindung die Abfragen (~70%) und Updates (~30%)
> weniger Last machen als die entsprechenden Fileopens bei Textdateien?

Ich würde ähnlich sehen wie Peter. Einfach die Dateiops zu ersetzen
wird kaum lohnen. Falls die Datenmengen aber weiterwachsen, könnte
die Umstellung auf ein generisches Datenbankinterface zumindest
ein erster Schritt sein. Die Gefahr bei solchen Apps ist eh immer,
daß sie so lange laufen, bis sie entweder kreppieren oder keiner
mehr da ist, der was dran ändern kann.

mod_perl hätte zwar hinsichtlich dem Ladeverhalten und Connection
Pooling einige Vorteile, ich würde aber eher damit ansetzen die
verschiedenen Funktionsteile der Scripts in gemeinsame Module
zu kapseln. Dann läßt sich auch mit vertretbarem Aufwand was dran
optimieren.

-Christian

Re: Textdatei vs. MySQL (Performance)

am 02.06.2006 23:42:53 von Thomas Jahns

TorstenR writes:
> aktuell nutze ich einige tausend Textfiles, die jeweils in je einer
> Zeile kommagetrennte Daten beinhalten. Pro Sekunde werden parallel von
> verschiedenen Scripten bis zu 500 Dateien zum Lesen und direkt danach
> zum Schreiben geöffnet - immer genau 1 Datei je Scriptaufruf.

Nur weil es aktuell noch nicht vorgeschlagen wurde und mir SQL gemessen
an Deinen Vorgaben etwas dick erscheint: hast Du schon einmal
an Berkeley DB und Co. gedacht?

Thomas Jahns
--
"Computers are good at following instructions,
but not at reading your mind."
D. E. Knuth, The TeXbook, Addison-Wesley 1984, 1986, 1996, p. 9