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

Bases de données Delphi Discussion :

Cache


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Par défaut Cache
    Avec quel type de curseur ai-je un cache. Par exemple avec clUSeClient + ctKeyset et ltBatchOptimistic. Y-a-t-il d'autre combinaison.
    Si j'ai bien compris avec un curseur côté serveur, je reçois dans mon process un cache dont le nombre d'enregistrement varie en fonction du cache size.
    Dans ce cas mon cache correspond à mon recordset côté client.
    En fait je suis un peu dans le brouillard avec le recordset et le cache. Est-ce que tous deux me donnent accès aux méthodes ADO.
    J'ai lu qq part qu'il n'est pas conseillé d'utiliser les méthodes du recordset et qu'il valait mieux utiliser les méthodes du dataset.
    Bref si on pouvait un peu m'éclairer sur la différence entre le recordset et le cache et quand utiliser les méthodes ADO où celles du dataset.

  2. #2
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    Il y a toujours un cache, mais le réglage de sa taille ne sert que pour les curseurs serveurs.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Par défaut
    Tout d'abord merci à toi de répondre à mes questions.
    Si on a toujours un cache, les données affichées dans un dbgrid par exemple proviennent du cache ou du recordset avec un cureur client ou alors le cache ne sert que du côté serveur.

  4. #4
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    C'est très difficile de répondre d'emblée.
    La taille du cache correspond au nombre d'enregistrements présent dans le cache (mais ca tu t'en doutais ).
    Globalement on peut dire que les enregistrements présent dans le cache sont la position actuelle + les caches enregistrements suivants.

    Par exemple.
    Je crée mon curseur et j'ouvre le recordset avec une taille de cache de 50.
    Tant que je ne lis pas un enregistrement dont la position est égale à 51+, les enregistrements du cache ne change pas. Si d'un coup je lis la position 112; mon cache contiendra les enregistrements 112-162. Si je monte par contre enregistrement par enregistrements, il contiendra 100-150.
    Sur un Datagrid, on essayes de régler la taille du cache sur le nombre de ligne visible.
    Par expérience, je peux déjà te dire que ce genre d'optimisation sur un curseur client est souvent négligeable.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Par défaut
    Alors pour clôturer et profiter de tes excellentes connaissances, qu'en est-il de la mise à jour des données. Si mes données dans mon dbgrid proviennet du cache, quand j'ai modifié 1 ou pls valeurs et que je me positionne sur le 49e enregistrement, quand et comment sont mis à jour mes données dans mon cache et mon recordset et finalement dans ma table. Je sais que la méthode Post (qui par ailleurs est invoquée de manière implicite par des méthodes de positionnement du curseur) invoque en arrière plan une requête action UPDATE. Mais je ne vois pas très bien le cheminement depuis mon dbgrid jusque dans ma table pour la question de mise à jour.
    Merci encore.
    Ah oui encore une petite chose....

    J'ai été surpris quand tu as dis qu'on avait toujours un cache car je pensais que celui-ci n'existait que dans certaines configurations du genre:

    clUseClient + ctKeyset + ltBatchOptimistic
    ou
    clUseClient + ctStatic + ltBatchOptimistic

    Ce qui permet de travailler en mise à jour groupée via :
    UpdateBatch & CancelBatch + TAffectedRecords + TFilterGroup.

    Je n'ose même pas imaginer si on initialise pas la cache et qu'on reste avec une taille de 1!

    Bref cache or not to cache, that is the question
    Merci d'éclairer ma lanterne à tout jamais sur ce point.

  6. #6
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    Commençons par la fin.
    Quand je dis qu'il y a toujours un cache c'est que même les curseurs en avant seulement ont un cache de 1.
    Le réglage de la taille du cache est un problème qui ne suit pas d'autres règles que de faire des tests selon les applications.

    Tu confonds Cache et recordset coté client.
    Supposes que mon cache ait une taille de 10 et que je rapatrie 1000 enregistrements. Si je fais appel au recordcount mon cache contiendra les 10 derniers enregistrements. Mon Recordset client lui contiendra bien les 1000. Ce n'est pas le cache qui permet de travailler par lot, c'est le moteur de curseur client.

    Pour la mise à jour tout dépend de la nature du curseur.
    Prenons le cas d’une mise à jour directe.
    Soit la modification est transmise lors d’un appel explicite de la méthode post, soit l’action est engendrée par un mouvement du curseur. Que la donnée proviennent du cache (mise à jour directe) ou non (mise à jour par lot) la méthode de mise à jour dépendra ensuite du coté du curseur.

    Je te conseille de lire http://bidou.developpez.com/tutoriels/Delphi/ADO/
    pour mieux comprendre le fonctionnement

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

Discussions similaires

  1. Répertoire caché
    Par KUBITUS dans le forum Delphi
    Réponses: 30
    Dernier message: 13/04/2007, 07h19
  2. XMLGram, Import et cache
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 13
    Dernier message: 05/03/2003, 17h09
  3. Qu'est ce que le cache ?
    Par irrou dans le forum Assembleur
    Réponses: 4
    Dernier message: 24/11/2002, 23h28
  4. Ouvrir (fopen) un fichier caché
    Par shef dans le forum C
    Réponses: 2
    Dernier message: 09/09/2002, 09h06
  5. Webbrowser : Comment ne pas prendre la page en cache
    Par cedm78 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 30/08/2002, 11h17

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