Développement d'une base de donnée : Différence entre versions

De Wiki d'activités IMA
(Logiciel et librairie utilisé)
(Page blanchie)
 
(53 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
__TOC__
 
<br style="clear: both;"/>
 
  
=Présentation générale=
 
* '''Nom du projet :''' Développement d'une base de donnée
 
 
* '''Stagiaire :''' Fabien DI NATALE
 
 
=Projet=
 
 
==Le sujet==
 
 
Nous devons créer une base de donnée dont le but sera de regrouper toute les interfaces connectées au réseau et de pouvoir les retrouver par des requêtage spécifique : Nous pourrons rechercher les interfaces connectées par Caractéristiques, par nom ou par ID. Cette base de donnée devra être accessible et modifiable par une application web codé en java. Nous ne devons pas sous estimer la possibilité d’une augmentation exponentiel des données en cas d’utilisation de notre projet à plus grande ampleur. Sans oublier la protection des données.
 
 
Chaque interface connectées comportera les champs suivants:
 
* Un FCC_ID
 
* Un nom
 
* Son mode de communication
 
* Sa marque
 
* Sa version
 
* Ses caractéristiques
 
* Ses failles de sécurité
 
 
==Cahier des charges==
 
'''Contexte :'''
 
Énormément d’interfaces connectée sont utilisé dans le monde mais aucune base de donnée de l’IRCICA permet leur identification et le stockage de leurs information
 
 
'''Objectif :'''
 
Créer une base de donnée capable de gérer une grandes quantité d’interface connectée et accessible à travers le monde
 
 
'''Besoins fonctionnels :'''
 
Nous avons besoin que cette base de donnée soit facilement et rapidement modifiable
 
Facilement et rapidement accessible
 
La plus résistante possible aux différentes attaques
 
 
'''Contraintes :'''
 
Le serveur web doit être développé en Java et nous devons avoir un niveau de sécurité élevé
 
 
'''Résultats attendus :'''
 
Une applications web protégé et accessible avec une grande efficacité de recherche et de modification des données
 
 
'''Exigences :'''
 
Nous devons avoir notre base de donnée ainsi que notre application web bien protégé contre les cyber attaque
 
 
=Informations importantes=
 
 
==Les Bases de données==
 
 
Pour commencer voici les différents type de base de données:
 
 
 
*Les bases de données relationnel:
 
 
Les bases de données relationnel sont les bases de données de référence, les plus anciennes et les plus utilisé, elles possèdent toute le même language le SQL. Celles ci permettent une grande rapidité de traitement et la possibilité de gérer de grand volume. Cependant les bases de données relationnel sont très strict dans leur conception et une fois faite elles ne peuvent plus être modifier. De plus chaque membres d'une table doit posséder les attributs avec lesquels la table a était créé.
 
 
 
*Les bases de données orientées clé-valeur:
 
 
Ces bases de données reliant simplement une clé à une valeur sont des bases de données très rapide, ce sont les bases de données les plus rapide en terme de recherche et d'accés aux données mais sont limité dans la formation des donnée et la gestion de requête sophistiqué.
 
 
 
*Les bases de données orientée documents:
 
 
Ces bases de données est l'évolution des bases de données clé-valeur ajoutant certains avantage comme une structure très libre contrairement aux structure clé-valeur se limitant à une clé pour une valeur.
 
Ces bases de données permettent des recherches plus sophisitiqué et peuvent enregistré des structures extrèmement varié au sein de la même base de donnée. Ceci lui fait perdre un peu de rapidité par rapport aux bases de données clé-valeur. Cependant les bases de données orientée documents reste très performante et très rapide.
 
 
 
*Les bases de données orientée collones :
 
 
Ces bases de données sont orientée collones, elles peuvent ainsi modifier toute les données à l'aide d'une seule commande très rapidement.
 
Ces bases de données permettent l'ajout d'un attribut très rapidement. Ces bases de données sont alors recherché et utilisé pour leur capacité à monter en charge et à acceuillir une forte volumétrie de données.
 
 
 
*Les bases de données à index inversé:
 
 
Ces bases de données font appel aux même principe que les bases de données orientée documents tout en profitant d'excellentes capacité de requêtage, ce système de BDD a était popularisé par google et est donc très puissant pour les recherches en milieu de texte mais ceci augmente le temps d'insertion de nouvelles données.
 
 
 
Comme nous avons pu le voir plus haut notre base de donnée a besoin de pouvoir faire des recherches rapide, simple et organisé tout en gardant une rapidité de modification et d'ajout de données.
 
Nous voulons aussi que la bases de données nous donne la possibilité de modifier facilement les structures de données déjà présente.
 
J'ai alors choisie l'utilisation d'une base de données orientées document.
 
 
 
'''Couchbase:'''
 
 
Cette base orientée documents privilégie la cohérence des données aux performances pures. Couchbase dispose d'un outil de requêtage normalisé SQL appelé N1QL. Couchbase vise les applications web et peut être utilisé sur mobile. Possibilité d'utiliser les jointures à l'aide du language N1QL. Couchbase est très proche de CouchDB. BDD orientée clé-valeur et documents, fait un mix des deux pour rendre le plus polyvalent possible.
 
 
 
'''MongoDB:'''
 
 
Moteur orientée documents reconnu pour la souplesse de sa structure. Il reste très souple, pas besoin de préstructurer les données il suffit de créer des collections d'y mettre des éléments sans avoir besoin de dire comment les organiser. Tout en répondant à 80% des besoins couverts par une base relationnelle traditionnelle, à l'exception du transactionnel.
 
Ce moteur s'appuie sur la technique json. Recherche rapide et puissante mais pas de fonction join.
 
 
J'ai fait le choix d'utiliser la base de données MongoDB car c'est une base de données très performante et très souple possédant une énorme communauté et donc énormément de documentation, tutoriel et peu de bug. De plus, MongoDB profite d'un driver très bien aboutit pour le code java nous permettant alors de manipuler toute les bases de données facilement tout en respectant notre cahier des charges.
 
 
 
 
==MongoDB==
 
 
MongoDB est une base de données noSQL ce qui signifie n'utilisant pas le language de communication ainsi que les requête SQL. Ce n'est donc pas une base de données relationnel comme on a l'habitude de voir mais une base de données orienté document.
 
 
Cette orientation document lui donne plusieurs avantage comme :
 
*une grande simplicité;
 
*une grande souplesse ;
 
*une grande évolutivité.
 
 
De plus MongoDB propose les fonctionnalités suivantes:
 
*la réplication lui permettant de dupliquer les serveurs de base de données pour répondre à une monté en charge rapide tout en augmantant sa tolérance aux pannes;
 
*le Sharding lui permettant de répartir les données sur plusieurs serveurs afin d'augmenter les performances ou de répartir les données géographiquement;
 
*un système d’information géographique permettant de manipuler simplement des positions sur un plan ou sur le globe terrestre;
 
*un système de recherche optimisé en fonction de la langue utilisée.
 
 
 
MongoDB utilise les fichiers JSON pour gérer ses données rendant ainsi les fichiers facilement manipulable et modifiable.
 
Les bases de données MongoDB sont alors utilisé lorsque les systèmes ont besoin de prévoir une montée en charge rapide, ayant besoin de schéma souple et facilement reconfigurable, ayant besoin d'une répartition géographique des données ou encore une base de données ayant besoin de système de recherche, de stockage de fichier ou d’un système information géographique.
 
 
==Java EE==
 
 
Le terme « Java EE » signifie Java Enterprise Edition, et était anciennement raccourci en « J2EE ». Il fait quant à lui référence à une extension de la plate-forme standard. Autrement dit, la plate-forme Java EE est construite sur le langage Java et la plate-forme Java SE, et elle y ajoute un grand nombre de bibliothèques remplissant tout un tas de fonctionnalités que la plate-forme standard ne remplit pas d'origine. L'objectif majeur de Java EE est de faciliter le développement d'applications web robustes et distribuées, déployées et exécutées sur un serveur d'applications.
 
Java EE a était très longtemps déprécié par sa complexité menant même à la naissance du framework Spring visant à remplacer Java EE trop complexe à prendre en main mais Java EE a su évoluer et se simplifier tandisque Spring se compléxifié.
 
 
 
Java EE se distingue de ses concurent par la prise en charge de toute les bibliothèques standard répondant à la plupart des besoin ainsi que des bibliothèques logicielles additionnelles dédiées à des applications professionnelles, facilitant par exemple le développement d'applications pour architecture distribuée.
 
 
 
Aujourd'hui confié par Oracle à la fondation éclipse et maintenant appelé Jakarta EE, il dispose d'énormément de composant. En particulier des API ainsi que des composant orienté développement web tel que les Servlets qui est le controller dans les modèles MVC des sites web. Il possédes aussi des framexork web ainsi que des bibliothèques de balises tel que les JavaServer Pages (JSP), les Java Standard Tag Library (JSTL) et les JavaServer Faces (JSF).
 
 
=Mise en œuvre=
 
 
==Manipulation des données MongoDB à l'aide d'une application java==
 
 
===Logiciel et librairie utilisé===
 
 
Afin de apprendre à manipuler MongoDB et que cela corresponde bien à notre cahier des charges nous avons utilisé les logiciels suivant:
 
 
MongoDB:
 
*mongo-tools        collection of tools for administering MongoDB servers
 
*mongodb-org        MongoDB open source document-oriented database system (metapackage)
 
*mongodb-org-mongos MongoDB sharded cluster query router
 
*mongodb-org-server MongoDB database server
 
*mongodb-org-shell  MongoDB shell client
 
 
API java :
 
*MongoDB driver
 
 
Afin d'utiliser l'API MongoDB driver nous avons installé maven et intégré la dépendance suivante :
 
 
<dependencies>
 
    <dependency>
 
        <groupId>org.mongodb</groupId>
 
        <artifactId>mongodb-driver-sync</artifactId>
 
        <version>3.10.1</version>
 
    </dependency>
 
</dependencies>
 
 
===Développement de l'application de gestion java===
 
 
==Développement de l'application web en java==
 
 
===Logiciel et librairie utilisé===
 
 
===Développement de l'application web java===
 
 
=Source=
 
 
==Documentation==
 
 
*Les bases de données:
 
**[https://www.journaldunet.com/solutions/dsi/1194284-base-nosql-laquelle-choisir-pour-quels-besoins/ Comment choisir sa base de données]
 
**[https://www.lemagit.fr/article/NoSQL-le-choix-difficile-de-la-bonne-technologie Comment choisir sa base de données NoSQL]
 
**[https://sqlpro.developpez.com/cours/modelisation/metadonnees/ Présentation des métadonnées]
 
**[http://b3d.bdpedia.fr/couchbase.html Document Couchbase]
 
 
 
*MongoDB:
 
**[https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/ Installer MongoDB]
 
**[https://www.mongodb.com/blog/post/getting-started-with-mongodb-and-java-part-i Base de la communication entre MongoDB et java]
 
**[https://www.mongodb.com/blog/post/mongodb-security-best-practices Réglage du serveur MongoDB]
 
**[https://docs.mongodb.com/manual/reference/operator/ Documentation officiel de MongoDB]
 
**[https://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/aggregation/ Explication de la fonction agrégation de MongoDB]
 
**[https://docs.mongodb.com/manual/tutorial/query-documents/ Formation des requêtes de recherche]
 
**[https://docs.mongodb.com/manual/reference/operator/update/ Comment mettre à jour notre base de données]
 
 
 
*Sécuriser le site web :
 
**[https://wpformation.com/wordpress-http-https/ passer de http à https]
 
**[https://openclassrooms.com/fr/courses/1197906-securiser-son-serveur-linux Sécuriser un serveur linux]
 
**[https://docs.ovh.com/fr/dedicated/securiser-un-serveur-dedie/ Sécuriser un serveur dédié]
 
 
 
[https://docs.oracle.com/javase/7/docs/api/index.html Documentation java officiel]
 
 
==Tutoriel==
 
 
*Manipuler les bases de données mongoDB:
 
**[https://openclassrooms.com/fr/courses/1915371-guide-de-demarrage-pour-utiliser-mongodb Base de la communication java/MongoDB]
 
**[https://fr.blog.businessdecision.com/bigdata/2017/10/tutoriel-mongodb-requetes/ Manipulation de MongoDB à l'aide du terminal]
 
**[https://mongodb-documentation.readthedocs.io/en/latest/ecosystem/tutorial/use-aggregation-framework-with-java-driver.html Comment utiliser l'agrégation avec java]
 
 
 
*Tutoriel Java EE et création du site:
 
**[https://developer.mozilla.org/fr/docs/Web Toute la doc précise sur les balises CSS et HTML]
 
**[https://openclassrooms.com/fr/courses/626954-creez-votre-application-web-avec-java-ee/618989-introduction-au-java-ee Base java ee]
 
**[https://openclassrooms.com/fr/courses/2434016-developpez-des-sites-web-avec-java-ee/2438571-quest-ce-que-java-ee Base java ee en vidéo]
 

Version actuelle datée du 19 juin 2019 à 08:16