Je voudrais connecter NHibernate à une configuration de réplication maître-esclave MySQL, , donc je voudrais envoyer des écritures au maître, et lire au maître et aux esclaves. Est-ce possible? Je prévois également d'avoir un équilibreur de charge pour équilibrer les lectures. (ldirectord)NHibernate: scission en lecture/écriture
Répondre
sous le capot, nhibernate utilise ado.net pour se connecter aux sources de données. Donc, vous devriez regarder comment ado.net gère cette situation.
Mais en plus, je ne pense pas que vous gagneriez quoi que ce soit si vous pouviez le faire.
Certains arrière-plans: Les objets dans nhibernate sont liés à des sessions, qui sont liées à des usines de sessions, qui sont liées à une connexion. Imaginons que vous ayez un équilibreur de charge avec ip 1 pour les lectures. Et il équilibre les bases de données sur ip 2 et 3. Et vous frappez ip 2 directement pour les écritures.
Vous avez donc
Ip Use
1 Balancer
2 Read/Write
3 Read
Si vous lisez un objet avec une session liée à la connexion 1, vous devez charger cet objet et puis enregistrez et rincer à écrire sur une session liée à la connexion 2. A cette point, vous avez fait 2 lectures et 1 écriture. Considérant que si vous employez une usine de session alors vous avez une lecture et une écriture (en supposant que la même session est vivante par la lecture et l'écriture, ou que la mise en cache de deuxième niveau est mise en place).
Merci, Tim. Un autre plan consisterait à charger les lectures d'équilibrage sur un ensemble d'esclaves et à réserver le maître uniquement pour les écritures. L'inconvénient est que le matériel maître peut être sous-utilisé. Pensez-vous que cela fonctionnerait? – Jacko
en raison de la façon dont nhibernate doit lire pour écrire, je ne pense toujours pas que cela vous apporterait quelque chose. La mise en cache de second niveau en réduit certaines, mais vos caches ne sont pas partagées entre différentes fabriques de sessions (chaînes de connexion), vous aurez donc toujours des lectures redondantes. –
Je pense que ce que vous voulez ici est une sorte de clustering db, quoi qu'il en soit, il doit être transparent (lire 1 chaîne de connexion) pour nhibernate afin d'avoir des gains maximums. –