IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[Bonne pratique] Mise à jour de la DB


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Par défaut [Bonne pratique] Mise à jour de la DB
    Bonjour à tous,

    Je me pose la question de savoir comment vous mettez à jour la base de données d'un projet déjà en production ?

    - Dans un process à part que vous lancez avant / en même temps que le changement de code ?
    - Dans votre PHP mais dans ce cas, comment faites vous pour savoir si la BD a déjà été mise à jour ou pas ?
    - Autrement ?

    Merci d'avance pour vos réponses.
    Laurent

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 60
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Bonjour...

    Je ne suis pas sûre de bien comprendre ta question, mais je vais te raconter ce que j'ai déjà fait... avec 2 grands cas de figure pour schématiser.

    1) Reprise de données définitive
    Il existe une vieille appli avec une vieille base dédiée...
    Je dois tout refondre...
    Je commence par faire la reprise de données en db, donc tout SQL, puis je développe l'appli, puis quand j'ai fini l'appli, je fais la reprise de données une dernière fois, et hop, on lance en prod, on fait la bascule... et on oublie appli et base ancienne.


    2) Cas du réplicat partiel :
    J'ai des bases mères (énormes) qui restent en prod, et j'ai une appli et une base dédiée qui reprend les données partielles pour alimenter mon appli. Dans ce cas, très très souvent, la MOA est contente si les données ont moins de 24H de fraîcheur. Alors je fais un cron la nuit, cron qui lance une page PHP, et qui reprend toutes les données qui m'intéressent et alimente ma base locale, un cron bavard qui me raconte ce qu'il fait dans les logs. Et quand il a terminé, il vient enfin inscrire dans une dernière table (maj_db) toutes les tables qu'il a mises à jour, et l'heure... Ce qui me permet dans l'appli d'afficher sur toutes les pages un truc dans ce goût : Dernière mise à jour 16/07/2018 02:11:56. Enfin, le cron m'envoie un mail (à moi ou à l'administrateur) pour dire "16/07/2018 02:11:56 Cron nom_de_mon_appli s'est bien déroulé".

    Ainsi ma base locale ne pèse pas sur les grosses bases pendant toute la journée.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Tout doit se faire en même temps, sinon l'appli tombe.

    Il faut un process minimum :

    Dev -> staging -> Prod

    Tu développes tes modifcations, tu passes en staging et quand tout est ok tu mets en prod.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Je propose un 3e cas à ceux présentés par Dendrite : celui de l'évolution de l'application.

    En production on a la version 1. Des développements ont été faits, avec notamment des modifications de la structure de la base, et on doit mettre en production la version 2, sans perdre les données déjà en base bien sûr.
    La procédure idéale serait :
    1. Arrêter l'application.
    2. Passer le script de modification de la base de données, qui contient toutes les modifications entre la version 1 et la version 2
    3. Déployer la nouvelle version du code PHP.
    4. Relancer l'application.


    Évidemment, on a d'abord fait une copie de sauvegarde de la base de données et du code de la version 1, au cas où il faudrait faire un retour arrière en urgence, et idéalement, on a fait une répétition générale sur une copie du serveur de production, histoire d'éliminer les éventuels bugs.

    Une façon de savoir si le code et la base sont en phases, c'est d'avoir quelque part de chaque côté un numéro de version de façon à pouvoir les comparer pour vérifier que les deux moitiés sont à la même version.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 32
    Par défaut
    Merci à vous 3.

    Le cas que j'évoquais était celui de Celira.

    Mais donc si je comprends bien, vous n'incluez pas la mise à jour de la base de données dans votre PHP (par exemple dans un constructeur de classe) ?

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Euh... non ? Les scripts PHP utilisent la base, ils ne la créent pas. (*) Donc on construit/modifie la base avant de lancer la nouvelle version des scripts. Il peut aussi y avoir une initialisation de tables, par exemple pour une table de paramétrage à initialiser avec des données par défaut.

    Sans compter les cas alakon (également connus sous le nom d'applications de la Loi de Murphy). Exemples :
    "on s'est rendu compte en cours de route qu'on avait des données redondantes, donc on a déplacé la colonne d'une table à l'autre, mais il faut agréger les données de l'ancienne colonne dans la nouvelle colonne pour ne pas perdre d'informations"
    "avant cet identifiant était un nombre, mais là on dépasse les valeurs prévues et plutôt que d'incrémenter, on a décidé de mettre une lettre en préfixe, il faut passer la colonne de Integer à Varchar"
    "le statut était un nombre entre 1 et 20, mais là il faut un statut supplémentaire à mettre entre 15 et 16, du coup il faut tout décaler"


    (*) Sauf éventuellement si on utilise un ORM type Doctrine avec une configuration qui construit les tables à partir des entités. Et même dans ce cas, lorsqu'on a une base existante et des modifications à effectuer, je ne suis pas sûre du fonctionnement en cas de base existante.
    D'après mon expérience sur Hibernate en Java, il vaut mieux écrire les scripts SQL (quitte à les exporter à partir des tables générées par l'ORM) et les passer à la main.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Citation Envoyé par LauBelette Voir le message

    Mais donc si je comprends bien, vous n'incluez pas la mise à jour de la base de données dans votre PHP (par exemple dans un constructeur de classe) ?
    En fait cela dépend du contexte et des outils utilisé, si tu utilises Laravel, alors il y a un mécanismse de création, modifcation de table, avec rollback et remplissage de la db.
    Cela permet de travailler en équipe, de versionner le tout.
    Mais même avec un système pareil, tu n’échapperas aux tests de régression.
    Le cas de @Celira cité ci-dessus, sera réalisable via des scripts, mais au prix d'un certain effort, donc à toi de voir la meilleur façon de travailler.
    Maintenant si tu dois multiplier l'installation de ton application, comme par exemple si tu crées le nouveau WordPress ou Drupal, alors là tout en script a vraiment son intérêt.

Discussions similaires

  1. Bonne pratique: mise à jour de base de donnée
    Par vandman dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 06/07/2018, 11h35
  2. Réponses: 0
    Dernier message: 15/07/2014, 21h32
  3. Réponses: 0
    Dernier message: 15/07/2014, 21h31
  4. [MySQL] Mise à jour en base de données - bonnes pratiques
    Par LeGilou dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/10/2012, 13h16
  5. Bonne pratique pour la mise à jour de données en base
    Par abbepierre94 dans le forum Silverlight
    Réponses: 3
    Dernier message: 23/08/2010, 23h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo