Comment modifiez-vous votre schéma de firebase database?

Comment préparez-vous vos deltas SQL? enregistrez-vous manuellement chaque code SQL changeant de schéma dans un dossier delta ou disposez-vous d’une sorte de processus de diffusion automatisé?

Je m’intéresse aux conventions de gestion des versions du schéma de firebase database avec le code source. Peut-être un hook de pre-commit qui diffère le schéma?

En outre, quelles sont les options pour la différenciation des deltas en dehors de DbDeploy ?

EDIT: voir les réponses Je voudrais préciser que je connais bien le schéma standard pour exécuter une migration de firebase database à l’aide de deltas. Ma question concerne la création des deltas eux-mêmes, de préférence automatiquement.

De plus, le versionnage est pour PHP et MySQL si cela fait une différence. (Aucune solution Ruby s’il vous plaît).

    Voir

    Existe-t-il un système de contrôle de version pour les modifications de la structure de la firebase database?

    Comment puis-je mettre à jour ma firebase database MS SQL dans SVN?

    et l’article de Jeff

    Obtenez votre firebase database sous contrôle de version

    Je ressens votre douleur et j’aimerais qu’il y ait une meilleure réponse. Cela pourrait être plus proche de ce que vous cherchiez.

    Mécanismes de suivi des modifications du schéma de firebase database

    De manière générale, j’estime qu’il n’y a pas de solution adéquate et acceptée à cette question, et je roule moi-même dans ce domaine.

    Vous pouvez consulter un autre sujet similaire: Comment puis-je mettre à jour ma firebase database MS SQL dans SVN? .

    Si vous recherchez toujours des options: consultez le concepteur de neXtep. C’est un environnement de développement de firebase database GPL gratuit basé sur les concepts de contrôle de version. Dans l’environnement, vous travaillez toujours avec des entités versionnées et pouvez vous concentrer sur le développement du modèle de données. Une fois la version terminée, le moteur de génération SQL branché sur le système de contrôle de version peut générer n’importe quel delta dont vous avez besoin entre deux versions et vous offrira un mécanisme de livraison si vous en avez besoin.

    Entre autres choses, vous pouvez synchroniser et inverser la synchronisation de votre firebase database pendant les développements, créer des diagrammes de modèle de données, interroger votre firebase database à l’aide de clients SQL intégrés, etc.

    Consultez le wiki pour plus d’informations: http://www.nextep-softwares.com/wiki

    Il supporte actuellement Oracle, MySql et PostgreSql et est en Java, donc le produit s’exécute sur Windows, Linux et Mac.

    Je ne gère pas les deltas. Je modifie une firebase database principale et dispose d’un outil qui crée un script de génération basé sur XML basé sur la firebase database principale.

    Lorsque vient le temps de mettre à niveau une firebase database existante, j’ai un programme qui utilise le script de génération basé sur XML pour créer une nouvelle firebase database et les tables nues. Je copie ensuite les données de l’ancienne firebase database en utilisant INSERT INTO x SELECT FROM y puis applique tous les index, contraintes et déclencheurs.

    Les nouvelles tables, les nouvelles colonnes, les colonnes supprimées sont toutes gérées automatiquement et, avec quelques petites astuces pour ajuster la routine de copie, je peux gérer les renommage de colonne, les modifications de type de colonne et autres refactorisations de base.

    Je ne recommanderais pas cette solution sur une firebase database contenant énormément de données, mais je mets régulièrement à jour une firebase database de plus de 1 Go avec 400 tables.

    Vous n’avez pas mentionné le SGBDR que vous utilisez, mais s’il s’agit de MS SQL Server, le comparatif SQL de Red-Gate nous a été indispensable pour créer des deltas entre les scripts de création d’objects.

    Je ne suis pas du genre à me vanter, mais j’ai développé une application Web interne pour suivre les modifications apscopes aux schémas de firebase database et créer des scripts de mise à jour versionnés.

    Cet outil s’appelle le Brésil et est maintenant open source sous une licence MIT. Le Brésil est basé sur ruby ​​/ ruby ​​et prend en charge le déploiement de modifications sur toute firebase database prise en charge par Ruby DBI (MySQL, ODBC, Oracle, Postgres, SQLite).

    La prise en charge de la mise à jour des scripts de mise à jour est prévue.

    http://bitbucket.org/idler/mmp – Outil de gestion de version de schéma pour mysql, écrit en PHP

    Je m’assure que les changements de schéma sont toujours additifs. Je ne supprime donc pas les colonnes et les tables, car cela zapperait les données et ne pourrait pas être annulé ultérieurement. De cette façon, le code qui utilise la firebase database peut être annulé sans perte de données ou de fonctionnalités.

    J’ai un script de migration qui contient des instructions qui créent des tables et des colonnes si elles n’existent pas encore et les remplit de données.

    Le script de migration s’exécute chaque fois que le code de production est mis à jour et après de nouvelles installations.

    Lorsque je souhaite supprimer quelque chose, je le fais en le retirant du script d’installation de la firebase database et du script de migration pour que ces éléments de schéma obsolètes soient progressivement supprimés des nouvelles installations. Avec l’inconvénient que les nouvelles installations ne peuvent pas revenir à une version antérieure à l’installation.

    Et bien sûr, j’exécute les DDL via ces scripts et jamais directement sur la firebase database pour que tout soit synchronisé.

    Nous exportons les données dans un format portable (à l’aide de notre chaîne d’outils), puis nous les importons dans un nouveau schéma. pas besoin de delta SQL. Hautement recommandé.

    J’utilise la firebase database Firebird pour la plupart des développements et j’utilise l’ outil d’administration FlameRobin . Il a une bonne option pour enregistrer toutes les modifications. Il peut tout enregistrer dans un gros fichier ou un fichier par modification de firebase database. J’utilise cette deuxième option, puis je stocke chaque script dans un logiciel de contrôle de version – auparavant, j’utilisais Subversion, maintenant j’utilise Git.

    Je suppose que vous pouvez trouver un outil MySQL qui a la même fonctionnalité de journalisation que FlameRobin pour Firebird.

    Dans l’une des tables de firebase database, je stocke le numéro de version de la structure de la firebase database, afin que je puisse facilement mettre à niveau n’importe quelle firebase database. J’ai également écrit un script PHP simple qui exécute ces scripts SQL un par un sur n’importe quelle firebase database cible (le chemin de la firebase database et le nom d’utilisateur / mot de passe sont fournis sur la ligne de commande).

    Il existe également une option pour consigner toutes les instructions DML (insert, update delete) et je les active tout en modifiant certaines données «par défaut» contenues dans chaque firebase database.

    J’ai écrit un beau livre blanc sur la façon dont je fais tout cela en détail. Vous pouvez télécharger le document au format .pdf avec des scripts PHP de démonstration ici .

    J’ai également développé un ensemble de scripts PHP permettant aux développeurs de soumettre leurs scripts deltasql à un référentiel central.

    Dans l’une des tables de firebase database (appelée TBSYNCHRONIZE), je stocke le numéro de version du dernier script exécuté afin de pouvoir facilement mettre à niveau une firebase database en utilisant l’interface Web ou un client spécialement conçu pour Eclipse.

    L’interface web permet de gérer plusieurs projets. Il supporte également les “twigs” de firebase database.

    Vous pouvez tester l’application sur http://www.gpu-grid.net/deltasql (si vous vous connectez en tant qu’administrateur avec le mot de passe testdbsync). L’application est open source et peut être téléchargée ici: http://sourceforge.net/projects/deltasql

    deltasql est utilisé de manière productive en Suisse et en Inde et est populaire au Japon.

    Il y a quelques mois, j’ai cherché un outil pour gérer le schéma MySQL. J’ai trouvé de nombreux outils utiles, tels que la migration de Docsortingne, la migration RoR, certains outils écrits en Java et en Python.

    Mais personne n’était satisfait de mes exigences.

    Mes exigences:

    1. Aucune exigence, exclure PHP et MySQL
    2. Aucun fichier de configuration de schéma, comme schema.yml dans Docsortingne
    3. Capable de lire le schéma actuel à partir de la connexion et de créer un nouveau script de migration, que de représenter un schéma identique dans d’autres installations d’application.

    J’ai commencé à écrire mon outil de migration et aujourd’hui, j’ai la version bêta.

    S’il vous plaît, essayez-le, si vous êtes intéressé par ce sujet. S’il vous plaît envoyez-moi les demandes futures et les rapports de bogues.

    Code source: bitbucket.org/idler/mmp/src Vue d’ensemble en anglais: bitbucket.org/idler/mmp/wiki/Home Présentation en russe: antonoff.info/development/mysql-migration-with-php-project

    Je suis intéressé par ce sujet aussi.

    Il y a quelques discussions sur ce sujet dans le wiki Django .

    Il est intéressant de noter que CakePHP a intégré le contrôle de version de schéma en utilisant simplement la commande de cake schema generate .

    Pour MySQL

    Quand j’atterris sur une nouvelle firebase database:

    Tout d’abord, je vérifie la structure:

     mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB1_NAME__ | sed 's/ AUTO_INCREMENT=[0-9]*//g' > FILENAME_1.sql mysqldump --no-data --skip-comments --skip-extended-insert -h __DB_HOSTNAME__ -u __DB_USERNAME__ -p __DB2_NAME__ | sed 's/ AUTO_INCREMENT=[0-9]*//g' > FILENAME_2.sql diff FILENAME_1.sql FILENAME_2.sql > DIFF_FILENAME.txt cat DIFF_FILENAME.txt | less 

    Grâce aux utilisateurs de stackoverflow, j’ai pu écrire ce script rapide pour trouver des différences de structure.

    src: https://stackoverflow.com/a/8718572/4457531 & https://stackoverflow.com/a/26328331/4457531

    Dans un deuxième temps, je vérifie les données, table par table avec mysqldiff . C’est un peu archaïque mais une boucle php basée sur information_schema données information_schema fait du travail sûrement

    Pour le contrôle de version, j’utilise la même méthode mais je formate un script de mise à jour SQL (à mettre à niveau ou à restaurer) avec les résultats diff et j’utilise la convention des numéros de version (avec plusieurs modifications, le numéro de version ressemble à une adresse IP) .

     initial version : 1.0.0 ^ ^ ^ | | | structure change: - | | datas added: -------- | datas updated: -------- 

    J’utilise un contrôle de version ssortingct du schéma de firebase database (suivi dans une table séparée). Les scripts sont stockés dans le contrôle de version, mais ils vérifient tous la version du schéma en cours avant d’apporter des modifications.

    Voici l’implémentation complète de SQL Server (la même solution pourrait être développée pour MySQL si nécessaire): Comment gérer la version du schéma de firebase database SQL Server

    Après une longue enquête, je me suis rendu compte qu’il existe des outils tiers ou des types de projets Visual Studio qui ne me satisfont pas, ou simplement des blogs sur la théorie mais pas d’implémentation. J’ai donc mis en place un système de travail utilisé presque un an et expliqué ici:

    http://nalgorithm.com/2015/11/09/database-versioning-part-1/

    selon l’intérêt, continuera à écrire plus.