Bonne gestion de la communication MySQL

Starfox37 Messages postés 1 Date d'inscription mercredi 30 août 2023 Statut Membre Dernière intervention 30 août 2023 - 30 août 2023 à 17:08
cs_Trim Messages postés 60 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 4 septembre 2023 - 4 sept. 2023 à 21:32

Bonjour à tous,

Je suis en C# WPF, pour le moment en Framework 4.7.2, ont envisage le Core pour le future projet.

Cela ne fait pas longtemps que je développe avec des bases de données, et plus exactement, SQlite en local et MySQL en distant (parfois Oracle, mais plus rare).

J'ai repris le développement d'un ancien dev, ou il y avait énormément de souci de synchronisation entre les 2 tables (local et distant). Le logiciel doit pouvoir fonctionner en mode dégradé (non connecté), il y a des entrées, sorties de zone, des données à collecter et il y a souvent plusieurs poste qui dialogue donc avec le serveur disposant de MySQL.
Toutes les 5 minutes en moyenne ont synchronise les données.

J'ai modifié pas mal de choses qui permettent d'accélérer grandement les synchronisations. Par exemple, avant il y avait une connexion et déconnexion à chaque requête. Désormais je me connecte lorsqu'il n'est pas connecté et lance une tempo, que je relance à chaque demande de requête, si la tempo arrive à terme, elle coupe la connexion.
Beaucoup d'autre problèmes ont été résolus, parfois il vidait la table avant de la reremplir, mais suite à un plantage ont perdait tout (certains réseaux sont vraiment pourris).

On a constaté que certains sites étaient vraiment capricieux, ont a une fonction, qui est une option, avec un affichage déporté qui appelle directement MySQL toutes les 2 secondes et comme j'ai ajouté des try catch partout avec une écriture en local des erreurs j'ai constaté que cette fonction retournait des erreurs régulièrement de connexion, mais pas toutes les 2 secondes, c'est aléatoire, donc parfois le serveur sature ou le réseaux merde, donc il faut le gérer.


Bref ont prévoir de refaire le logiciel en repartant de zéro, car patch sur patch, à maintenir c'est l'horreur.

J'aimerais donc créer une classe qui puisse bien gérer la communication avec les bases de données, notamment, pour le moment, MYSQL.

Je pensais avoir une pile de requête (ou une classe qui la contient) afin de pouvoir gérer les demandes dans l'ordre et les éventuelles erreur de connexion.
Avoir par exemple 3 essaies avant de déclarer l'erreur. Le retour se ferait avec la même classe, mais cette fois avec les données récupérer, et les informations qui vont bien pour savoir qui doit traiter ce retour.


Avez vous des informations là dessus pour faire les choses correctement et ne pas perdre d'information.
Par exemple, comment bien gérer une synchronisation si j'ai réellement une perte de la base distante, alors qu'il est en cours de synchro. 

La partie distante possède aussi un logiciel administratif, afin d'ajouter des utilisateurs, des autorisations, des zones, récupérer les données etc. bref plein de paramètres, il sera lui aussi à refaire en partant de zéro, mon collègue qui s'en occupe à aussi des gros souci avec ce qu'on fait les ancien dev. La base sera aussi remaniée en même temps.

 

1 réponse

cs_Trim Messages postés 60 Date d'inscription samedi 4 mars 2006 Statut Membre Dernière intervention 4 septembre 2023 3
4 sept. 2023 à 21:32

Salut,

pour les raisons que tu évoques, les connexions distantes à des bases de données sont à éviter. Encore pire si c'est a partir de plusieurs postes. Dépend de ton serveur, mais je ne suis pas sur que MySQL gère une multitude de connexion en parallèle.

Ensuite, quand je lis tous les postes ont une boucle de 2s pour appeler la base, oui c'est normale d'avoir des saturations et des problèmes réseaux, mais ça vient uniquement de ton application.

Je te conseil a faire :

- aucune connexion des postes à la base MySQL, une seule application doit le faire et elle est sur le serveur. De plus tu ajoutes un peu de sécurité.

- l'envoie de donnée depuis les postes clients à faire en appel d'API. L'API serveur te renvoie vrai/faux si le serveur a bien intégrer la donnée.

- si tu as peur des déconnexions, ou souhait de travail en hors ligne, stock les infos en local, puis quand le serveur est revenu, appel tes API les une après les autres.

Bon courage,

Clément


0
Rejoignez-nous