[Vienna-pm] non-blocking DBI / Postgres

Marinos J. Yannikos | Geizhals.at mjy at geizhals.at
Sun Nov 2 20:58:42 CST 2003


Hi,

hat sich eigentlich schon jemand Gedanken darüber gemacht, wie man mit DBI
mehrere (SELECT-)Queries absetzen und parallel ausführen lassen könnte? Wenn
man Sequenzen wie

execute()...execute()...execute()...fetchall()...fetchall()...fetchall()

verwendet, werden die Queries ja trotzdem sequentiell abgearbeitet, d.h. das
erste execute() blockt schon. Wünschenswert wäre ein Trick, mit dem erst das
erste fetchall() blocken würde (die Latenzzeit für alle Queries sollte so
reduziert werden, wenn man davon ausgehen kann, daß der DB-Server diese auch
effizient parallel abarbeiten kann).

Ich weiß, daß es für Oracle ein spezielles Modul gibt, das einen
"non-blocking mode" unterstützt, aber für Postgres scheint es nichts
derartiges zu geben. Auch dbiproxy hilft leider nicht (obwohl das eigentlich
gehen sollte - zumindest mit mehreren db-handles, die abwechselnd verwendet
werden - aber Fehlanzeige [nicht extensiv getestet, aber so hat's
ausgesehen]).

Hat irgendjemand dafür eine elegante Lösung? Mein schneller Hack dafür
brachte leider eine Performance-Verschlechterung ;-) (fork() mit mehreren
Child-Prozessen, die Queries im plaintext erhalten und das Ergebnis im
Storable-Format an den parent schicken - ugh).

MfG,
-mjy




More information about the Vienna-pm mailing list