La vitesse d'accès aux données

15/03/2013 08:37

On trouve deux écoles : l'accès par requêtes et l'accès par fonctions Windev (Hlit)

On peut réaliser tous les traitements avec l'une ou l'autre des techniques.

J'ai souvent vu un mélange des deux.

 

Le gros avantage des requêtes :

 

Sur une architecture client/serveur l'accès à la base se fera une seule fois lors de chaque exécution de requête alors que les fonctions de la famille Hlit accèdent en permanence à la base (à chaque opération).

 

En WebDev par contre aucun soucis pour les Hlit car le code serveur est toujours exécuté sur le serveur !

 

Mise en garde :

 

L'exécution d'une requête est long donc éviter les requêtes imbriquées qui pourraient déclencher une multitude de requêtes.

Par exemple :

 

HexecuteRequete(R1)

Hlitpremier(R1)

Tantque pas Hendehors(R1)

    HexecuteRequete(R2 , R1.Identifiant)

    // Traitement

HlitSuivant(R1)

Fin

 

Dans ce cas si la requête R1 retourne 1000 enregistrements, la requête R2 sera exécutée 1000 fois, ce qui risque d'être catastrophique en terme de vitesse ! Préférez une syntaxe de requête plus complexe (avec jointures multiples par exemple) ou des lectures par Hlit qui seront plus rapides que des déclenchements successifs de requêtes, même si ce n'est pas la panacée.

 

Inconvénients de l'utilisation des requêtes :

 

Pas facile d'utiliser les fonctions natives qui facilitent la vie du développeur dans les modules de gestion. En effet il est possible de lier les champs de la fenêtre (ou de la page) à une requête créée avec l'éditeur de requête ... mais comment fait on ensuite EcranVersFichier() afin de mettre à jour l'enregistrement ? Et oui il faut récupérer les valeurs une à une afin d'écrire la clause update.

 

Mon avis sur la question :

 

Je dirais que les modules de saisie/gestion/sélection peuvent être écrits avec les fonctions Windev car la lecture de quelques enregistrement ne pénalise pas tellement la vitesse d'exécution. De plus la plupart du temps l'humain sera plus lent que la machine. On bénéficie alors des automatismes de Windev, notamment la liaison des données avec les champs : HlitRecherche --> FichierVersEran --> EcranVersFichier --> Hmodfife

 

Par contre lorsqu'on attaque des traitements nécessitant beaucoup d'accès aux données (calculs de centaines de paies ou de factures, calculs de cumuls sur une compta, etc...) je préfère de loin l'utilisation de requêtes, quitte à ce qu'elle soient compliquées à écrire.