Vous êtes DSI, responsable applicatif, responsable d’exploitation au sein de votre entreprise. Depuis des mois, vos utilisateurs se plaignent des performances d’une de vos applications importantes.

Miracle, l’éditeur vous invite à sa demi-journée de relation client où il a fait venir la fine fleur de ses développeurs autour du thème, « la performance ».

Vous envoyez évidemment la personne faisant l’interface entre les métiers et le SI pour recueillir les informations.

A son retour, elle vous confirme que des améliorations de performances sont en cours, mais elle n’a pas tout compris. On lui a parlé de bases de données, de ‘TPC’ à ‘TPH’, mais aussi et ensuite de passer à ‘EFcore TPH’, ce qui (je cite) impliquerait des mises à jour système (ce qui évidemment inquiète).

Assez rapidement vous serrez intéressé par ces quelques infos compilées.

« EF » correspond à « Entity Framework » (Core). C’est un composant du Framework .net qui permet de mapper, au sein de l’application, le modèle de données défini par le développeur au modèle de données physique au sein de la base de données SQL Serveur.

D’après ce que nous avons collecté, les développeurs utilisent dans leur librairie Entity Framework en mode « Code First », c’est à dire qu’ils créent les class de leurs objets selon le modèle Entity Framework et lui demande de définir automatiquement les tables et autres objets au sein de SQL Server.

Après, cette génération automatique peut se faire selon plusieurs modèles :

•             TPC : Table per Concrete – On génère une table par class non abstraite

•             TPH : Table per Hierachy – Les classent sont regroupées par domaines, et on crée une table par domaine.

C’est donc une question purement interne aux développeurs et qui ne concerne ni les DBA, ni les utilisateurs (enfin… encore moins).

Après, étant donné que c’est mis en relation avec un question de performance, nous pouvons faire la supposition suivante:

L’utilisation de « First Code » est conçue afin de permettre aux développeurs d’avoir une performance limitée en termes de modélisation de base de données.

La contrepartie, c’est que le modèle généré n’est pas nécessairement optimal en termes de performance.

Sans compétence supplémentaire en modélisation, les développeurs peuvent essayer :

a) D’avoir recours au modèle de génération TPH qui en réduisant le nombre de tables générés, ce qui peut éventuellement améliorer les performances du modèle (mais rien de certain).

b) Utiliser une version plus récente d’Entity Framework (afin de bénéficier des optimisations développées par Microsoft dans la génération des modèles de données). Dans ce cas, cela suppose d’utiliser une version plus récente du Framework .net qu’il faut alors installer (d’où la mise à jour système).

Pour faire un complément afin de vous faire mieux comprendre le rapport entre la génération des modèles de base de données et Entity Framework, je vais vous expliquer comment je l’utilise moi, quand j’ai besoin de faire une application c#.

Etant donné que je suis DBA, je vais commencer par créer le modèle de données (schéma) dans SQL Server afin qu’il soit optimal en terme de performance. Ensuite, je vais générer mes class c# en utilisant Entity Framework en mode « Database First » (inverse de « Code First »).

Bilan, mon modèle de données dans SQL Server est optimal en termes de performances. Par contre, mes class c# ne valent que ce que le Entity Framework a été capable de générer automatiquement.

Vos développeurs font l’inverse. Ils développent leur class de façon optimal en c# puis génèrent leurs modèle physique dans SQL Server de façon automatique via Entity Framework en mode « Code First ».

Donc, leur modèle ne vaut que ce que Entity Framework a été capable de générer automatiquement.

Evidemment, plus la version est récente d’Entity Framework, plus la génération automatique est performante (cela marche dans les deux sens).

David

Tags