2011-06-29 3 views
4

Nous sommes en train de créer une nouvelle stratégie pour nos applications internes. Nous avons actuellement environ 10-15 applications qui vont directement à la même base de données. Ce n'est évidemment pas très bon et nous voulons évaluer nos options. Pour autant que je peux voir que nous avons des choix:Plusieurs applications pour une architecture de base de données unique

  • Dupliquer la base de données et en utilisant la réplication etc pour les avoir en synchronisation
  • Créer une nouvelle application entre la base de données et les applications 10-15 sur le dessus.
  • Autre?

Je voudrais beaucoup entendre vos opionions à ce sujet. Je crois que la deuxième option est la voie à suivre, qui nous donne également une couche efficace pour implémenter la mise en cache. Mais comment exposeriez-vous cette couche pour toutes les applications? Les services Web/repos seront-ils la voie à suivre ou y a-t-il d'autres meilleures façons de le faire?

Répondre

2

Je pense que le mot à la mode répond à cette "architecture orientée service" - qui est en effet l'option 2.

Il est une entreprise à grande échelle, avec de nombreuses impasses passionnantes à explorer - mais au fond, au lieu de penser à des bases de données et tables, pensez aux services que ces 15 applications ont besoin. Certains peuvent être partagés, d'autres peuvent être spécifiques à une application. Trouver un moyen d'exposer ces services aux applications - mais rappelez-vous qu'un appel de service Web peut être nettement plus lent que l'équivalent appel de la base de données directe, donc ne prenez pas « l'architecture orientée services » signifie que vous devez introduire des services Web partout - C'est plus un état d'esprit qu'une spécification de produit.

réplication et de synchronisation - dans mon expérience - créer des systèmes très fragiles, avec des modes de défaillance qui font mal le cerveau même de penser.

Autres - bien, vous ne dites pas vraiment ce que le problème spécifique que vous essayez de résoudre. Si ses performances - la façon la moins chère de résoudre les problèmes de performance jette le matériel au problème. Si c'est une question de gestion - une architecture SOA peut aider à cela -, elle introduit également souvent une infrastructure supplémentaire dans le mix qui doit également être maintenue. Assurez-vous de bien comprendre ce qui détermine vos choix d'architecture, car il n'y a pas de «meilleure» solution - tout est une question de compromis.

2

Je ne vois pas pourquoi 10-15 applications doivent partager une base de données? Est-ce que toutes les applications doivent vraiment utiliser toutes les tables?

Commencez par déplacer toutes les tables uniques pour chaque application vers une base de données distincte. Une fois terminé, il devrait être assez facile de voir s'il y aura des problèmes avec plusieurs applications accédant à la même base de données. Normalement, cela n'a pas d'importance à moins que les applications ne commencent à mettre en cache des données (puisque vous ne saurez jamais si une autre application a mis à jour certaines données que vous cachez). L'approche la plus typique consiste à utiliser une sorte de messagerie pour cela.

+0

Eh bien, cela est compliqué car cela est un mélange de vieux et plus récente application. Cette base de données contient toutes les données des clients. Il y aura donc un énorme travail pour extraire les tables uniques et la plupart des tables sont partagées par deux applications ou plus. L'approche de la messagerie est absolument discutée, mais je ne vois pas de façon "facile" de mettre en œuvre cela sans presque tout recommencer .. – femseks

+0

oui, c'est un travail énorme. Que pensez-vous que ce sera quand vous avez 5 ou 10 demandes de plus? – jgauffin

+0

Je maintenais 5 applications dans 2 bases de données. Certains étaient plutôt complexes. Une fois familiarisé avec le code, j'ai ouvert MS Visio et je l'ai fait créer automatiquement un diagramme de toutes les tables de chaque base de données. J'ai ensuite regroupé les tables du mieux possible par fonctionnalité et j'ai placé des blocs de couleur autour de chaque groupe. J'ai fini non seulement avec une meilleure compréhension de la base de données, mais j'ai aussi trouvé des tables qui n'étaient même pas utilisées. Il a également rendu l'ajout de nouvelles fonctionnalités beaucoup plus facile. – Raystorm

3

Analyser les options que vous exposiez:

Dupliquer la base de données et utiliser la réplication etc pour les avoir en synchronisation

Si toutes les applications doivent accéder à la même base de données, je trouve la duplication C'est une mauvaise décision, car vous devrez faire face à des problèmes de synchronisation (données obsolètes, etc.).

Créez une nouvelle application entre la base de données et les 10-15 applications en haut.

Ceci est en effet une bonne possibilité. Si vous ne souhaitez pas que toutes ces applications dépendent des détails d'implémentation de la base de données (par exemple, une modification affectant le code de toutes les tables), vous pouvez "masquer" la base de données derrière une application qui offre " opérations «significatives» pour ces «applications client».

Si vous rencontrez des problèmes de performances, je suggère de regrouper la base de données (au lieu de la duplication manuelle).

1

Une option non mentionnée est d'avoir une partie de la logique dans les procédures stockées/déclencheurs etc ... Pas une bonne idée, mais une idée non moins.

Je dirais que votre deuxième option est le meilleur pari ici. Si vous êtes sur la plate-forme. NET, WCF est vraiment facile et puissant.

+0

Nous avons déjà de gros problèmes avec beaucoup de logique dans la base de données, ce qui rend cela très difficile à maintenir et crée aussi beaucoup de problèmes difficiles à comprendre. En ajoutant une couche au-dessus de la base de données, notre plan serait d'extraire une partie de cette logique vers le code. – femseks

+0

Oui, je conseille vivement contre toute logique dans la base de données, il est d'ordre procédural, lourd, éparpillés partout, et très très difficile à maintenir. Une couche qui expose la base de données est pratiquement votre seule option réelle ici. gl –

Questions connexes