Je suis à la recherche d'une réponse de haut niveau, mais voici quelques précisions au cas où cela serait utile, je suis en train de déployer une application J2EE sur un cluster dans WebLogic. Il y a une base de données Oracle au backend.Existe-t-il de bons modèles pour les logiciels distribués et une base de données backend pour ce problème?
Un écoulement normal de l'application est
- utilisateurs se nourrissent des données (à insérer sous forme de lignes) à l'application
- les temps d'attente d'application pour les données pour accéder à une certaine taille et ne un insert lot dans la base de données (seulement 1 validation)
Il existe une contrainte dans la base de données empêchant les insertions de données "en double". Si l'application obtient une violation de contrainte, elle devra revenir en arrière et réinsérer une ligne à la fois, afin que les lignes dupliquées puissent être "renommées" et insérées.
Supposons que j'ai exécuté deux instances de l'application. Chacune des instances est sur le point d'insérer 1000 lignes. Même s'il n'y a qu'un seul doublon, une instance devra revenir en arrière et insérer les lignes une par une.
Je peux facilement voir qu'il serait plus judicieux de réinsérer les 999 lignes non conflictuelles en tant que lot dans ce cas, mais que se passerait-il si j'avais 3 applications en cours d'exécution et que 999 lignes risquaient d'être dupliquées?
Donc, ma question est la suivante: existe-t-il un modèle de conception pour ce genre de situation?
Ceci est une longue question, alors s'il vous plaît laissez-moi savoir où clarifier. Merci pour votre temps.
EDIT: Les 1000 lignes de données sont en mémoire pour chaque instance, mais elles ne peuvent pas voir les lignes les unes des autres. La seule façon dont ils savent si une ligne est un doublon est quand il est inséré dans la base de données.
Et si la conception de l'application actuelle n'a pas de sens, n'hésitez pas à suggérer de meilleures façons de résoudre ce problème. J'apprécierais beaucoup.
Quel est le problème que vous essayez de résoudre en insérant des lignes en lots de 1000 plutôt que de manière individuelle? – Tim
Selon mon DBA, l'insertion par lots augmente les performances car nous traitons des millions de lignes par jour. – Russell
La question de savoir si les données sont collectées en mémoire et si les mêmes données peuvent être collectées sur les multiples nœuds n'est pas claire. –