Abfragen mit PHP oder C?

Abfragen mit PHP oder C?

am 04.08.2006 19:12:46 von MrQuantum

Hallo!

Mich würde interessieren, ob es in einem LAMP-System aus Sicht der
Perfomace Sinn macht, ein C-Programm zu schreiben, dass die Anfragen an
die MySQL-Datenbank weiterleitet. Die Logik des Systems stelle ich mir so
vor: Der User gibt in ein Webformular eine Anfrage ein -> php ruft mit
diesen Angaben ein C-Programm auf -> dieses C-Programm stellt die Anfrage
an die Datenbank -> das C-Programm liefert die Ausgabe der Datenbank
an php und die Webseite zurück.

Kann man das eigentlich allgemein beantworten?
Verliere ich durch das Starten des neuen Prozesses viellicht jene
Performace wieder, die ich durch C (vs. PHP) gewinne?

Danke für eure Kommentare!

Chris

PS: Ich habe verkürzt formuliert: EIN C-Programm. Ich denke eher an einen
in C programmierten MySQL-Client, der "im Hintergrund" läuft und via
Interprozess-Kommunikation auf Anfragen des vom User angestoßenen
C-Programms wartet.

Re: Abfragen mit PHP oder C?

am 04.08.2006 19:20:07 von Dirk Brosowski

MrQuantum schrieb:
> Hallo!
>
> Mich würde interessieren, ob es in einem LAMP-System aus Sicht der
> Perfomace Sinn macht, ein C-Programm zu schreiben, dass die Anfragen an
> die MySQL-Datenbank weiterleitet. Die Logik des Systems stelle ich mir so
> vor: Der User gibt in ein Webformular eine Anfrage ein -> php ruft mit
> diesen Angaben ein C-Programm auf -> dieses C-Programm stellt die Anfrage
> an die Datenbank -> das C-Programm liefert die Ausgabe der Datenbank
> an php und die Webseite zurück.
>
> Kann man das eigentlich allgemein beantworten?
> Verliere ich durch das Starten des neuen Prozesses viellicht jene
> Performace wieder, die ich durch C (vs. PHP) gewinne?
>
> Danke für eure Kommentare!
>
> Chris
>
> PS: Ich habe verkürzt formuliert: EIN C-Programm. Ich denke eher an einen
> in C programmierten MySQL-Client, der "im Hintergrund" läuft und via
> Interprozess-Kommunikation auf Anfragen des vom User angestoßenen
> C-Programms wartet.

Im Normalfall werden beide Varianten auf die Datenbank warten. Schneller
wird deine "C-Client-im-Hintergrund"-Variante kaum sein, eher langsamer.
Es sei denn du integrierst an dieser Stelle ein intelligentes
Caching-System. Dann bekommst du auf die Art natürlich Vorteile. Die
Programmiersprache ist aber meiner Meinung nach nicht entscheidend.

Grüße

Dirk

Re: Abfragen mit PHP oder C?

am 04.08.2006 20:23:12 von MrQuantum

> Im Normalfall werden beide Varianten auf die Datenbank warten. Schneller
> wird deine "C-Client-im-Hintergrund"-Variante kaum sein, eher langsamer.
> Es sei denn du integrierst an dieser Stelle ein intelligentes
> Caching-System. Dann bekommst du auf die Art natürlich Vorteile. Die
> Programmiersprache ist aber meiner Meinung nach nicht entscheidend.
>

Danke Dirk, ich glaube ich hätte mich da vielleicht in etwas verrannt!

Die Sache mit dem "intelligenten" Caching klingt interessant - ist aber
für mich vorab schwer zu sagen, was, wie, wie lange gecached werden
soll. Viellicht setzte ich doch einfach auf ein klass. LAMP-System ...

Danke vorerst!

Chris

Listening to http://213.235.242.241:8018/listen.pls (www.more-ohr-less.at)

Re: Abfragen mit PHP oder C?

am 06.08.2006 11:53:42 von Dominik Echterbruch

MrQuantum wrote:
>>Im Normalfall werden beide Varianten auf die Datenbank warten. Schneller
>>wird deine "C-Client-im-Hintergrund"-Variante kaum sein, eher langsamer.
>>Es sei denn du integrierst an dieser Stelle ein intelligentes
>>Caching-System. Dann bekommst du auf die Art natürlich Vorteile. Die
>>Programmiersprache ist aber meiner Meinung nach nicht entscheidend.
>
> Die Sache mit dem "intelligenten" Caching klingt interessant - ist aber
> für mich vorab schwer zu sagen, was, wie, wie lange gecached werden
> soll. Viellicht setzte ich doch einfach auf ein klass. LAMP-System ...

Vielleicht hilft dir der Hinweis, daß PHP in C geschrieben ist und somit
auch die MySQL Funktionen ohnehin schon auf C basieren. Zusätzlich einen
Prozess zu starten ist mit Sicherheit langsamer, als die in PHP
eingebauten, jahrelang getesteten und optimierten Funktionen zu benutzen.


Grüße,
Dominik
--
Norbert Melzer in d.c.d.mysql:
F: Wie verstehe ich diese FAQ am besten?
A: Studieren Sie Datanbank-Design und lesen Sie anschliessend alles nochmal

Re: Abfragen mit PHP oder C?

am 06.08.2006 15:47:06 von MrQuantum

> Vielleicht hilft dir der Hinweis, daß PHP in C geschrieben ist und somit
> auch die MySQL Funktionen ohnehin schon auf C basieren. Zusätzlich einen
> Prozess zu starten ist mit Sicherheit langsamer, als die in PHP
> eingebauten, jahrelang getesteten und optimierten Funktionen zu benutzen.

War mir schon klar, dass php in C geschrieben ist - genau gesagt der
Interpreter ist in C geschrieben. Und dieser ist ja auch bekannt dafür,
recht flott zu sein. Interpretierter Code kann aber nicht mit C-Code
mithalten, ein einfaches Beispiel:

Ein C-Programm mit folgendem (banalem) Inhalt:

/* test.c */
int main()
{
int i;
for(i=1;i<10000;++i);
return 0;
}


vs. dem analogen php-Script:

#!/usr/bin/php5 // test.sh


liefert einen bedeutenden Unterschied (das C-Programm ist ca. um einen
Faktor 20 schneller fertig als das php-Script), getestet mit
"time ./test" bwz. "time ./test.sh" in einer bash.

Wie auch immer, für jede Datenbankabfrage einen eigenen
Unix/Linux-Prozess zu starten ist sicher nicht der Weisheit letzter
Schluss.

Chris

Re: Abfragen mit PHP oder C? - Nachtrag

am 06.08.2006 15:52:11 von MrQuantum

Mit "... um einen Faktor 20 schneller fertig ..." meinte ich: das
php-Script braucht 20-mal so lang (um von 1 bis 10000 zu zählen). (sic)

Chris

Re: Abfragen mit PHP oder C?

am 06.08.2006 15:52:45 von Dominik Echterbruch

MrQuantum wrote:
>
> War mir schon klar, dass php in C geschrieben ist - genau gesagt der
> Interpreter ist in C geschrieben. Und dieser ist ja auch bekannt dafür,
> recht flott zu sein. Interpretierter Code kann aber nicht mit C-Code
> mithalten, ein einfaches Beispiel:

Das behauptet auch niemand :)

[Etwas PHP und C Code]

Völlig richtig, daß der PHP Code deutlich langsamer ist. Aber den mußt
du doch ohnehin ausführen, um dein C-Programm zu starten. Das heißt
also, daß du bis zum Aufruf deiner MySQL-Bibliothek die exakt gleiche
Performance haben wirst.

Die Stelle, an der du etwas gewinnen würdest (wenn überhaupt) wäre also
nur der Teil, in dem die Datenbankabfrage gemacht wird. Und genau dieser
Teil ist bei PHP *tataaa* C-Code.

Du holst dir also mit etwas selbst geschriebenem nur zusätzliche Last an
Bord, weil du das C-Programm aus PHP heraus starten mußt.

> Wie auch immer, für jede Datenbankabfrage einen eigenen
> Unix/Linux-Prozess zu starten ist sicher nicht der Weisheit letzter
> Schluss.

Die einzige Möglichkeit, wie du das umgehen könntest, wäre, daß du alle
Teile, die auf die Datenbank zugreifen *komplett* in C schreibst. Aber
dann brauchst du vermutlich kein PHP mehr ;)


Grüße,
Dominik
--
Norbert Melzer in d.c.d.mysql:
F: Wie verstehe ich diese FAQ am besten?
A: Studieren Sie Datanbank-Design und lesen Sie anschliessend alles nochmal

Re: Abfragen mit PHP oder C?

am 06.08.2006 20:59:02 von Thomas Rachel

MrQuantum wrote:

> Interpretierter Code kann aber nicht mit C-Code
> mithalten, ein einfaches Beispiel:

[snip]

> liefert einen bedeutenden Unterschied (das C-Programm ist ca. um einen
> Faktor 20 schneller fertig als das php-Script), getestet mit
> "time ./test" bwz. "time ./test.sh" in einer bash.


Richtig - in dem von Dir angegebenen Beispiel belegt das Programm aber
100% der Rechenzeit.

Im Falle einer MySQL-Abfrage sieht die Sache etwas anders aus:

ein Funktions-Aufruf von mysql_query(""), der codemäßig im wesentlichen
nur aus einem Funktionsaufruf besteht, dürfte in beiden Sprachen
ungefähr gleich sein. Der wesentliche Zeitaufwand besteht hier beim
Warten auf die Antwort des MySQL-Servers, und der ist naturgemäß bei
beiden Sprachen gleich.

Was dann die Bearbeitung des Ergebnisses angeht, kann es schon wieder
ganz anders aussehen - eine Schleife à la "while mysql_fetch_row()..."
kann performancemäßig nur so schnell sein wie while-Schleifen in der
jeweiligen Sprache. Da mache ich mir bei PHP allerdings eher weniger
Gedanken, da AFAIK intern eine vorherige Compilation stattfindet.


Anders sieht es z.B. bei Sprachen wie Octave aus. Hier habe ich mir
einmal ein MySQL-Binding geschrieben und dabei festgestellt, daß eine
while-Schleife so unerträglich langsam war, daß ich mir schließlich eine
weitere Funktion mysql_fetch_all (oder so ähnlich) gebaut habe, die das
Ganze dann in C macht und als ein großes cell-Array zurückgibt.


> Wie auch immer, für jede Datenbankabfrage einen eigenen
> Unix/Linux-Prozess zu starten ist sicher nicht der Weisheit letzter
> Schluss.

Auf jeden Fall.


Thomas
--
Ich glaube an das Pferd. Das Auto halte ich für eine
vorübergehende Modeerscheinung. (Kaiser Wilhelm II)

Re: Abfragen mit PHP oder C?

am 07.08.2006 00:02:23 von Ralf Zschemisch

Am Fri, 04 Aug 2006 19:12:46 +0200 schrieb MrQuantum:

Hallo,

> Mich würde interessieren, ob es in einem LAMP-System aus Sicht der
> Perfomace Sinn macht, ein C-Programm zu schreiben, dass die Anfragen an
> die MySQL-Datenbank weiterleitet. Die Logik des Systems stelle ich mir so
> vor:

Du könntest PHP um einen Datenabstraktions-Layer erweitern.

z.b. adoDB kannst du als PHP Erweiterung erhalten
http://phplens.com/lens/dl/adodb-ext-504.zip

aber auch als "normale" PHP Klasse
http://adodb.sourceforge.net/

cu

r23

--
http://www.myoos.de/fraktal/zoom.php