feat: add bibliography, appendix and end page
This commit is contained in:
parent
2c8a042aa2
commit
4782f5d2ce
@ -32,4 +32,38 @@ chiffres-efluid:
|
||||
type: report
|
||||
title: L'essentiel des chiffres Efluid 2020
|
||||
date: 2020
|
||||
organization: Groupe UEM
|
||||
organization: Groupe UEM
|
||||
|
||||
administration-base-postgresql:
|
||||
type: book
|
||||
author: ["Sébastien Lardière"]
|
||||
title: PostgreSQL - Administration et exploitation d’une base de données (2ème édition)
|
||||
date: 2015
|
||||
|
||||
gestion-perf-pgsql:
|
||||
type: book
|
||||
author: ["Gregory Smoth"]
|
||||
title: Base de données PostgreSQL, gestion des performances
|
||||
date: 2011
|
||||
|
||||
perf-analysis-pgsql:
|
||||
type: web
|
||||
title: Performance analysis of relational databases MySQL, PostgreSQL and Oracle using Doctrine libraries
|
||||
date: 2022-09-30
|
||||
author: ["Choina, M.", "Skublewska-Paszkowska, M."]
|
||||
url: https://doi.org/10.35784/jcsi.3000
|
||||
|
||||
unit-solutions:
|
||||
title: Détail de l'entreprise Unit Solutions
|
||||
type: web
|
||||
url: https://unit.solutions/
|
||||
|
||||
postgres-sql:
|
||||
title: Références de fonctionnalités et plus pour PostgreSQL
|
||||
type: web
|
||||
url: https://postgresql.org/
|
||||
|
||||
npgsql:
|
||||
title: Références de version NPGSQL
|
||||
type: web
|
||||
url: https://npgsql.org/
|
||||
|
@ -18,7 +18,7 @@ Le master, également en alternance, impose une période en entreprise plus sout
|
||||
|
||||
=== Jusqu'à la licence
|
||||
|
||||
Après avoir obtenu un baccalauréat scientifique, option science de l'ingénieur, j'ai choisi de m'orienter vers le cursus proposé par l'UHA 4.0. J'ai alors pu réaliser mes trois premières années d'études supérieures en engrangeant de nombreuses connaissances en toute autonomie dans le de l'informatique orienté web et de côtoyer des milieux professionnels via les projets et les stages.
|
||||
Après avoir obtenu un baccalauréat scientifique, option Science de l'Ingénieur, j'ai choisi de m'orienter vers le cursus proposé par l'UHA 4.0. J'ai alors pu réaliser mes trois premières années d'études supérieures en engrangeant de nombreuses connaissances en toute autonomie dans le domaine de l'informatique orienté web et en côtoyant des milieux professionnels via les projets et les stages.
|
||||
|
||||
J'ai pu conclure ces trois premières années d'études à l'UHA 4.0 il y a deux ans en obtenant ma licence professionnelle.
|
||||
|
||||
@ -27,7 +27,7 @@ J'ai pu conclure ces trois premières années d'études à l'UHA 4.0 il y a deux
|
||||
Une année à l'UHA 4.0 du parcours "Master Informatique et Mobilité" se divise en deux parties dupliquées sur deux années. Dans un premier temps, l'étudiant doit réaliser, en groupe de 3 ou 4 élèves, un "fil rouge". Ce projet a pour but de mettre en pratique les connaissances acquises durant les séances de cours assurées par des enseignants chercheurs ou autres intervenants. Les cours portent sur les technologies qui pourront et seront réutilisées durant le fil-rouge tel que l'Intelligence Artificielle, l'optimisation combinatoire, la fouille de données, etc. La seconde partie de l'année est une phase de neufs moins durant laquelle l'étudiant est dans une entreprise pour mettre en pratique, consolider et acquérir de nouvelles connaissances.
|
||||
|
||||
Lors de ma première année du parcours de master, nous avons eu comme sujet de fil rouge, la gestion et l'automatisation de l'arrosage des plantes. Le but était de pouvoir récolter des données environnementales liées à une plante, puis les réutiliser pour prendre des décisions à l'aide de divers outils.\
|
||||
Nous avons pu utiliser une sonde de température et un capteur d'humidité pour récolter les données, les envoyer grâce à un microcontrôleur vers un serveur pour stocker et traiter les données.\
|
||||
Nous avons pu utiliser une sonde de température et un capteur d'humidité pour récolter les données puis les envoyer grâce à un microcontrôleur vers un serveur pour stocker et traiter les données.\
|
||||
Nous avons également pu utiliser des caméras pour nous permettre d'effectuer des constatations d'assèchement à partir des feuilles d'une plante qui réagit de manière assez marquée à ce facteur.\
|
||||
J'ai eu comme principales tâche de mettre en place un système #ref-glossary(term: "IoT")[IOT] pour récolter les données environnementales et les images puis les envoyer vers un serveur distant. J'ai par ailleurs pu participer aux développements et à la recherche de solutions d'analyse des données collectées.
|
||||
|
||||
@ -40,7 +40,7 @@ Mes deux années de master ont consécutivement été réalisées au sein de l'e
|
||||
== L'entreprise Unit solutions
|
||||
|
||||
Unit Solutions est une entreprise suisse, basée à Allschwil dans le canton de Bâle-Campagne. Fondée en 1986 premièrement sous le nom CADRZ, dédiée à la création d'un cadastre numérique pour la ville d'Allschwil, elle est aujourd'hui dirigée par M. Thierry MOEBEL.\
|
||||
La politique de développements de l'entreprise va par la suite changer pour finalement réaliser ses propres logiciels et en faire la maintenance. L'entreprise compte actuellement une vingtaine d'employés pour le développement des différentes solutions, le support et l'administratif.
|
||||
La politique de développements de l'entreprise va par la suite changer pour finalement réaliser ses propres logiciels et en faire la maintenance. L'entreprise compte actuellement une vingtaine d'employés pour le développement des différentes solutions, le support et l'administratif. #hide[@unit-solutions]
|
||||
|
||||
Les développements au sein de l'entreprise reposent sur quatre gros projets:
|
||||
- Langsam Verkehr2 est une solution visant la gestion des sentiers de mobilité douce en Suisse. Cela comprend la gestion des sentiers de randonnée ou les pistes cyclables.
|
||||
|
@ -53,11 +53,11 @@ Le second tiers de l'application correspond à l'#ref-glossary(term: "API")[API]
|
||||
|
||||
Cette #ref-glossary(term: "API")[API] est le serveur #ref-glossary(term: "Back-End")[back-end] qui permet de faire la relation entre le monde extérieur et les données brutes stockées en base de données. Le serveur est développé en #ref-glossary(term: "C#")[C\#] avec l'#ref-glossary(term: "ORM")[ORM] #ref-glossary(term: "EF")[Entity Framework]. Cette interface permet notamment de mettre en forme les données pour qu'elles correspondent aux besoins du troisième et dernier tiers.
|
||||
|
||||
Le dernier tiers correspond à la partie visible de l'application. Appelé #ref-glossary(term:"Front-End")[Front-End], il met à disposition de manière visuelle et simplifiée les données. Ce dernier tiers permet également à l'utilisateur de créer, modifier ou effacer des données. Il est développé en TypeScript, un language surrensemble de JS et avec le framework #ref-glossary(term: "Angular")[Angular] pour permettre de créer une application dynamique et réactive.
|
||||
Le dernier tiers correspond à la partie visible de l'application. Appelé #ref-glossary(term:"Front-End")[Front-End], il met à disposition de manière visuelle et simplifiée les données. Ce dernier tiers permet également à l'utilisateur de créer, modifier ou effacer des données. Il est développé en TypeScript, un langage surrensemble de JS et avec le framework #ref-glossary(term: "Angular")[Angular] pour permettre de créer une application dynamique et réactive.
|
||||
|
||||
Le dernier service complémentaire est un serveur #ref-glossary(term: "GIS")[GIS]. Ce serveur permet de fournir des informations cartographiques comme des adresses. Il permet aussi de délivrer les fonds de cartes. Ils peuvent être hébergés et entretenus par Unit Solutions, ou alors par d'autres entreprises comme le fond de carte Open Street Map appartenant à la fondation du même nom. Il n'est pas intégré dans le concept d'architecture trois tiers puisque, comme je l'ai indiqué, ce service est indépendant et n'est pas une dépendance du reste.
|
||||
|
||||
Le schéma @three-tier-archi-diagram ci-dessous représente les trois tiers de l'application communiquant ensemble. L'application propose à l'utilisateur de personnaliser toute l'application. Cela comprend par exemple quel fond de carte afficher, quelles données afficher, personnaliser l'affichage de ces données tel que le type d'affichage des épingles… Ces configurations sont propres à l'utilisateur et sont sauvegardées en base de données, en parallèle de toutes les autres données de l'application.
|
||||
Le schéma @three-tier-archi-diagram ci-dessous représente les trois tiers de l'application communicants ensemble. L'application propose à l'utilisateur de personnaliser toute l'application. Cela comprend par exemple quel fond de carte afficher, quelles données afficher, personnaliser l'affichage de ces données tel que le type d'affichage des épingles… Ces configurations sont propres à l'utilisateur et sont sauvegardées en base de données, en parallèle de toutes les autres données de l'application.
|
||||
|
||||
#figure(
|
||||
image("../assets/images/three-tier-archi-diagram.png"),
|
||||
@ -73,13 +73,13 @@ Ce document est axé sur le travail réalisé sur une base de données. L'applic
|
||||
|
||||
#ref-glossary(term: "PostgreSQL")[PostgreSQL] est un système de gestion de base de données relationnelle (#ref-glossary(term: "SGBDR")[SGBDR]). Le projet est initié en 1986 par Michael Stonebraker et Andrew Yu à l'Université de Californie à Berkeley.
|
||||
|
||||
L'une des forces majeures de ce système est d'être Open Source, ce qui signifie qu'il est développé et maintenu par la communauté en plus des développements apportés par la société mère #ref-glossary(term: "PostgreSQL")[PostgreSQL].
|
||||
L'une des forces majeures de ce système est d'être Open Source, ce qui signifie qu'il est développé et maintenu par la communauté en plus des développements apportés par la société mère #ref-glossary(term: "PostgreSQL")[PostgreSQL].@administration-base-postgresql
|
||||
|
||||
#ref-glossary(term: "PostgreSQL")[PostgreSQL] tient sa réputation de sa fiabilité, sa robustesse et sa richesse fonctionnelle que je détaillerai juste après.
|
||||
|
||||
=== Les principes de base
|
||||
|
||||
Comme dit précédemment, #ref-glossary(term: "PostgreSQL")[PostgreSQL] est un #ref-glossary(term: "SGBDR")[SGBDR]. Il utilise le langage SQL#footnote("Structured Query Language")<SQL_def> pour chercher ou manipuler les données stockées. Le système met à disposition une série de fonctions pour permettre ces interactions, à savoir :
|
||||
Comme dit précédemment, #ref-glossary(term: "PostgreSQL")[PostgreSQL] est un #ref-glossary(term: "SGBDR")[SGBDR]. Il utilise le langage SQL (Structured Query Language) pour chercher ou manipuler les données stockées. Le système met à disposition une série de fonctions pour permettre ces interactions, à savoir:
|
||||
- Les transactions : un ensemble d'une ou de plusieurs opérations regroupées en une seule opération atomique.
|
||||
- Les vues : table virtuelle qui sélectionne et affiche des données à partir d'une ou plusieurs tables réelles.
|
||||
- Les contraintes d'intégrité : règles qui garantissent la validité et la cohérence des données dans une base de données.
|
||||
@ -87,7 +87,7 @@ Comme dit précédemment, #ref-glossary(term: "PostgreSQL")[PostgreSQL] est un #
|
||||
- Les triggers : procédure stockée qui est automatiquement exécutée en réponse à un événement spécifique sur une table.
|
||||
- Les fonctions utilisateurs : procédure stockée qui renvoie une valeur et peut être utilisée dans une requête SQL comme une fonction intégrée.
|
||||
|
||||
#ref-glossary(term: "PostgreSQL")[PostgreSQL] a également l'avantage d'être multiplateforme. Il peut ainsi fonctionner sur des environnements variés avec des systèmes d'exploitation différents, comme Windows, Linux, Mac, etc. L'une des forces de ce système de gestion de base de données réside dans sa capacité à gérer des volumes importants de données allant jusqu'à plusieurs Téraoctets. Cette gestion passe par différents points clés, à savoir :
|
||||
#ref-glossary(term: "PostgreSQL")[PostgreSQL] a également l'avantage d'être multiplateforme. Il peut ainsi fonctionner sur des environnements variés avec des systèmes d'exploitation différents, comme Windows, Linux, Mac, etc. L'une des forces de ce système de gestion de base de données réside dans sa capacité à gérer des volumes importants de données allant jusqu'à plusieurs Téraoctets@perf-analysis-pgsql. Cette gestion passe par différents points clés, à savoir:
|
||||
- L'indexation
|
||||
- Le partitionnement
|
||||
- La gestion du cache
|
||||
@ -109,7 +109,7 @@ En type de fichiers volumineux, on peut par exemple citer les fichiers MAJICS, R
|
||||
|
||||
=== Les inconvénients de #ref-glossary(term: "PostgreSQL")[PostgreSQL]
|
||||
|
||||
#ref-glossary(term: "PostgreSQL")[PostgreSQL] présente également quelques inconvénients qu'il faut prendre en compte :
|
||||
#ref-glossary(term: "PostgreSQL")[PostgreSQL] présente aussi quelques inconvénients qu'il faut prendre en compte:
|
||||
- Il peut être plus complexe à installer et à configurer que d'autres #ref-glossary(term: "SGBDR")[SGBDR], tels que MySQL ou SQLite.
|
||||
- Il peut nécessiter plus de ressources matérielles (mémoire, CPU, espace disque) que d'autres #ref-glossary(term: "SGBDR")[SGBDR] pour fonctionner de manière optimale.
|
||||
- Il peut être moins performant que d'autres #ref-glossary(term: "SGBDR")[SGBDR] pour certaines tâches spécifiques, telles que les requêtes de type OLAP (Online Analytical Processing).
|
||||
@ -118,12 +118,12 @@ En type de fichiers volumineux, on peut par exemple citer les fichiers MAJICS, R
|
||||
|
||||
#ref-glossary(term: "PostgreSQL")[PostgreSQL] est un #ref-glossary(term: "SGBDR")[SGBDR] open source très populaire, grâce à sa fiabilité, sa robustesse, sa richesse fonctionnelle et sa flexibilité. Il est utilisé dans de nombreux domaines, tels que la finance, la santé, l'éducation, le gouvernement, etc. Il est également compatible avec de nombreux langages de programmation et de nombreux systèmes d'exploitation.\
|
||||
Cependant, il peut être plus complexe à installer et à configurer que d'autres SGBDR et nécessiter plus de ressources matérielles.\
|
||||
Malgré ces inconvénients, #ref-glossary(term: "PostgreSQL")[PostgreSQL] reste un choix idéal pour de nombreuses applications critiques et environnements complexes de par les différents avantages cités précédement, tel que sa rapidité, sa fiabilité et son aspect open-source.
|
||||
Malgré ces inconvénients, #ref-glossary(term: "PostgreSQL")[PostgreSQL] reste un choix idéal pour de nombreuses applications critiques et environnements complexes grâce aux différents avantages cités précédemment, tel que sa rapidité, sa fiabilité et son aspect open-source.
|
||||
|
||||
#pagebreak(weak: true)
|
||||
== Problématique
|
||||
|
||||
L'application InfSuite s'appuie sur de nombreuses technologies, développées en externe de l'entreprise, pour fonctionner. Je peux par exemple citer Angular, un framework #ref-glossary(term: "Front-End")[front-end] développé par Google, qui est régulièrement mis à jour avec des réparations de bugs, des ajouts de nouveautés... et qui est utilisé dans l'application. Ce framework est continuellement mis à jour sans préavis pour les utilisateurs, mais utilise un système de versionnement. Le versionnement permet d'éviter les changements trop fréquents et perturbateurs, tout en offrant la possibilité d'introduire des améliorations et des nouvelles fonctionnalités de manière contrôlée. Il aide également les développeurs à anticiper les changements majeurs et à maintenir leurs applications à jour avec les dernières versions d'Angular.
|
||||
L'application InfSuite s'appuie sur de nombreuses technologies développées en externe de l'entreprise pour fonctionner. Je peux par exemple citer Angular, un framework #ref-glossary(term: "Front-End")[front-end] développé par Google, qui est régulièrement mis à jour avec des réparations de bugs, des ajouts de nouveautés... et qui est utilisé dans l'application. Ce framework est continuellement mis à jour sans préavis pour les utilisateurs, mais utilise un système de versionnement. Le versionnement permet d'éviter les changements trop fréquents et perturbateurs, tout en offrant la possibilité d'introduire des améliorations et des nouvelles fonctionnalités de manière contrôlée. Il aide également les développeurs à anticiper les changements majeurs et à maintenir leurs applications à jour avec les dernières versions d'Angular.
|
||||
|
||||
Par exemple, dans le cas où Google déploierait des changements de code majeurs qui rendent le code ultérieur obsolète, le système de versionnement lui permet de rendre sa mise à jour accessible au grand public, sans pour autant forcer la main aux développeurs à effectuer une mise à jour qui pourrait mettre le fonctionnement de leur application en péril.
|
||||
|
||||
@ -148,7 +148,7 @@ Il est rapide et fiable, on peut ainsi lui fournir un fichier #ref-glossary(term
|
||||
Microsoft propose sa solution alternative SSMA pour importer les types de bases Access, DB2, MySQL, Oracle, SAP ASE vers leurs différents #ref-glossary(term: "SGBDR")[SGBDR] propriétaires (à savoir les suites SQL Server).
|
||||
Sur le même principe, les outils MySQL Workbench, AWS Database Migration Service (DMS) et PgAdmin permettent de réaliser le même type de migration vers leurs systèmes propriétaires, à savoir respectivement MySQL, AWS et #ref-glossary(term: "PostgreSQL")[PostgreSQL].
|
||||
|
||||
Les principaux désavantages de ce genre de solutions sont :
|
||||
Les principaux désavantages de ce genre de solutions sont:
|
||||
- L'import des données reste assez strict et ne permet pas de flexibilité. Si les données ne sont pas compatibles, il faut passer du temps à travailler le modèle de données pour essayer de pallier aux incompatibilités.
|
||||
- Ils peuvent également rendre les migrations onéreuses avec certaines solutions qui coûtent jusqu'à plusieurs centaines d'euros pour les entreprises.
|
||||
- Les logiciels proposés peuvent parfois être complexes et demander un certain temps d'adaptation avant de réellement pouvoir effectuer la tâche de migration.
|
||||
|
@ -1,7 +1,7 @@
|
||||
#pagebreak(weak: true)
|
||||
== Ouverture
|
||||
|
||||
Au cours des trois années d'alternance passées au sein de l'entreprise Unit Solution, j'ai activement pu participer au développement et à la maintenance du projet InfSuite. Comme pour l'année dernière, j'ai apporté des améliorations à l'outil d'administration. Toujours orienté sur la gestion de la base de données, j'ai pu créer une fonctionnalité pour vérifier les scripts exécutés précédemment sur la base de données. Comme expliqué plus tôt dans ce document, InfSuite utilise des scripts SQL pour permettre de mettre à jour les schéma de base de données et ainsi éviter des modifications manuelles en base de données. Pour garder une liste des scripts déjà exécutés sur le serveur, un écran dans l'application permet de voir rapidement l'historique d'exécution des scripts.
|
||||
Au cours des trois années d'alternance passées au sein de l'entreprise Unit Solutions, j'ai activement pu participer au développement et à la maintenance du projet InfSuite. Comme pour l'année dernière, j'ai apporté des améliorations à l'outil d'administration. Toujours orienté sur la gestion de la base de données, j'ai pu créer une fonctionnalité pour vérifier les scripts exécutés précédemment sur la base de données. Comme expliqué plus tôt dans ce document, InfSuite utilise des scripts SQL pour permettre de mettre à jour les schéma de base de données et ainsi éviter des modifications manuelles en base de données. Pour garder une liste des scripts déjà exécutés sur le serveur, un écran dans l'application permet de voir rapidement l'historique d'exécution des scripts.
|
||||
|
||||
Ajouter ce genre de gestion de base de données dans l'application permet également de remettre en question la manière actuelle de faire les choses pour tenter d'améliorer le processus.\
|
||||
Actuellement, pour gérer les schémas de base de données, nous utilisons le logiciel Power Designer. Il permet de gérer les définitions des modèles de données avec les relations, les définitions de clés primaires, etc. Il ne permet cependant que de générer des définitions, il ne permet pas d'effectuer les actions sur la base de données, il reste totalement hors connexion.\
|
||||
@ -9,5 +9,5 @@ Une fois les modifications effectuées dans l'outil, il génère le nouveau sch
|
||||
|
||||
Toute cette gestion complexifie la simple de tâche de mettre à jour les informations en base de données. Il serait plus convenant de trouver une alternative moins complexe pour effectuer cette tâche. Après avoir mis à jour la base de données, on peut alors légitimement se poser la question : Comment simplifier l'administration d'une base de données.
|
||||
|
||||
On pourrait alors partir par exemple sur une implémentation dans l'outil d'administration du projet pour effectuer cette tâche longue et récurrente, ce qui élminierait une grande partie de ressource temps liée à la main d'oeuvre pour réaliser ce genre d'actions.\
|
||||
Etudier la faisabilité et l'importance d'une telle tâche est de la même importance qu'étudier une migration de base de données. Il faut s'assurer que le temps de recherche et de développement confèrent plus d'avantage et libère plus de temps que ce qui est requis pour mettre en place la solution.
|
||||
On pourrait alors partir par exemple sur une implémentation dans l'outil d'administration du projet pour effectuer cette tâche longue et récurrente, ce qui éliminerait une grande partie de ressource temps liée à la main d'œuvre pour réaliser ce genre d'actions.\
|
||||
Étudier la faisabilité et l'importance d'une telle tâche est de la même importance qu'étudier une migration de base de données. Il faut s'assurer que le temps de recherche et de développement confèrent plus d'avantage et libère plus de temps que ce qui est requis pour mettre en place la solution.
|
@ -36,9 +36,9 @@ Les vulnérabilités sont connues sous le nom de Common Vulnerabilities and Expo
|
||||
|
||||
En complément des vulnérabilités, les mises à jour apportent des améliorations de performances cruciales. En théorie, les #ref-glossary(term: "ORM")[ORM] jouent un rôle essentiel dans les performances d'une application, car ils utilisent un cache pour éviter d'effectuer des requêtes vers la base de données à trop haute fréquence.
|
||||
|
||||
Dans le cas de la base #ref-glossary(term: "PostgreSQL")[PostgreSQL], elle est aussi utilisée pour le système d'information #ref-glossary(term: "GIS")[GIS], il y a donc beaucoup de données à délivrer et avec un grand nombre de requêtes. Améliorer les performances permet de réduire la latence ressentie par l'utilisateur lorsqu'il cherche à charger des données dans l'application. Sur la version 16 de #ref-glossary(term: "PostgreSQL")[PostgreSQL], il est promis une amélioration de 10 % des performances du #ref-glossary(term: "SGBDR")[SGBDR]. Un tel gain de performance permet d'améliorer grandement l'expérience utilisateur.
|
||||
Dans le cas de la base #ref-glossary(term: "PostgreSQL")[PostgreSQL], elle est aussi utilisée pour le système d'information #ref-glossary(term: "GIS")[GIS], il y a donc beaucoup de données à délivrer et avec un grand nombre de requêtes. Améliorer les performances permet de réduire la latence ressentie par l'utilisateur lorsqu'il cherche à charger des données dans l'application. Sur la version 16 de #ref-glossary(term: "PostgreSQL")[PostgreSQL], il est promis une amélioration de dix pourcents des performances du #ref-glossary(term: "SGBDR")[SGBDR]@postgres-sql. Un tel gain de performance permet d'améliorer grandement l'expérience utilisateur.
|
||||
|
||||
Il faut maintenant déterminer quel est le type de migration le plus adéquat dans ce cas de figure pour éviter les coûts supplémentaires qui peuvent être facilement évités.
|
||||
Il faut maintenant déterminer quel est le type de migration le plus adéquat dans ce cas de figure, pour éviter les coûts supplémentaires qui peuvent être facilement évités.
|
||||
|
||||
Je dois dans un premier temps chercher les technologies utilisées dans l'application et m'assurer que celles-ci soient compatibles avec la nouvelle base. Par la suite, je vais devoir valider la compatibilité entre la version de la base source et de la base cible. Avec cette confirmation, je pourrai alors chercher la meilleure manière d'effectuer cette migration parmi les différentes options disponibles que j'ai pu exposer précédemment.
|
||||
|
||||
@ -111,7 +111,7 @@ Il faut bien différencier #ref-glossary(term: "EF")[EntityFramework] qui n'est
|
||||
|
||||
La version post mise à jour de Npgsql était la version 4.1.13 et la dernière version disponible qui utilise les horodatages avec fuseau horaire est la version 8.0.3. En essayant de le mettre à jour avec cette version, je me suis rendu compte qu'#ref-glossary(term: "EF")[EntityFramework] n'était pas compatible avec la version 8.0.3. La dernière version du paquet Npgsql disponible pour #ref-glossary(term: "EF")[EF] étant la version 6.4.3, je dois donc me contenter de cette version.
|
||||
|
||||
Avant de valider l'utilisation de ce dernier dans toute l'application, je dois valider qu'elle supporte les horodatages avec fuseau horaire et qu'elle est également compatible avec le reste de l'application. En se référant à la documentation fournie, la première version à intégrer les horodatages avec fuseau horaire est bien la version 6.X.X d'Npgsql, elle est donc compatible avec le besoin de sauvegarder les fuseaux horaires pour les versions.
|
||||
Avant de valider l'utilisation de ce dernier dans toute l'application, je dois valider qu'elle supporte les horodatages avec fuseau horaire et qu'elle est également compatible avec le reste de l'application. En se référant à la documentation fournie#hide[@npgsql], la première version à intégrer les horodatages avec fuseau horaire est bien la version 6.X.X d'Npgsql, elle est donc compatible avec le besoin de sauvegarder les fuseaux horaires pour les versions.
|
||||
|
||||
Si on souhaite passer sur la nouvelle version du paquet Npgsql, la version 8.X.X, il n'y a pas d'autre choix que de passer d'#ref-glossary(term: "EF")[EF] à #ref-glossary(term: "EF")[EF]Core. Faire le choix de mettre à jour l'application #ref-glossary(term: "EF")[EF]Core permettrait de compléter l'objectif de maintenir l'application à jour et saine. En effet, pour rappel, #ref-glossary(term: "EF")[EF] n'est maintenant plus mis à jour régulièrement.
|
||||
|
||||
@ -128,7 +128,7 @@ Le schéma @npgsql-versions-incompatibilty ci-dessous résume la situation d'inc
|
||||
|
||||
La dernière étape permettant de valider cette étape de migration est de s'assurer que la nouvelle version de #ref-glossary(term: "PostgreSQL")[PostgreSQL] installée à de meilleures performances que la version remplacée. Pour valider cela, il a été développé un système en interne de test de performance. L'architecture complexe de la base et la relation avec des données géographiques et attributaires peut rendre les requêtes parfois plus longues d'exécution.
|
||||
|
||||
Pour effectuer un test de performance, le système utilise une fonctionnalité gourmande en ressource, les groupes. Dans l'environnement InfSuite, il est possible d'afficher sur la carte les objets d'infrastructure. Par défaut tous les objets d'un dataowner sont affichés. Pour permettre d'axer son travail sur des objets d'infrastructures particuliers, alors il est possible d'appliquer un filtre à toutes ces entités. Le mode "Groupe" de l'application permet de créer alors deux types différents de filtres.
|
||||
Pour effectuer un test de performance, le système utilise une fonctionnalité gourmande en ressource, les groupes. Dans l'environnement InfSuite, il est possible d'afficher sur la carte les objets d'infrastructure. Par défaut tous les objets d'un DataOwner sont affichés. Pour permettre d'axer son travail sur des objets d'infrastructures particuliers, alors il est possible d'appliquer un filtre à toutes ces entités. Le mode "Groupe" de l'application permet de créer alors deux types différents de filtres.
|
||||
|
||||
Le premier type de filtres est un filtre statique. Peu gourmand en ressource et très simple d'utilisation, on peut y ajouter des entités manuellement et cela va permettre de n'afficher que les objets sélectionnés dans l'application. Fonctionnellement parlant ce n'est qu'une relation de base de données.
|
||||
|
||||
@ -138,7 +138,7 @@ Il est possible de créer des règles avec chaque propriété d'un objet d'infra
|
||||
Étant utilisé par les services #ref-glossary(term: "GIS")[GIS] de l'application, s'assurer de la performance de ce système est primordial.
|
||||
|
||||
Ce que l'outil permet de tester est ce système de groupe/filtres. Il va chercher les différents filtres existants en base de données, peu importe le client qui a pu les créer, et les exécuter.\
|
||||
Cette méthode permet de connaître les performances réelles de la base dans un cas pratique spécifique à l'application et non pas d'avoir des performances théoriques fournies par les développeurs du #ref-glossary(term: "SGBDR")[SGBDR] qui peuvent être tournées en leur faveur. Nous cherchons donc à savoir si le chiffre de 10% en gain de performances est réel ou non.
|
||||
Cette méthode permet de connaître les performances réelles de la base dans un cas pratique spécifique à l'application et non pas d'avoir des performances théoriques fournies par les développeurs du #ref-glossary(term: "SGBDR")[SGBDR] qui peuvent être tournées en leur faveur. Nous cherchons donc à savoir si le chiffre de dix pourcents en gain de performances est réel ou non.
|
||||
|
||||
L'objectif est donc de comparer les performances de la base de production encore sous #ref-glossary(term: "PostgreSQL")[PostgreSQL] 14, avec les performances d'une base de développement installée pour l'occasion, elle, sous #ref-glossary(term: "PostgreSQL")[PostgreSQL] 16. Après avoir exécuté l'outil de benchmark sur les deux bases, je récupère les données brutes en sortie de programme pour les analyser. Ci-dessous un exemple de données de sorties fournies par le programme après exécution.
|
||||
|
||||
@ -187,7 +187,7 @@ Structure du tableau de résultats:
|
||||
|
||||
Dans les réultats obtenus, je remarque rapidement que le temps de traitement entre les deux bases n'est pas drastiquement différent. Pour le temps de traitement global des objets d'infrastructure identiques entre les deux bases, on ne gagne que 0.23 milliseconde après la migration. Pour filtrer mes résultats, j'utilise la méthode ``` =SUM(SUMIF(pg14[Group_Id]; VLOOKUP(pg14[Group_Id]; pg16[Group_Id]; 1;FALSE); pg14[Load_Duration_In_Ms]))``` qui va exclusivement récupérer les lignes pour lesquelles les groupes analysés sont présents dans les deux bases, puis faire la somme des résultats de performances.
|
||||
|
||||
Pour terminer mon analyse, je transforme les résultats en pourcentages dans le tableau @perf_gain_sheet_1. Avec ça je peux comparer les 10% de performances annoncées avec les résultats réels obtenus.
|
||||
Pour terminer mon analyse, je transforme les résultats en pourcentages dans le tableau @perf_gain_sheet_1. Avec ça je peux comparer les dix pourcents de performances annoncées avec les résultats réels obtenus.
|
||||
|
||||
#figure(
|
||||
caption: "Résultat des gains de performances entre PGSQL 14 et 16",
|
||||
|
19
main.typ
19
main.typ
@ -8,7 +8,7 @@
|
||||
logo: "assets/images/unit-solutions-logo.png",
|
||||
tutor: "M. Cédric Martin"
|
||||
),
|
||||
degree: "Master informatique et mobilité",
|
||||
degree: "Master 2 informatique et mobilité",
|
||||
promotion: (title: "UHA 4.0.5", year: 2024),
|
||||
glossary: (
|
||||
"Dump": [Un fichier "dump" est un fichier de sauvegarde qui contient une copie de toutes les données et métadonnées d'une base de données à un instant T.],
|
||||
@ -37,18 +37,18 @@ Je souhaite exprimer ma gratitude envers M. Cédric MARTIN, mon tuteur en entrep
|
||||
|
||||
Je remercie chaleureusement tous mes collègues chez Unit Solutions pour leur partage de connaissances, leur bonne humeur et leur soutien.
|
||||
|
||||
Je tiens à exprimer ma reconnaissance envers toute l'équipe pédagogique de l'UHA 4.0, notamment M. Mounir ELBAZ, M. Pierre-Alain MULLER, M. Florent BOURGEOIS, M. Daniel DA FONSECA, M. Pierre SCHULLER et Mme. Audrey BRUNSPERGER, ainsi que les étudiants de l'UHA 4.0. Leur soutien, leur partage de connaissances, leur accompagnement et leurs conseils au long de l'année m'ont permis de mener à bien mon projet professionnel.
|
||||
Je tiens à exprimer ma reconnaissance envers toute l'équipe pédagogique de l'UHA 4.0, notamment M. Mounir ELBAZ, M. Pierre-Alain MULLER, M. Florent BOURGEOIS, M. Daniel DA FONSECA, M. Pierre SCHULLER et Mme. Audrey BRUNSPERGER, ainsi que les étudiants de l'UHA 4.0. Leur soutien, leur partage de connaissances, leur accompagnement et leurs conseils tout au long de l'année m'ont permis de mener à bien mon projet professionnel.
|
||||
|
||||
Enfin, je souhaite exprimer ma gratitude envers les relecteurs de ce rapport pour leurs précieux conseils, qui m'ont permis de mener à bien l'écriture de ce rapport.
|
||||
],
|
||||
introduction: [
|
||||
Après avoir réalisé mon parcours de licence professionnelle "Développeur informatique" au sein de l'UHA et obtenu mon diplôme, j'ai souhaité approfondir mes connaissances rejoignant le cursus master proposé par l'UHA 4.0 qui fait suite à la licence.
|
||||
|
||||
Mon parcours de master a été réalisé au sein de l'entreprise Unit Solutions basée à Allschwil en Suisse, qui s'était déjà proposée de me suivre dans mon cursus universitaire pour les deux années précédentes. Mes contributions principales se sont orientées sur le projet InfSuite et l'environnement l'entourant. L'application pour laquelle j'ai pu apporter ma contribution a comme objectif premier de gérer le suivi et la maintenance d'état d'ouvrages d'art.
|
||||
Mon parcours de master a été réalisé au sein de l'entreprise Unit Solutions basée à Allschwil en Suisse, qui s'était déjà proposée de me suivre dans mon cursus universitaire pour les deux années précédentes. Mes contributions principales se sont orientées sur le projet InfSuite et l'environnement l'entourant. L'application pour laquelle j'ai pu apporter ma participation a comme objectif premier de gérer le suivi et la maintenance d'état d'ouvrages d'art.
|
||||
|
||||
Dans ce mémoire, je vous présenterais les détails du projet InfSuite et de ma contribution au projet. J'ai eu pour objectif principal de planifier et de réaliser une migration de base de données. En effet, la base de données étant un point clef de l'application, une maintenance de cette dernière est nécessaire pour assurer une certaine pérennité de l'application. Cette étape de migration s'inscrit dans un projet de maintenir les technologies de l'application à jour et de permettre de palier à d'autres problèmes.
|
||||
|
||||
Dans ce document, je commencerai par présenter ce qui m'a amené à rejoindre le cursus master et les compétences acquises durant ma formation, j'aborderais par la suite les enjeux, une analyse et le plan d'action de la migration et, puis j'expliquerais la réalisation et les problèmes rencontrer et enfin, je pourrais conclure ce document.
|
||||
Dans ce document, je commencerai par présenter ce qui m'a amené à rejoindre le cursus master et les compétences acquises durant ma formation, j'aborderais par la suite les enjeux, une analyse et le plan d'action de la migration, puis j'expliquerais la réalisation et les problèmes rencontrés et enfin, je pourrais conclure ce document.
|
||||
],
|
||||
conclusion: [
|
||||
Pour conclure cette seconde année de master en alternance chez Unit Solutions, travailler sur un sujet étant aussi ancré dans le projet qu'est la base de données est d'une importance cruciale pour mon parcours académique et professionnel. Travailler sur la migration de base de données pour l'application InfSuite m'a permis de développer et d'approfondir des compétences essentielles en gestion de données et en technologies web.
|
||||
@ -74,8 +74,15 @@ L'histoire avec Julien continue donc chez Unit Solutions AG à partir d'octobre
|
||||
#set align(right)
|
||||
*M. Cédric Martin*, chef de projet de la suite logicielle « InfSuite »
|
||||
],
|
||||
abstract: [Abstract],
|
||||
keywords: ("", "")
|
||||
abstract: [Ce document présente ma seconde et dernière année en tant qu'étudiant en master au sein de l'entreprise Unit Solutions. Il met en évidence ma participation à l'une des tâches à fort intérêt pour l'entreprise sur le sujet d'une migration de base de données au cours des neuf mois de mon immersion professionnelle. Ce rapport détaille les connaissances et les compétences, personnelles et professionnelles, acquise durant cette période. Il aborde les divers défis auxquels j'ai été confronté, ainsi que les différentes analyses et solutions que j'ai apportées pour les résoudre.],
|
||||
keywords: (
|
||||
"Migration",
|
||||
"Base de données",
|
||||
"PostgreSQL",
|
||||
"Performances",
|
||||
"Analyses",
|
||||
"C#"
|
||||
)
|
||||
)
|
||||
|
||||
#include "chapters/contexte.typ"
|
||||
|
12
template.typ
12
template.typ
@ -1,6 +1,5 @@
|
||||
#import "@preview/acrostiche:0.2.0": *
|
||||
|
||||
#let appendixes = state("appendixes", ())
|
||||
#let section = state("section", none)
|
||||
#let glossary-terms = state("glossary", ( : ))
|
||||
|
||||
@ -209,19 +208,14 @@
|
||||
[
|
||||
#set page(header: pageheader(content: "Annexes"))
|
||||
= Annexes
|
||||
#counter(heading).update(0)
|
||||
#set heading(numbering: "I.", outlined: false, supplement: "Annexe")
|
||||
#locate(loc => {
|
||||
for body in appendixes.final(loc) {
|
||||
body
|
||||
}
|
||||
})
|
||||
#context query(figure).sum()
|
||||
]
|
||||
}
|
||||
|
||||
// Last page.
|
||||
[
|
||||
= Résumé
|
||||
#set text(rgb("#888888"), font: "Open Sans", weight: "black")
|
||||
#abstract
|
||||
|
||||
= Mots-clés
|
||||
@ -231,6 +225,4 @@
|
||||
]
|
||||
}
|
||||
|
||||
#let appendix(body) = appendixes.update(it => it + (body,))
|
||||
|
||||
#let ref-glossary(term: "", body) = locate(loc => link(glossary-terms.final(loc).at(term), body))
|
Loading…
Reference in New Issue
Block a user