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

Schéma Discussion :

Modele EAV vs Modele Relationnel


Sujet :

Schéma

  1. #1
    Membre averti Avatar de _Xavier_
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2009
    Messages : 311
    Points : 390
    Points
    390
    Par défaut Modele EAV vs Modele Relationnel
    J'espère que je suis sur le bon endroit.

    Je dois créer un entrepôt de données à partir du modèle EAV de mangento. J'ai quelques années d'expériences en BD mais je suis encore débutant en décisionnel. D'après les quelques lectures que j'ai effectuées sur le forum il serait mieux d'avoir une base de données différente de la base opérationnelle, spécialement pour la production. Pour l'instant je me contente de créer des vues pour obtenir des enregistrements "standards" à partir du nombre considérable de tables que l'on trouve dans un le modèle EAV, une sorte de base de données dans la base principale. Ce qui me pose un problème de performance lié au nombre considérable de jointures engendrées par les requêtes Sql. Pour avoir la liste des produits je fais des jointures sur toutes les tables contenant les différents champs de l'entité produit.

    Je voudrais savoir :
    1) s'il y'a des méthodes efficaces (langage d'interrogation par exemple) pour manipuler "normalement" (afficher des enregistrements complets) les données d'un modele EAV.

    2) si passer du modele EAV au modele relationnel classique juste pour faire du reporting peut être un bon choix.

    3) En dehors de sa stabilité ce que le modele EAV apporte comme plus par rapport au modele relationnel.

  2. #2
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonsoir,
    Attention je ne fait pas un réquisitoire contre mangento. C'est peut-être top.
    Je répond juste à la question EAV vs SGBDr.
    Citation Envoyé par _Xavier_
    Ce qui me pose un problème de performance lié au nombre considérable de jointures engendrées par les requêtes Sql.
    Tu as déjà identifié 1 pb.
    Passée l'ivresse du premier moment ou on se croit le roi du monde parce qu'il n'y a plus rien a modéliser,
    tu prends une grosse baffe quand tu t'aperçois que pour sortir la moindre donnée tu dois taper 4 pages de jointures.
    C'est limite inutilisable coté développeur.

    L'autre pb majeur est un pb de performance.
    EAV est complètement incompatible avec un moteur relationnel. Au dela d'un certain volume les performances s'effondrent.
    J'avais fait l'essai il y a qques années avec oracle 7 (oui je sais je suis joueur).
    De mémoire le seuil était d'environ 200 colonnes et < à 10 000 lignes. (et c'est pas la peine de troller à propos d'Oracle, en tunant à mort on devait probablement faire 1 peu mieux, mais on faisait beaucoup mieux sans tuner avec un modèle classique.).
    Du point de vue du moteur relationnel, il n'existe qu'une seule jointure.
    L'optimiseur du moteur relationnel est incapable de calculer le moindre plan d'accés performant.
    Ttes les données sont accédées séquentiellement. Même si elles sont en mémoire ça finit par être long.

    Citation Envoyé par _Xavier_
    passer du modele EAV au modele relationnel classique juste pour faire du reporting peut être un bon choix.
    C'est mieux clairement, mais le modèle entités-relations n'est pas non plus le plus adapté. Il est optimisé pour des maj rapides sur des petits volumes.
    Tu veux faire du reporting, donc potentiellement lire des gros volumes.
    La solution est d'extraire tes données et de créer un star schéma dans un schema séparé (un datawarehouse quoi).

    Citation Envoyé par _Xavier_
    En dehors de sa stabilité ce que le modele EAV apporte comme plus par rapport au modele relationnel.
    J'ai déjà répondu plus haut. Si tu as des petits volumes, c'est le top de l'évolutivité. Tu es complètement indépendant et tu fais évoluer ta base et donc ton appli comme tu veux, mais au delà d'un certain seuil c'est bon à jeter.

  3. #3
    Membre averti Avatar de _Xavier_
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2009
    Messages : 311
    Points : 390
    Points
    390
    Par défaut
    Merci pour la clairevoyance

    Quand j'ai vu la complexité des requêtes (pour quatres colones de la table produit j'ai fait quatre vues et des jointures externes) , avant même d'aller loin, je me suis dit qu'il doit y avoir un langage autre que le sql pour l'interrogation. .

    Ce matin en fouillant un peu sur le net j'ai vu qu'un cache de la base de données suivant le modèle relationnel a été prévu par magento pour contourner le problème de la lenteur. La nature qui revient au galop.

Discussions similaires

  1. MCD, modele ER et schéma relationnelle ?
    Par Invité dans le forum Schéma
    Réponses: 6
    Dernier message: 25/12/2013, 08h21
  2. Modele decisionnel vs model relationnel
    Par pythonprog dans le forum Approche théorique du décisionnel
    Réponses: 0
    Dernier message: 15/12/2013, 16h35
  3. Passage modele conceptuel au modele relationnel
    Par mutkas10 dans le forum Diagrammes de Classes
    Réponses: 3
    Dernier message: 08/05/2012, 12h14
  4. problémes modele E/A et relationnelle et tables
    Par zakimadrid dans le forum Modélisation
    Réponses: 5
    Dernier message: 07/05/2012, 02h14
  5. Conseils à propos du model EAV
    Par iNath dans le forum Schéma
    Réponses: 1
    Dernier message: 16/04/2012, 19h46

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