Schnelle Datenbanksitzungen, Effizienz und Threading in Akka

9

Ich arbeite derzeit mit einer sehr großen Datenbank (& gt; 50 GB) und versuche den effizientesten, brauchbarsten Ansatz zu verstehen, der gut mit Akkas inhärentem Threading funktioniert.

In Bezug auf den Ansatz "alles mit inside withSession {} verpacken", obwohl dies eine einfachere Lösung wäre, befürchte ich, dass dies Akkas Threading zwischen den Akteuren einschränken würde. Ich bin nicht so gut informiert darüber, wie Akkas Threading funktioniert und wie das Umwickeln eines ganzen Actor-Systems innerhalb von withSession es bewirken würde.

Ein anderer Ansatz besteht darin, bei jedem Zugriff auf die Datenbank withSession aufzurufen, was zu ineffizient ist. Das "withSession {" Code-Segment benötigt ~ 6ms zur Ausführung und wir machen Millionen von Abfragen.

Im Wesentlichen: Was ist der beste Weg, schnell auf eine Datenbank mit Slick und Akka zuzugreifen, ohne Threading zu unterbrechen?

Ich habe von Ansätzen gehört, die implizite Sitzungen und Transaktionen verwenden, aber ich habe Mühe, eine Dokumentation zu diesen beiden zu finden.

    
TreeWhale 06.07.2013, 03:22
quelle

1 Antwort

4

Besser spät als nie:

Der empfohlene Weg ist die Verwendung eines jdbc-Verbindungspools (z. B. c3p0). Sie müssen sicherstellen, dass eine Sitzung erworben und zurückgegeben wird und dazwischen in demselben Thread beibehalten wird. withSession lazily erwirbt eine Verbindung aus dem Pool und gibt sie am Ende des Bereichs zurück. Nehmen Sie schnell Verbindungen auf, wenn Sie sie benötigen, und senden Sie sie sofort an den Pool zurück.

    
cvogt 25.03.2014 21:21
quelle

Tags und Links