Note rapide: J'ai 19 jours pour comprendre les problèmes de mon client.Syntaxe MySQL à la syncronisation de schéma via des triggers?
Contexte: Le client a embauché un entrepreneur qui s'est vanté d'avoir pu obtenir une nouvelle application à la porte dans 3 mois. Deux mois et quelques jours plus tard, on m'a amené et l'individu a été laissé partir; il n'y a pas de code complet, pas de pensée mise dans le schéma, et une abomination pour une interface utilisateur.
J'ai deux applications: une production et mature et l'autre qui a besoin d'amour. On a toutes les données dont j'ai besoin et l'autre non. Je suis en train d'écrire un nouveau style de code TDD et de viser une infrastructure SOA partiellement truquée par un jury qui couvre toutes les questions, sauf les données elles-mêmes. Si j'avais plus de temps, je pourrais utiliser liquibase pour refactoriser les schémas en fragments d'abomination (utilisez votre imagination) mais je ne ... donc le plan B est comme suit:
App A (insère | met à jour | supprime) entité Foo qui met à jour AppASchema.FooTable qui via un post-trigger met à jour le AppBSchema.FooLikeTable et vice versa.
Je sais que c'est une idée folle mais son moindre des pires idées que j'ai, mes préoccupations sont
- possible de créer une boucle sans fin (mises à jour de déclenchement AppA AppB qui met à jour APPA)
- Il n'y a pas de charge élevée, mais cela double fondamentalement les ops à n * 2, donc si j'atteins la moitié de la capacité du serveur MySQL, il semblerait que ce soit effectivement ou presque. Comme une bénédiction mitigée, les concepteurs de schémas originaux ont fait toutes les tables InnoDB moteur ... c'est horrible pour la performance, mais cette configuration pourrait assurer une plus grande chance de garder l'intégrité.
Mon budget de temps pour implémenter les déclencheurs est de 12 heures ou d'un arrêt de buste.
Il existe quelques particularités avec le schéma hérité, en particulier sa sur/sous normalisée. Par exemple Property-> Address -> [City, State, Status, Type], ce qui est bon pour les manuels, mais pas pour les scénarios de charge réelle en situation réelle. – David
C'est bête ... bonne chance pour le reste du projet. –
@James Je ne suis pas un grand fan de Rails mais dans ce cas le membre de l'équipe Rails a réécrit 60% de l'application PHP en une semaine alors que moi-même un autre développeur l'a révisé pour des bugs ... . – David