2009-08-24 8 views
0

Was ist eine gute serverseitige Sprache für einige schöne CPU- und speicherintensive Dinge, die gut mit php und mysql funktionieren? Derzeit habe ich ein PHP-Skript, das einige Berechnungen basierend auf einer großen Teilmenge einer ziemlich großen Datenbank ausführt und dann diese Datenbank basierend auf diesen Berechnungen (1,5 Millionen Zeilen) aktualisiert. Die aktuelle Implementierung ist sehr langsam und dauert 1-2 Stunden, abhängig von anderen Aktivitäten auf dem Server. Ich hoffte, dies zu verbessern und fragte mich, was die Meinungen der Leute zu einer guten Sprache für diese Art von Aufgabe sind?Serverseitige Sprache für cpu/speicherintensive Prozesse

Antwort

2

Die Sprache ist nicht das Problem, Ihr Problem ist wahrscheinlich wo Sie diese Berechnungen tun. Klingt, als ob Sie besser in SQL schreiben könnten, wenn möglich. Ist es? Was machst du?

+0

Ja, sollte es möglich sein. Glauben Sie, dass das die besten Ergebnisse bringen würde? – giroy

+0

Auf jeden Fall. Es bedeutet, dass es direkt auf Ihrem Server ausgeführt wird, und die Daten müssen nicht in PHP/Was immer zuerst übertragen werden. –

3

Wo ist der Flaschenhals? Führen Sie ein echtes Profiling durch und sehen Sie, was genau das Problem verursacht. Ist es die DB I/O? Ist es die CPU? Ist der Algorithmus ineffizient? Rufen Sie langsame Bibliotheksmethoden in einer engen inneren Schleife auf? Könnte Vorberechnung verwendet werden.

Sie fragen sich, welches Fahrzeug Sie benötigen, um von A nach B zu gelangen, und Sie haben einen LKW, ein Auto, ein Fahrrad, ein Flugzeug, einen Jet und einen Helikopter angeboten. Die Antwort ergibt keinen Sinn ohne mehr Kontext.

+0

Können Sie mir bitte irgendwelche guten Werkzeuge zum Profilieren vorschlagen? – giroy

+0

http://www.linuxjournal.com/article/7213 Mai oder kann nicht nützlich sein. Das sieht nach dem cprofile-Modul für Python aus, das ich sehr praktisch fand. –

0

Ich vermute, Ihr Engpass ist nicht die Berechnung. Es dauert definitiv einige Stunden, um ein paar Millionen Datensätze zu aktualisieren.

Wenn das der Fall ist, können Sie eine benutzerdefinierte Funktion in C/C++ für MySQL schreiben und die Funktion in der gespeicherten Prozedur ausführen.

Wir tun dies in unserer Datenbank, um einige sensible Felder während der Schlüssel-Rotation neu zu verschlüsseln. Die Schlüsselrotationszeit wurde von Tagen auf Stunden verkürzt. Es ist jedoch mühsam, eine eigene MySQL-Kopie zu erstellen. Wir haben nach Alternativen gesucht, aber nichts ist der Leistung dieses Ansatzes nahe gekommen.