Hallo,
Noch besser ist es, nicht nur eine DB-Verbindung einzusetzen, sondern einen Connection Pool, der dann gleich eine ganze Reihe von Datenbank-Verbindungen vorhält.
Wie ich vor ein paar Tagen erwähnte, eröffnen mod_perl und mod_fastcgi auch andere Möglichkeiten: Datenbank-Verbindungen werden im eigenen Haptspeicher gecached.
Beispiel Data Abstraction Layer für MySQL, Parameter zum Herstellen der Verbindung sind Name der Datenbank und Name der Tabelle:
# Datei factory/dalmysql.pm
# Data Abstraction Layer MySQL
use strict;
use warnings;
use MySQLEAV;
# Cache MySQL Connections
# Zwei Schlüssel im Hash: tabn, base
my %CC_DAL = ();
sub dalmysql{
my $self = shift;
my %in = (
tabn => '',
base => '',
@_);
my $dal = $CC_DAL{$in{base}}{$in{tabn}} || do{
$CC_DAL{$in{base}}{$in{tabn}} = MySQLEAV->new(%in) or die $@;
$CC_DAL{$in{base}}{$in{tabn}};
};
return $dal;
}
1;
Beim ersten Aufruf der Methode wird die Verbindung hergestellt und verbleibt danach im Hauptspeicher, das ist der Hash %CC_DAL.
Bei jedem weiteren Aufruf mit denselben Parametern (DB-Name, Tab-Name) wird keine neue Verbindung hergestellt, sondern die Instanz aus dem RAM geladen. Bei Aufrufen mit anderen Parametern passiert dasselbe.
Das ist sozusagen ein Lazy-Load: Zu Beginn, beispielsweise beim Starten des Webservers gibt es faktisch gar keinen Pool, der wird dynamisch verwaltet.
MfG