IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Optimisations SGBD Discussion :

Grosse table : Vue ou plusieurs tables?


Sujet :

Optimisations SGBD

  1. #1
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 258
    Points : 156
    Points
    156
    Par défaut Grosse table : Vue ou plusieurs tables?
    Bonjour,

    je dois commencer un nouveau projet et je suis en train de me poser les question d'architecture DB avant de commencer (et oui, de temps en temps, on réfléchit ;o))

    Bref, c'est une appli pour plusieurs centres qui ont les mêmes articles (enfin presque) et les mêmes clients. Donc une table article et client commune (ok, facile).

    Mais par contre, toutes les ventes sont spécifiques à un centre. Il faut pouvoir avoir l'historique d'un article ou d'un client (inter centre). Mais la table va grossir très vite vue le nombre de vente qu'il y a par jour. Multiplié par le nombre de centre, cela va vite ralentir le système. L'ancien système (désuet) avait une db par centre. mais impossible (sans grosse fusion des tables avant) d'avoir rapidement les données statistiques des ventes d'un produits ou d'un client intercentre.

    Je me suis dit que peut-être les vues permettrait d'avoir rapidement les données d'un centre (mais attention aux insert et update) si on les filtres par clé de centre. Tout en laissant la possibilité de faire des requêtes intercentre pour les statistiques.

    Ou alors on fait une table vente par centre et des unions quand on veut avoir les données groupées.

    qu'en pensez-vous? Quelle est la meilleurs architectures à votre avis (ou une autre idée à laquelle je n'aurais pas pensé)

    Merci d'avance

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut
    je dois commencer un nouveau projet et je suis en train de me poser les question d'architecture DB avant de commencer (et oui, de temps en temps, on réfléchit ;o))
    On est là pour ça. en effet.

    Bref, c'est une appli pour plusieurs centres qui ont les mêmes articles (enfin presque) et les mêmes clients. Donc une table article et client commune (ok, facile).
    Mais par contre, toutes les ventes sont spécifiques à un centre. Il faut pouvoir avoir l'historique d'un article ou d'un client (inter centre).
    OK.

    Mais la table va grossir très vite vue le nombre de vente qu'il y a par jour.
    Tu as de la chance, il y a un système existant qui te permet de chiffrer la croissance journalière de la table et annuelle. Tu peux donc dimensionner ta base pour les 3 prochaines années à l'aide de power amc.

    Multiplié par le nombre de centre, cela va vite ralentir le système.
    Il faut se donner les moyens de ses exigences, à base de grande dimension, serveur de grande dimension. Après avoir dimensionner ta base, tu dois dimensionner ton futur serveur pour la taille de ta base de données et pour répondre aux accès concurrents que ne manqueront pas de faire les différents magasins.

    A ce niveau, j'ai quand même un doute, moi aussi... Je sais qu'il existe des bases de données de plusieurs tera-octets, là dessus, pas de problème. Mais Comment un serveur unique peut répondre à un trés trés grand nombre de demandes ? A mon tour d'être interogatif ?

    L'ancien système (désuet) avait une db par centre. mais impossible (sans grosse fusion des tables avant) d'avoir rapidement les données statistiques des ventes d'un produits ou d'un client intercentre.
    OK.

    Je me suis dit que peut-être les vues permettrait d'avoir rapidement les données d'un centre (mais attention aux insert et update) si on les filtres par clé de centre. Tout en laissant la possibilité de faire des requêtes intercentre pour les statistiques.
    Une vue MONCENTREA permet en effet de voir les données du centreA. Tu peux donc écrire tes requêtes vers la vue MONCENTREA comme si il avait une existence physique.

    (mais attention aux insert et update)
    Une vue ( si elle n'est pas indexable ) n'est pas matérialisée, les données vont être cherchés à chaque fois par conséquent, aucun soucis pour les insert et les update, ils sont toujours à jour.

    Ou alors on fait une table vente par centre et des unions quand on veut avoir les données groupées.
    Cette solution ne me semble pas respecter l'éthique de conception d'une base de données. Je me trompe peut être.

    De toute façon, je pense qu'il est plus efficace de faire une vue en restriction ( table unique avec idcentre ) qu'une vue en union ( tables centres multiples ).

    Ensuite, le problème des accès concurrents nombreux à la base se posera quand même puisque les tables sont dans la même base.

    qu'en pensez-vous? Quelle est la meilleurs architectures à votre avis (ou une autre idée à laquelle je n'aurais pas pensé)
    Merci d'avance
    La solution de la table unique pour l'ensemble des centres me parrait une bonne idée. Il suffit de dimensionner.

  3. #3
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Bonjour,

    Je pense que l'utilisation d'une vue par centre est tout a fait correcte.
    A savoir que lorsque tu fait une modification sur une vue elle est faite aussi sur la table source, tu n'as pas de souci a te faire pour les insert et les update. Par contre attention si ta vue a été construite avec des jointures tu ne pourra pas effectuer ces opérations, mais dans ton cas puisque tu veux utiliser une vue pour récupérer seulement une partie d'une table il n'y a pas de problèmes.

    La question est plutôt de savoir si la base de donnée sera seulement volumineuse, où bien alors elle devra gérer beaucoup d'accès concurrents.

    Si elle est seulement volumineuse il n'y a pas de problèmes, en revanche si tout tes centres l'utilise de manière intensive en même temps, il faudrait en effet répartir la charge en plusieurs serveurs avec des réplications.
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 759
    Points : 52 540
    Points
    52 540
    Billets dans le blog
    5
    Par défaut
    A ce niveau, j'ai quand même un doute, moi aussi... Je sais qu'il existe des bases de données de plusieurs tera-octets, là dessus, pas de problème. Mais Comment un serveur unique peut répondre à un trés trés grand nombre de demandes ? A mon tour d'être interogatif ?
    Parallélisme + granularité du verrouillage...

    Plus il y a de proc en // plus de clients peuvent être servit simultanément.

    Plus le verrouillage porte sur une donnée fine, plus de clients peuvent être servit simultanément.

    Il faut bien entendu dimensionner correctement le serveur.
    Par exemple sous SQL Server il faut environ 1 carte réseau et 1 proc par 1000 à 2000 utilisateurs.
    Pour les plus grosses solution on tourne à 35 000 utilisateurs simultanément (exemple serveur Eurydile du registre du commerce).

    A +

    A
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. vue sur plusieurs tables
    Par lynnaryas dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 30/04/2012, 18h16
  2. Vue sur plusieurs tables
    Par fhmayn dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2010, 10h21
  3. Réponses: 7
    Dernier message: 17/03/2007, 13h52
  4. Découper une table access en plusieurs table automatiquement
    Par monsieuryaya2 dans le forum Access
    Réponses: 2
    Dernier message: 29/11/2005, 12h37
  5. plusieurs tables dans une seule table
    Par scully2501 dans le forum Access
    Réponses: 1
    Dernier message: 10/10/2005, 09h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo