1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
  2. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

Optimisations HFSQL Client/Serveur : Utilisation de requêtes ou de filtres

Discussion dans 'Base de donnés & HFSQL' créé par Fakirato, Fev 9, 2018.

  1. Fakirato

    Fakirato New Member
    WXG24 MEMBRE WX WXG 23 WXG 22 WXG 21

    Inscrit:
    Déc 30, 2017
    Messages:
    302
    J'aime reçus:
    816
    [​IMG]


    Dans une base HFSQL Client/Serveur, lorsqu'une sélection d'enregistrements est nécessaire, il est plus intéressant de demander au serveur d'effectuer une requête de sélection que de demander les enregistrements de manière séquentielle avec un filtre. En effet, lors d'un parcours séquentiel de type :

    HFiltre(CLIENT,DEPARTEMENT,"34000","34999")
    HLitPremier(CLIENT,DEPARTEMENT)
    TANTQUEPAS HEnDehors()
    //Traitement
    HLitSuivant()
    FIN
    La couche client demande le premier enregistrement au serveur, celui-ci lui retourne le premier et le second enregistrement (pour anticiper la boucle) et prépare sur le serveur les 50 enregistrements suivants qui seront renvoyés pendant le parcours (sauf si le client est sous mobile auquel cas le cache est désactivé par défaut). Cette technique permet d'améliorer les performances de l'application par rapport à une lecture purement séquentielle mais a l'inconvénient de consommer de la mémoire sur le serveur.

    Prenons un exemple : Si chaque enregistrement a une taille de 300 Ko, et que 100 utilisateurs sont connectés, cela représente 600 Mo de mémoire consommée sur le serveur HFSQL pour la simple boucle précédente.
    Remarque : le cache du serveur est purgé lorsque la boucle positionne HEnDehors() à vrai.

    Il est donc conseillé de remplacer votre parcours d'enregistrements par une requête :

    REQ_CLIENT_PAR_DEPARTEMENT="34"
    HExécuteRequête(REQ_CLIENT_PAR_DEPARTEMENT)
    POUR TOUT REQ_CLIENT_PAR_DEPARTEMENT
    //Traitement

    FIN

    REQ_CLIENT_PAR_DEPARTEMENT étant une requête construite par l'éditeur de requêtes ou en code SQL : SELECT * FROM CLIENT WHERE DEPARTMENT [= ‘<Param1>'


    Dans ce cas, la requête est préparée sur le serveur et envoyée vers le client, le serveur ne garde pas d'enregistrement en mémoire. La mémoire est consommée sur le poste client qui traite les enregistrements, et il est possible de libérer cette mémoire au moyen de la commande HAnnuleDéclaration.



    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!


     
    Tags:
  2. suenodesign

    suenodesign Well-Known Member
    MEMBRE WX

    Inscrit:
    Jan 1, 2018
    Messages:
    507
    J'aime reçus:
    732
    Ce billet répond bien à de précédentes interrogations qui me préocvupaient.
    Merci
     

Partager cette page

Chargement...