Spidetra
jeudi 13 avril 2006 à 08:32
Si tu veux réussir une migration d'un SGDB vers un autre, il faut l'anticiper.
1. Commence par modéliser tes bases de données. Passe par un outil comme PowerAMC 12, tu as une période d'éssai de 15 jours.
MCD->MPD-> Génération de script de DB.
N'hésite pas à générer des scripts pour +sieurs SGBD : mySQL, postgreSQL, SqlServer, Oracle, DB2, etc....
Garde les au chaud, on sait jamais. Si ton service explose et que tu as besoin d'un oracle
1. Bis Dans la mesure du possible, n'utilise aucune syntaxe SQL spécifique à un SGBD donné. Plus tu seras proche des standard SQL, plus la migration sera facile.
2. Découpe ton application en couche logique : dao/métier/présentation.
Dans ta couche dao tu vas implémenter les fonctions ( ou objet ) d'accés aux données.
tu auras une arbo du style :
dao/mysql/*.php
dao/pgsql/*.php
dao/oracle/*.php
etc...
Ta couche métier fera appel aux fonctions/objet de ta couche dao sans jamais savoir quel est le mode de stockage derrière.
Si tu réussis bien cette séparation, changer de SGBD reviendrat à réecrire une couche dao.
Dans ton cas, tu n'as peut-être pas intérêt à passer par des outils d'abstraction d'accés aux SGBD ( style PEAR :: DB ). Ces outils sont géniaux pour te simplifier l'accés aux DB, par contre tu vas perdre en terme de performance.
Dans un fichier Include tu définis ton path vers la bonne couche DAO.
En théorie, la migration d'un SGBD consistera juste à modifier ce path. En théorie

.
2. Bis Il faudrat prévoir des scripts de migration de données. ça devrait pas être le plus dur.
3. Ta couche métier. Pour simplifier la migration d'un SGBD vers un autre tu as tout intérêt a implémenter ta logique métier en dehors du SGBD.
En clair : transférer les éventuelles procédures stockées du SGBD vers ta couche métier.
Je suis pas tjrs d'accord avec ce point. Les procédures stockées ont l'avantages d'être plus performantes.
ça c'est à voir en fct de ton projet et de tes habitudes de devs.
4 Optimisation des performances :Pour la mise en place d'un outil statistique tu as tout intérêt à séparer le stockage de tes données dans deux bases séparées :
- Premiere base ( DBLog ) : la base de recueil des informations
- Deuxième base ( DBStat ) : la base de consolidation des données.
Cette séparation te permettra, le jour où tu en auras besoin, de mettre tes deux bases sur deux serveurs différents, sans trop de pb.
Ces deux bases ont des spécificités totalement opposées :
- DBLog : sera quasi exclusivement en écriture
- DB Stats : sera quasi exclusivement en lecture
- DBLog :
Tu ne met aucun index sur cette base. Les index améliorent les performances des SELECT. Ils ralentissent les opérations d'INSERT et d'UPDATE.
- DBStat : Tu use et abuse des index dans cette base pour optimiser les opérations de lectures.
DBLog sert à recueillir les stats en temps réels. Chaque nuit tu passes tes scripts de consolidation qui vont transférer les données de DBLog vers DBStats.
Chaque matin tes clients auront leurs stats dispo.
5. Quelle solution de stockage
Petite réflexion perso :
Est-ce qu'un SGBD est la meilleure solution de stockage pour un outil statistique ?
Les SGBD sont performant sur des modèles de données relationnes ?
Les statistiques sont-elles des données relationnelles ?
La phase de consolidation dans un SGBD => Ok, cela pourrait simplifier l'implémentation du projet.
La phase de Log => Est-ce qu'un SGBD est vraiment la structure la plus performante pour logger des stats ?
Est-ce qu'un système de fichier ne serait pas plus performant ?
Comment font xiti, eStat et les autres pour recueillir leurs données ?