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

Silverlight Discussion :

Lazy loading & BDD


Sujet :

Silverlight

  1. #1
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut Lazy loading & BDD
    Bonjour,
    Comme a mon habitude, j'ai un probleme et je me penche vers vous.
    Je dispose d'une table de donnée contenant des produits, qui sont répartis en categories.
    En d'autre termes, et pour faire plus claire:
    J'ai 2 tables dans ma BDD --> categories et produits. avec une relation de 1 a plusieurs (une categories peut contenir plusieurs produits).

    Je me suis rendu compte (grace a fiddler), que lorsque je chargeais mes données. Que "categories" contenait à l'interieur d'elle meme les objets de "produits" et cela est teriblement lourd. J'ai voulu renoncer a importer les deux données de ma BDD (puisque l'une est comprise dans la seconde), mais je me suis soudain confronter a un autre probleme lors de la gestion de mes données cotés clients.
    Aujourd'hui un ami m'a conseillé de mettre lazy loading sur false et de voir le resultat. Et la, comme par miracle il ne m'a pas telecharger touts les produits qui étaient liés a la table de categorie.
    Seleument il n'a pas su m'expliquer ce que faisait ce lazy loading. Je n'ai pas vu quelque chose de claire sur le net.
    Pour l'instant j'ai tout mis en lazy loading et je me demande si ca me ferra des problemes par la suite.

    Merci a vous

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Le lazy-loading est un postulat du moindre effort. Il peut s'avérer efficace comme désastreux selon les scénarios.
    Imaginons une entité Bonhomme qui contient une propriété de type List<Voitures>.
    Avec le lazy loading, si je demande un bonhomme, seul ce bonhomme sera rapatrié de la base, pas ses voitures. Cependant, si a un moment j'essaie d'accéder à une voiture du bonhomme, la reqûete sera effectuée automatiquement.
    C'est super hein? Mais alors, pourquoi ne l'utilises t-on pas tout le temps?
    Eh bien c'est simple: c'est le problème du n+1!
    Imaginons que cette fois je travaille avec une collection de bonhommes (admettons 1000), toujours en lazy loading, si je fais une boucle qui parcoure ces bonhommes et que je veux voir les voitures du bonhomme: la requête est effectuée en base pour CE bonhomme uniquement! Résultat, si j'itère 1000fois, j'ai 1000+1 requêtes: une fois tous les bonhommes et 1000fois pour les voitures de chacun.

    Dans ce cas de figure, il est preferable de précharger les voitures en faisant un truc qui ressemble à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var bonhommes = EfContext.Bonhommes.Include("Voitures").ToList();
    Les bonhommes et leurs voitures seront chargés en une requête!

  3. #3
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Pour faire simple, le lazy loading consiste simplement à différer le chargement d'un objet au moment où il est demandé.
    En l’espèce, lorsque tu charges tes catégories, tes produits ne sont pas initialisés au chargement des catégories, mais seulement quand tu feras appel aux produits eux-mêmes.

    Edit : grilled

  4. #4
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut
    Super ta reponse, merci.
    Et pour les autres fonctions du CRUD (Create, Update et Delete). Ca regle aussi le probleme?

    Si je dois supprimer un bonhomme par exemple, il me supprime aussi ses voitures?

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Non! Comme son nom l'indique, le lazy loading est au chargement
    Le delete en cascade doit se configurer dans la foreign key de la base.

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    Typiquement, le lazy loading s'utilise le plus souvent dans un contexte de vue master/detail.
    La master contient par exemple une liste la plus courte possible de "bonhomme" (pr suivre l'exemple) et lorsqu'on choisit un bonhomme, on charge le "bonhomme" complet (avec par exemple entre autres ses voitures) dans la vue détail.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. spring2 hibernate3 : lazy loading
    Par fxonline dans le forum Hibernate
    Réponses: 9
    Dernier message: 10/02/2007, 18h56
  2. Lazy loading sur component
    Par El Saigneur dans le forum Hibernate
    Réponses: 2
    Dernier message: 03/11/2006, 10h30
  3. Lazy loading et fermeture de session hibernate
    Par BRAUKRIS dans le forum Hibernate
    Réponses: 3
    Dernier message: 20/07/2006, 13h08
  4. [hibernate] problème pour desactiver le lazy loading
    Par agougeon dans le forum Hibernate
    Réponses: 2
    Dernier message: 14/03/2006, 11h20
  5. [HIBERNATE 3]Lazy loading
    Par SEMPERE Benjamin dans le forum Hibernate
    Réponses: 11
    Dernier message: 08/02/2006, 22h40

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