Bonjour à tous
Je me pose une question de performance en terme de rapidité d'exécution et maintenance futur.
Voici le sujet :
A partir d'un compte, un utilisateur pourra s'il le souhaite déposer des images à son enregistrement. Il pourra en supprimer aussi. En rajouter d'autre plus tard.
A savoir des à présent, qu'il sera plus courant de récupérer l'ensemble des images pour les afficher que celui d'en supprimer une ou d'en ajouter une par la suite (à part si l'utilisateur est perfectionniste et en modifie souvent le contenu).
Je me pose donc cette question.
Je développe en java/Spring/hibernate/Jpa/hibernate/postGreSql
Table utilisateur : Nom - Prénom
Est-il préférable de créer une table Image, pour l'ensemble des utilisateurs, (on rajoute quelque chose du genre
dans la table Utilisateur )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 @Column(name = "images") @OneToMany(mappedBy="image", cascade=CascadeType.ALL, targetEntity=Image.class, fetch=FetchType.Eager) List<byte[]> listImage
Table image : id(autoGenereate - Long) , idUtilisateur (Long), image (oid)
de ce fait :
// Pour chaque insertion d'image
image.setIdUtilisateur(1);
image.setImage(byte[]);
em.persist(image)
// Supprimer
em.remove(image);
- Il faudra parcourir l'ensemble de la table Image pour récupérer l'ensemble des images de l'utilisateur (oui ou non ? : "listImage" s’arrête des qu'il à trouvé tout, ou indexe-t-il , ou parcours-t-il tout pour chaque recherche d'image ?)
- Supprimer ou ajouter une image ce fait très simplement (et rapidement ?)
------- OU ------
Créer un zip du coté client(IHM) (fait automatiquement par développement lors d'une demande d'enregistrement d'images) et l'envoyer au serveur.
d'où :
- Insérer juste dans la table utilisateur le zip qui devient :
Table utilisateur : Nom - Prénom - file
- Pour visualiser les images, on récupère le zip par "utilisateur.getFile" ( on le cast en (zip) ou le laisse en byte[]) l'envoie à l'IHM qui dé-zippe est affiche le contenu.
- Contrainte (ou pas) l'insertion et la suppression d'image nécessite de récupérer l'ensemble du zip et de le modifier (traitement plus long que dans l'idée d'une table Image (oui ou non ?) )
En fait, je me demande si le fait de faire un 'utilisateur.getFile()' est couteux dans le sens ou le zip ferai 5MO, cela prend un certain temps, une certaine bande passante (je ne suis expert bdd...).
Je m'imagine un rendu dès lors ou il yaurai 1000 photo, 10000 ...
Voici donc la confrontation, si vous aviez une idée de performance ou maintenabilité ? (ps : limiter un nombre d'image s'impose ?)
Une table Image pour l'ensemble des utilisateurs ou Un zip d'image propre à un utilisateur ?
Merci de votre point vue
Partager