Partage
  • Partager sur Facebook
  • Partager sur Twitter

BDD distante : comment sync local en temps réel ?

Réplication ? Master-Master sur plusieurs postes ? Synchronisation ?

Sujet résolu
19 septembre 2020 à 15:13:09

Salut !

Je ne sais pas trop comment nommer ce que je cherche, je pense que c'est de la "synchronisation temps réel" de base de données MySQL. La réplication ne semble pas répondre à mon besoin.

Ma première question est assez large : comment feriez-vous pour partager une base de données entre plusieurs "local", sachant que tout le monde est légitime à modifier la base de données (tout le monde peut faire du SELECT/INSERT/UPDATE...)

Voilà mon soucis dans le détail !

Nous sommes plusieurs personnes à travailler sur un projet pour concevoir un site web. Chacun sur nos machine respective (environnement "AMP" : Apache/MySQL/PHP) touche à sa partie. Le code est sur GIT ce qui nous permet de travailler sereinement chacun de son côté. Au niveau fichiers c'est donc OK, reste la partie base de données !

Le problème c'est que la base de données évolue constamment (c'est lié aux compétences de chacun). La structure et les données bougent donc toutes la journée. Ces évolutions sont essentielles pour que tout le monde puisse travailler... à tel point que ça nous oblige, plusieurs fois par jour, à fusionner nos bases de données pour avoir des éléments à jour. Un véritable casse-tête qui prend un temps fou et bloque tout le monde. Il faut que tout le monde arrête de modifier la base, donne sa base, qu'on fusionne, qu'on renvoie...

Nous avons donc décidé de mettre en ligne, sur le serveur de pré-prod, la base de données MySQL. Idéal pour centraliser et se partager la base ! Malheureusement, le fait que la base soit distante ralenti considérablement chaque requête. Là où il fallait 2-3s pour charger une page avec la base en local, il faut maintenant 8-10s o_O . C'est donc très chaotique pour travailler convenablement.
(Je précise : quand le projet est totalement hébergé sur la pré-prod (fichiers + BDD), il lui faut 1-2s pour charger une page. Le serveur n'est pas un foudre de guerre, mais ça tourne bien).

Deuxième question : est-il bon de centraliser la base en l'hébergeant sur un serveur distant ? Y-a t'il un paramétrage à prévoir côté serveur ? J'ai lu à plusieurs endroit d'indiquer comme "hôte" l'adresse IP plutôt que le nom pour éviter la résolution DNS. Ça n'a pas été probant.

J'aurais beaucoup aimé que cette solution fonctionne directement, car elle très simple à mettre en œuvre et à maintenir.

.

En attendant, j'ai tenté de mettre en place le système de réplication natif de MySQL. La pré-prod devient le serveur "maitre", et mon local devient le serveur "esclave". Ça fonctionne mais ça ne répond pas à mon besoin. En effet, si je touche la BDD sur mon local, la base de données sur le serveur ne bouge pas ! En revanche, si la base de données sur le serveur évolue, alors mon local est automatiquement mis à jour.

Troisième question : dans le cas d'une réplication native MySQL "maitre/esclave", est-il possible de faire en sorte un lien "maitre principal"/"maitres secondaires" (peu importe le nombre de maitres secondaires) ?

Merci !

  • Partager sur Facebook
  • Partager sur Twitter
19 septembre 2020 à 19:25:40

Bonjour,

Déplacement vers un forum plus approprié

Le sujet est déplacé de la section Base de données vers la section Discussions développement

Je ne suis pas expérimenté en développement collaboratif, mais je ne suis pas certain que votre vision soit correcte ...

Je pense que le versioning doit être de mise dans votre cas. Une gestion adaptée avec GIT (par exemple) semble être nécessaire ici ... Chacun travaille sur sa branche, et pull ses modifications ensuite sur le master ... Le versioning de base de données est également pertinent (cf. liquibase) ...

Au passage, la réplication de la BDD ne s'applique pas dans se contexte ...

Plusieurs frameworks de développement incluent une gestion du modèle de données (avec des classes spécifiques) et aident à "faire vivre" la base de données.

Maintenant dans le besoin exprimé, une BDD distante et commune associée au dépôt (GIT par exemple) semble être le meilleur choix possible.

Mais attention à ne pas trop mélanger les genres, chacun son rôle, et seul un (voir quelques) développeur du groupe devrait pouvoir modifier la structure de la base, et centraliser les besoins des autres développeurs.

Darev a écrit:

Là où il fallait 2-3s pour charger une page avec la base en local, il faut maintenant 8-10s o_O 

2s en local c'est déjà trop, et je ne vois pas comment cela pourrait être multiplié par 4 juste en passant la BDD à distance ... A mon avis il y a un gros problème d'optimisation des requêtes SQL ... Vous utilisez un framework ?

Sinon, il serait bien de faire un peu de recherche sur le développement collaboratif et le versioning ;)

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
20 septembre 2020 à 10:33:03

EDIT 2021

Au final, nous avons résolu notre problème.
C'est la BDD de pré-prod qui est la BDD de référence : cela signifie qu'on passe par la pré-prod quand on a besoin de modifier les données.

En local, nous avons un script qui va chercher en quelques secondes la BDD de pré-prod, et la ré-importe directement sur les machines en local. C'est très rapide et facile à utiliser.

Les modifications structurelles sont rares au final, seules les données réelles changent constamment. Du coup, lorsqu'il doit y avoir un changement structurelle, on peut se permettre de dire à tout le monde "pas toucher".

D'un point de vue organisation du travail : les dév GIT toujours via leur local. Quand on doit intégrer des éléments dans la BDD, on passe via la pré-prod, et on utilise notre script. Aucun soucis.
Les personnes en charge du contenu même peuvent continuer de s'y atteler sans problème. On continue de déployer en continue sur la pré-prod sans soucis.

-
Edité par Darev 1 août 2021 à 15:18:12

  • Partager sur Facebook
  • Partager sur Twitter