Ich möchte NHibernate mit einer MySQL Master-Slave Replikationskonfiguration verbinden, sodass ich Schreibvorgänge an den Master senden kann und Lesevorgänge an den Master und die Slaves. Ist das möglich? Außerdem plane ich, einen Lastausgleicher (ldirectord) zu verwenden, um die Lesevorgänge zu balancieren.
Antwort
Zu viele Anzeigen?Unter der Haube verwendet NHibernate ADO.NET, um eine Verbindung zu Datenquellen herzustellen. Daher müssten Sie sich ansehen, wie ADO.NET mit dieser Situation umgeht.
Aber zusätzlich denke ich nicht, dass Sie dadurch etwas gewinnen würden.
Einige Hintergrundinformationen: Objekte in NHibernate sind an Sitzungen gebunden, die an Sitzungsfabriken gebunden sind, die mit 1 Verbindung verbunden sind.
Angenommen, Sie haben einen Load-Balancer mit der IP 1 für Lesevorgänge. Und er balanciert Datenbanken auf den IPs 2 und 3 aus. Und Sie erreichen IP 2 direkt für Schreibvorgänge.
Also haben Sie
IP Verwendung
1 Balancer
2 Lesen / Schreiben
3 Lesen
Wenn Sie ein Objekt mit einer an Verbindung 1 gebundenen Sitzung lesen, müssen Sie dieses Objekt laden und dann speichern und leeren, um auf einer Sitzung, die an Verbindung 2 gebunden ist, zu schreiben. Zu diesem Zeitpunkt haben Sie 2 Lesevorgänge und 1 Schreibvorgang durchgeführt. Währenddessen haben Sie bei Verwendung einer Sitzungsfabrik einen Lese- und einen Schreibvorgang (vorausgesetzt, dieselbe Sitzung ist während des Lesens und Schreibens aktiv oder dass ein 2nd-Level-Cache eingerichtet ist).