Question

Beaucoup d'applications web ayant une architecture à 3 niveaux font tout le traitement dans le serveur d'applications et d'utiliser la base de données de persistance juste pour avoir l'indépendance de base de données. Après avoir payé une énorme somme pour une base de données, faire tout le lot de traitement, y compris au niveau du serveur d'application et ne pas utiliser la puissance de la base de données semble être une perte. J'ai du mal à convaincre les gens que nous devons utiliser meilleur des deux mondes.

Était-ce utile?

La solution

Cela dépend de votre application. Vous devez définir les choses afin que votre base de données fait bases de données choses sont bonnes pour. Un enfant de huit tables se joindre à travers des dizaines de millions d'enregistrements ne sont pas quelque chose que vous allez vouloir gérer dans votre niveau d'application. N'effectue des opérations globales sur des millions de lignes émette petits morceaux d'information sommaire.

Par contre, si vous êtes juste faire beaucoup de CRUD, vous ne perdez pas beaucoup en traitant cette grande base de données coûteuse comme un dépôt muet. Mais de simples modèles de données qui se prêtent à une application axée sur le « traitement » finissent parfois vous menant sur la voie de l'inefficacité rampante imprévues. nœuds de conception. Vous vous trouvez dans le traitement recordsets le niveau d'application. Vous cherchez les choses d'une manière qui commencent à se rapprocher les jointures SQL. Finalement, vous refactoring douloureusement ces choses à niveau base de données où ils courent des ordres de grandeur plus efficacement ...

Alors, ça dépend.

Autres conseils

Qu'est-ce que le « pouvoir » de la base de données que vous n'utilisez pas dans un archiecture 3 niveaux? On peut supposer que nous exploitons SQL pleinement, et toute la gestion des données, la pagination, la mise en cache, l'indexation, l'optimisation des requêtes et des capacités de verrouillage.

Je suppose que l'argument est où devrait être mis en œuvre ce que nous pourrions appeler « la logique métier ». Dans le serveur d'application ou dans la procédure stockée de base de données.

Je vois deux raisons de le mettre dans le serveur d'application:

1). Évolutivité. Il est relativement difficile d'ajouter des moteurs plus datbase si le DB est trop occupé. Partitionnement des données sur plusieurs bases de données est vraiment délicate. Ainsi, au lieu tirer la logique métier vers le niveau de serveur d'applications. Maintenant, nous pouvons avoir de nombreuses instances de serveur d'applications tout faire la logique métier.

2). Maintenabilité. En principe, le code de procédure stockée peut être bien écrit, modularisation et resuable. En pratique, il semble beaucoup plus facile d'écrire du code maintenable dans un langage OO tels que C # ou Java. Pour certains réutilisation raison dans des procédures stockées semble se produire par couper et coller, et ainsi au fil du temps la logique métier devient difficile à maintenir. Je concède que la discipline cela ne doit pas arriver, mais la discipline semble être en pénurie en ce moment.

Nous devons faire attention à exploiter réellement les capacités de requête de base de données au complet, par exemple en évitant de tirer de gros volumes de données sur le niveau du serveur d'application.

Non

. Ils doivent être utilisés pour les règles d'affaires application ainsi.

Hélas le SGBD gros chiens sont soit pas assez compétent ou pas disposé à soutenir ce, ce qui rend cet idéal impossible, et de garder leurs clients en otage à leurs principales vaches en espèces.

Je l'ai vu une application conçue (par un gars assez intelligent) avec des tables de la forme:

id | one or two other indexed columns | big_chunk_of_serialised_data

L'accès à ce dans l'application est facile: il existe des méthodes qui charge un (ou un ensemble) d'objets, deserialising comme nécessaire. Et il existe des méthodes qui serialise un objet dans la base de données.

Mais comme prévu (mais seulement avec le recul, malheureusement), il y a tellement de cas où nous voulons interroger la base de données d'une certaine façon en dehors de cette application! Ceci est travaillé autour est de diverses façons: une interface de requête ad-hoc dans l'application (qui ajoute plusieurs couches de indirection pour obtenir les données); la réutilisation de certaines parties du code d'application; Code désérialisation écrit à la main (parfois dans d'autres langues); et simplement devoir faire sans tous les champs qui sont dans le bloc désérialisé.

Je peux facilement imaginer la même chose se produit pour presque toutes les applications: il est juste pratique pour pouvoir accéder à vos données. Par conséquent, je pense que je serais assez opposé à stocker des données sérialisés dans une véritable base de données - avec des exceptions possibles lorsque l'économie l'emporte sur l'augmentation de la complexité (un exemple étant le stockage d'un tableau de ints 32 bits)

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top