Gleichzeitiger DB-Verbindungspool in Haskell

9

Ich bin ein Java-Programmierer, der Haskell lernt.
Ich arbeite an einer kleinen Web-App, die Happstack verwendet und über HDBC mit einer Datenbank kommuniziert.

Ich habe Funktionen und exec geschrieben und verwende sie wie folgt:

%Vor%

Sehr einfach, wie Sie sehen. Es gibt query , params und result .
Verbindungsaufbau und Commit / Rollback-Sachen sind in select und exec versteckt.
Das ist gut, ich will mich nicht in meinem "Logik" -Code darum kümmern.

%Vor%

Schlechte Punkte:

  • Bei jedem Aufruf wird immer eine neue Verbindung erstellt - dies führt bei hoher Auslastung zu Leistungsbeeinträchtigungen
  • DB url "users.db" ist fest codiert - ich kann diese Funktionen nicht für andere Projekte ohne Bearbeitung verwenden

FRAGE 1: Wie wird ein Pool von Verbindungen mit einer definierten (minimalen, maximalen) Anzahl gleichzeitiger Verbindungen eingeführt, so dass die Verbindungen zwischen SELECT / EXEC-Aufrufen wiederverwendet werden?

FRAGE 2: Wie wird die Zeichenfolge "users.db" konfigurierbar? (Wie wird es in den Client-Code verschoben?)

Es sollte ein transparentes Feature sein: Benutzercode sollte keine explizite Verbindungsbehandlung / -freigabe erfordern.

    
oshyshko 17.07.2009, 06:28
quelle

3 Antworten

8

FRAGE 2: Ich habe HDBC noch nie benutzt, aber ich würde wahrscheinlich so etwas schreiben.

%Vor%

Öffnen Sie das Connection irgendwo außerhalb der Funktion, und trennen Sie es nicht innerhalb der Funktion.

FRAGE 1: Hmm, ein Verbindungspool scheint nicht so schwer zu implementieren ...

%Vor%

Sie sollten dieses Wort wahrscheinlich nicht nehmen, da ich es nicht einmal kompiliert habe (und fail ist ziemlich unfreundlich), aber die Idee ist, etwas wie

zu tun %Vor%

und übergeben Sie connPool nach Bedarf.

    
ephemient 17.07.2009, 14:59
quelle
17

Das Paket Ressourcenpool bietet einen leistungsstarken Ressourcenpool, der für das Pooling von Datenbankverbindungen verwendet werden kann. Zum Beispiel:

%Vor%

Erzeugt einen Datenbankverbindungspool mit 1 Unterpool und bis zu 5 Verbindungen. Jede Verbindung darf 10 Sekunden lang inaktiv sein, bevor sie zerstört wird.

    
mndrix 01.05.2012 17:50
quelle
1

Ich habe den obigen Code geändert, jetzt kann er zumindest kompilieren.

%Vor%     
voidlizard 04.02.2011 09:24
quelle