Utiliser ORDA pour améliorer les performances en mode client/serveur

Traduit automatiquement de Deepl

L’utilisation d’ORDA pour accéder à de grandes tables (en particulier celles avec des relations) en mode Client/Serveur a été considérablement améliorée. Avec 4D v17 R5, vous constaterez une amélioration de 2-3x des performances LAN et jusqu’à 30x des performances WAN. Et surtout, il n’est pas nécessaire de modifier quoi que ce soit dans votre code, tout est automatique. Intéressant, n’est-ce pas ? Eh bien, entrons dans les détails.

En général, lors du chargement d’un enregistrement dans une application client, tous les champs de l’enregistrement sont transférés depuis le serveur. Même ceux dont vous n’avez pas besoin. Par conséquent, les performances dépendent de la conception de votre application, de la structure de votre base de données et des capacités du réseau… en particulier lorsque vous utilisez de grandes tables avec des champs multiples ou de grande taille. Par exemple, sur un réseau WAN lent, si vous utilisez seulement quelques champs dans des boîtes de liste basées sur la sélection (de tables avec des dizaines de champs ayant de nombreuses relations/champs et de grands textes/photos), votre application sera bientôt hors service.

Les requêtes ORDA utilisaient auparavant le même principe de chargement des champs … jusqu’à présent ! Avec la v17 R5, le serveur analyse les attributs dont vous avez besoin dans chaque classe de données et identifie les attributs liés afin que seules les données demandées soient transférées entre le serveur et le client.

ETUDE DE CAS

Pour illustrer ces améliorations, utilisons une base de données simple :

La table Book contient 1 000 enregistrements. Son champ résumé contient entre 100 et 2 000 caractères et son champ vignette contient environ 10 Ko d’images. Dans la table connexe Author, le champ biographie contient 10 000 caractères dans chaque enregistrement.

À l’aide de cette base de données, nous avons créé deux zones de liste basées sur la sélection : l’une utilisant une sélection d’entité ORDA et l’autre utilisant une sélection classique. Dans chaque liste, nous avons choisi d’afficher le titre du livre avec son auteur afin d’activer les relations. Nous avons également ajouté une action pour faire défiler automatiquement la boîte de liste afin qu’aucune action humaine ne vienne perturber les résultats :

Les mesures dans le tableau ci-dessous montrent les trames TCP qui ont été transmises entre le serveur et le client (y compris toutes les réponses d’acquittement) de l’exemple dans la vidéo. La connexion réseau du client est de type Wi-Fi « 802.11ac » (250Mbps en aval, 100Mbps en amont, avec un délai de 1ms) :

Mode Frames Overall size (bytes) Durée (ms)
Classique 4,070 473,924 5,747
ORDA 46 6,744 692

Comme vous pouvez le voir, l’utilisation d’ORDA signifie que seules quelques images sont transférées ! Et la durée ? Plus le réseau est lent, plus la différence entre ORDA et l’approche classique est importante.

Un nouveau concept : le contexte d’OPTIMIZATION

Cela vous permet d’enregistrer ce que le système a appris, puis de le réutiliser plus tard. Pour ce faire, il suffit de créer un objet option contenant un attribut« context« , puis de spécifier la valeur souhaitée avant de paramétrer l’objet :

Si (Form.currentContext=Null)
Form .currentContext:=New object("context" ; "contextListboxBookAndAuthor")
End if
Form .books:=ds.Book.all(Form.currentContext)

Cet objet d’option peut maintenant être utilisé avec la commande Create entity selection et les méthodes membres suivantes : dataClass. query (), entitySelection. query (), dataClass. fromCollection (), et dataClass. all().

N.B : Dans le tableau des mesures, nous n’avons pas activé la fonctionnalité de contexte pour être le plus précis possible.

En conclusion :

ORDA simplifie vos développements :

  • Il accélère le transfert d’informations – sans modification du code.
  • Vous n’avez pas besoin de déplacer les grands champs d’une table et de les stocker dans une table liée à 1-1 pour éviter les impacts sur le mode Client/Serveur.
  • Lorsque vous voulez accéder au serveur en dehors du réseau local, vous pouvez maintenant connecter le client directement … sans utiliser les technologies de bureau à distance.
Avatar
- Product Owner -Damien Fuzeau a rejoint l'équipe 4D Product en février 2019. En tant que Product Owner, il est en charge de la rédaction des user stories, puis de leur traduction en spécifications fonctionnelles. Son travail consiste également à s'assurer que les implémentations de fonctionnalités livrées répondent aux besoins des clients.Damien est diplômé de l'Université de Nantes en génie logiciel. Il a passé plus de 23 ans dans son ancienne entreprise, d'abord en tant que développeur (découverte de 4D en 1997), puis en tant que responsable de l'ingénierie et architecte logiciel. Cette société est un partenaire OEM de 4D et a déployé des logiciels d'entreprise basés sur 4D pour des milliers d'utilisateurs, sur des centaines de serveurs. Damien est donc habitué au développement et au déploiement 4D dans un contexte multi-langues.