Mit PostgreSQL und DBI sowie DBD::Pg ist es möglich, SQL-Queries im Hintergrund asynchron laufen zu lassen – und währenddessen in Perl weitere Berechnungen anzustellen, anstatt nur auf die Daten zu warten. Insbesondere bei Multi-Core-CPUs oder einer Trennung von Datenbankserver und Anwendung ist dies eine sehr praktische Sache.
Und einfach ist es obendrein!
Bei dem jeweiligen Aufruf von $dbh->do, $dbh->prepare oder $dbh->prepare_cached muss nur das Attribut PG_ASYNC hinzugefügt werden. Besonders praktisch ist das bei INSERT und UPDATE Queries, wenn also keine Rückgabewerte ausgewertet werden müssen, da kann man im neuen Query einfach noch auf den Rest des alten warten:
use DBD::Pg qw(:async); # Async-Konstanten einbinden # ... und später Query vorbereiten: my $sth = $self->dbh->prepare( "INSERT INTO table ...", { pg_async => PG_ASYNC + PG_OLDQUERY_WAIT } ); # ... und dann zum Beispiel in einer Schleife aufrufen while ( my @parameter = calculate_next_insert() ) { $sth->execute( @parameter ); } # ...
Wenn man also zwischen mehreren INSERT-Statements noch Eingabedaten berechnen muss, kann dies Zeit sparen. Vor weiteren Queries oder dem Commit sollte man dann noch mit $dbh->pg_result() auf das Ergebnis des letzten asynchronen Queries warten.
Mehr Beispiele und die Darstellung aller Features gibt es in der DBD::Pg Dokumentation.
Hallo!
gibt es dein Buch zu Perl6 schon? Wo kann man das kaufen oder gibt es das zum Free Download hier sogar auf der Seite? Konnte es hier nirgend wo finden...
Oder kannst du mir ein anderes Buch empfehlen?
Nein, leider ist das noch nicht fertig. :-(
Es gibt die englischsprachige Dokumentation und da auch ein "Open Source"-Buch, das allerdings auch in einem frühen Stadium ist.
URLs weiß ich gerade nicht auswendig, lässt sich aber leicht finden.
Oke, danke für den Tipp. Schade natürlich. Wird euer Buch auch als open source erscheinen?