phpbar.de logo

Mailinglisten-Archive

Stored Procedures

Stored Procedures

Dirk Munzinger mysql_(at)_lists.phpcenter.de
Wed, 29 Aug 2001 11:22:34 +0200


Moin,

> Ich habe gerade mal ein bißchen im Archiv der allgemeinen
> Mailingliste herumgestöbert. Die Experten sind sich einig, daß
> stored procedures gut durch Middleware, also zum Beispiel php,
> aufgefangen werden kann. Einige bezweifeln sogar den Wert von
> stored procedures und halten es für viel sinnvoller die
> entsprechenden Aufgabe mit Middleware zu lösen.

Das Problem, dass ich immer wieder bei Stored Procedures sehe ist, dass
diese datenbank/herstellerbezogen sind, die verwendete Sprache meist
keiner "Norm" entspricht und die Sprache selbst sehr limitiert ist;
ferner kommt noch hinzu, dass diese sich sehr schlecht debuggen lassen
und man noch eine weitere Sprache lernen muss.
Das Problem bei PHP, Shell-Scripten oder sonstigen dieser Art ist, dass
das jeweilige Script über eine "externe Steuerung" aufgerufen werden
muss (z.B. crond) damit es seine Arbeit tut - dies kann u.U. zu einem
nicht akzeptablen Zeitdelta führen bzw. eine sofortiger Feedback an den
Client ist nicht gegeben - z.B. bei Fehlern in der Ausführung der
Scripte.
Der Ansatz, der von Dana ...? implementiert wurde (siehe
MySQL-Entwickler-Liste) geht wohl in Richtung Script-Exit/Gateway -
soweit ich dies "aus der Ferne beurteilen kann", da ich es noch nicht
selbst getestet habe. Der Nachteil ist wohl hierbei, dass bei der
Ausführung eines (perl)-Scriptes der Perl-Interpreter erst gestartet
werden muss, was auf die Performance drückt. Ferner kommt noch hinzu,
dass die Scripte nicht im Namespace des MySQL-Servers selbst laufen,
also ein Reconnect auf den Server/DB notwendig ist, was zu einer höheren
Last führt.
Was mir gut an dem Konzept gefällt ist, dass die Verwaltung der Scripte
in der DB selbst erfolgt (bitte korrigiert mich jetzt, wenn ich da etwas
falsch sehe).
Mein Ansatz mit "Dexter" (http://dlabs.4t2.com) geht in die Richtung,
dass ich einen Server zwischen den eigentlichen MySQL-Server und die
Clients schalte und den Datenstrom auswerte. Mittels bestimmter Befehle
kann dann die Scriptausführung angesteuert werden. Auch hier ist aber
wieder der Nachteil, dass pro Verbindung eine zusätzliche Verbindung zum
Server aufgebaut werden muss und die Scripte nicht im Namespace des
MySQL-Servers laufen.
Der Vorteil bei beiden Methoden ist, dass durch die Verwendung von Perl
oder anderer, bestehender Sprache nahezu alles möglich ist, was diese
Sprachen so hergeben z.B. Ändern der Daten und gleichzeitiges löschen
der Festplatte.
Mit den beiden Ansätzen lässt sich zwar eine Art Stored Procedure
Funktionalität nachbilden, aber bei Triggern scheitert es dann wieder
und diese sind je nach Anwendungszweck sehr nützlich.

Was ggf. auch schon eine Erleichterung darstellen könnte, wäre die
Möglichkeit Schleifen direkt in MySQL zu "programmieren", die z.B. auf
den internen Variablen aufbauen. Beispiel:

        while _(at)_a > 1000 do
                select _(at)_a := Feldwert1,
                       _(at)_b := Feldwert2
                from tab where ....
                update tab set Feldwert3 = 'Hallo' where id = _(at)_b
        .....
  

Was natürlich noch ganz oben auf meiner Wunschliste steht, sind
Sub-Selects und Views. Soweit ich noch richtig weiss sollen Sub-Selects
in der 4.1er von MySQL kommen aber Views wohl noch etwas dauern.

Gruß, Dirk

---
!!NEU!!
Fragen und Antworten zu MySQL und dieser Liste unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive