Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2164 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Organisation des fichiers de la BDD

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Organisation des fichiers de la BDD

n°2222714
bill g@te
Posté le 20-03-2014 à 14:52:01  profilanswer
 

Bonjour,
 
Je fais appel à l'expérience de chacun afin de voir la solution que j'adopterai dans le cas du stockage de pièce jointes : PDF, images,....
J'ai pris comme initiative de retenir dans la base de donnée le chemin d'accès au fichier, cependant je me tâte à propos de l'organisation des pièces jointes dans l'arborescence du serveur.
 
Si un utilisateur upload une photo de profil, cette dernière va dans un dossier avec son id+nom ?
Dans le cas ou un utilisateur upload un document pour d'autres personnes (par exemple facture ) vaut-il mieux créer un répertoire (facture) chez la personne qui publie le document ?
 
Il y a encore de nombreuses solutions, pourriez-vous me dire comment avez-vous l'habitude de procéder avec les avantages/désavantages ?
 
Merci :)
 
Bonne journée.

mood
Publicité
Posté le 20-03-2014 à 14:52:01  profilanswer
 

n°2222735
rufo
Pas me confondre avec Lycos!
Posté le 20-03-2014 à 17:46:13  profilanswer
 

Quand on regarde Mediawiki, il évite de lier les fichiers à des ID (d'articles ou users). Il utilise des répertoires portant comme nom un numéro de 0 à 9. Chaque répertoire possèdes 10 sous-répertoires reprenant le nom du répertoire parent + un n° de 0 à 9. Ex : 9 pour le répertoire parent puis 90, 91, ... 99 pour les sous-répertoires.
 
Tu peux partir aussi sur des répertoires avec des noms de type hash md5.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2222766
bill g@te
Posté le 20-03-2014 à 23:21:13  profilanswer
 

Merci pour cette réponse rufo.
 
Au vu des conseils que tu m'as donnés dois-je comprendre qu'il n'y a pas vraiment de méthode avantageuse, chacun organise les fichier sur son serveur de la façon la plus logique qu'il l'entend ?
 
Merci.

n°2222789
rufo
Pas me confondre avec Lycos!
Posté le 21-03-2014 à 09:19:46  profilanswer
 

En quelque sorte. Ca dépend aussi pas mal de la nature des fichiers déposés et du volume de consultation.
Ex : si t'as des fichiers avec des extension très hétérogènes, tu peux envisager de prendre comme clé de hash, l'extension (contrairement à si t'as que des pdf ou .doc)
 
Une chose est sûre de mon point de vue, il ne faut pas stocker le fichier dans la BD. Certains le font et présentent des arguments (notamment, avoir toutes les données au même endroit, facilitant la migration des données ou leur transport dans un seul "fichier" ).

Message cité 1 fois
Message édité par rufo le 25-03-2014 à 10:31:49

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2223026
Sve@r
Posté le 24-03-2014 à 22:51:04  profilanswer
 

bill g@te a écrit :

Bonjour,
 
Je fais appel à l'expérience de chacun afin de voir la solution que j'adopterai dans le cas du stockage de pièce jointes : PDF, images,....


Bonjour
Justement j'ai fait ça récemment.
 
J'ai créé une table "pj" (pièces-jointes) contenant l'identifiant de la pj (typiquement le md5 de son contenu), le nb de fois où elle est référencée dans la bdd et bien évidemment son contenu. Avec un petit trigger associé à l'insert qui, si la pj y est déjà, se contente d'incrémenter le nb_liens. De même un trigger associé au delete se contente de décrémenter le nb liens et l'efface réellement si celui-ci tombe à 0.
 
Et dans la table à laquelle elle est référencée (par exemple l'image d'une moto alors elle sera référencée dans la table "moto" ) j'ai un champ "id_pj" (lié au champ "pj.id" ci dessus) et "chemin".
 
Ainsi, quand un utilisateur insère une pièce-jointe dans sa base, il y a le nom de la pj à l'endroit où il s'en sert mais le contenu est stocké ailleurs. S'il la réinsère une seconde fois il y a alors de nouveau le nom (voire un autre si entre temps il a changé) mais le contenu reste stocké qu'une fois. Et s'il veut visualiser la pj, le nom me donne l'extension de la pj ce qui me permet de descendre la pj dans un fichier temporaire mais avec la bonne extension et ensuite quand je l'ouvre c'est l'OS qui associe l'extension au logiciel dédié à sa visualisation.
 
J'ai d'ailleurs pensé plusieurs fois que le nom ne me sert pas à grand chose et que seule l'extension me suffirait mais ça rassure l'utilisateur, quand il ouvre la bdd, de voir la pj avec le nom qu'il lui avait mis. Alors c'est marrant parce que parfois ils me disent "ma pièce-jointe je l'ai appellée 'pj.pdf' mais dans la base il y en a d'autres qui se nomment 'pj.pdf'" et je leur réponds "c'est pas grave, la bdd sait les différencier". Et ça ne les étonne même pas de voir que la pièce-jointe se nomme "G:\pj.pdf" (G: étant la lettre de la clef USB qui contenait la pj quand elle a été insérée en bdd) et qu'ils arrivent à ouvrir la pièce-jointe alors que la clef n'y est plus...
 

rufo a écrit :

Une chose est sûre de mon point de vue, il ne faut pas stocker le fichier dans la BD. Certains le font et présentent des arguments (notamment, avoir toutes les données au même endroit, facilitant la migration des données ou leur transport dans un seul "fichier" ).


Justement c'est ce qui m'avait été demandé. Parce que j'avais aussi pensé stocker les pièces-jointes dans un dossier classique géré par l'OS et ne référencer en bdd que le chemin des pj stockées. Cela aurait été possible. Mais quand j'en ai parlé aux utilisateurs, ils ont préféré avoir la pj stockée en bdd afin de n'avoir qu'un dump à emporter s'ils voulaient la redéployer ailleurs. Donc comme tu le vois, rien n'est jamais "sûr" et de mon point de vue les solutions à adopter dépendent aussi du besoin énoncé...


Message édité par Sve@r le 24-03-2014 à 22:58:37

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°2223059
rufo
Pas me confondre avec Lycos!
Posté le 25-03-2014 à 10:38:05  profilanswer
 

Ben tu vois, tu viens justement de donner l'argument que mettre les fichiers dans la BD, c'est plus facile pour migrer la base :/
Sauf que moi, j'y vois un pb de perfs. Avec mon système, quand on veut télécharger le fichier, c'est juste apache qui va chercher sur le HDD le fichier et qui le pousse à l'utilisateur. Dans ton cas, y'a en plus le transfert entre le sgbd et apache. Si t'as beaucoup d'accès concurrents, ça risque de faire un goulet d'étranglement, a fortiori si tu es sur une architecture répartie où ton sgbd n'est pas sur le même serveur qu'apache :/
 
Sinon, pourquoi tu stockes dans la BD le path du fichier qui a été uploadé et pas simplement le nom du fichier dans la mesure où ce path ne correspond à rien pour le serveur :??:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2223104
Sve@r
Posté le 25-03-2014 à 17:15:08  profilanswer
 

rufo a écrit :

Ben tu vois, tu viens justement de donner l'argument que mettre les fichiers dans la BD, c'est plus facile pour migrer la base :/


Plutôt pour la déployer ailleurs...
 

rufo a écrit :

Sauf que moi, j'y vois un pb de perfs. Avec mon système, quand on veut télécharger le fichier, c'est juste apache qui va chercher sur le HDD le fichier et qui le pousse à l'utilisateur. Dans ton cas, y'a en plus le transfert entre le sgbd et apache. Si t'as beaucoup d'accès concurrents, ça risque de faire un goulet d'étranglement, a fortiori si tu es sur une architecture répartie où ton sgbd n'est pas sur le même serveur qu'apache :/


Là ton affirmation d'origine est mieux justifiée. Sauf que mon appli n'est pas une appli html mais client-serveur direct. Donc... pas de apache intermédiaire.
 

rufo a écrit :

Sinon, pourquoi tu stockes dans la BD le path du fichier qui a été uploadé et pas simplement le nom du fichier dans la mesure où ce path ne correspond à rien pour le serveur :??:


Comme je l'ai dit, pour rassurer l'utilisateur qui voit le path qu'il avait lui-même positionné. Effectivement le path ne correspond à plus rien de concret. Même le nom ne correspond à rien vu que quand j'affiche une PJ, je commence par la créer dans le dossier temporaire de l'utilisateur et son nom c'est l'id stocké en bdd (donc une suite md5). J'y rajoute ensuite l'extension pour que l'OS sache comment l'ouvrir et voilà.
Donc le path ne sert à rien mais (mis à part qq octets inutiles) il ne gêne pas.  
D'ailleurs je viens de programmer un petit compteur. Nous avons 2402 PJ (poids global de 289M) et la somme de leurs noms dans les différentes tables fait 161789 octets soit grosso-modo 160k. Et la bdd entière fait 659M donc c'est vraiment négligeable...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°2223108
rufo
Pas me confondre avec Lycos!
Posté le 25-03-2014 à 17:47:28  profilanswer
 

Tes PJ prennent donc 43% de ta BD; ça fait beaucoup, je trouve. Suivant les sgbd, ça pourrait nuire aux perfs à la longue. Ca dépend pas mal de comment sont gérer les champs de types blob (ou équivalent).
 
Mais bon, comme je le disais, y'a des "pour" et des "contre" pour les 2 techniques. Dans ton cas (pas d'appli web), j'ai pas vraiment d'argument pertinent "contre". Ma solution a le mérite de fonctionner niveau perfs qu'on soit en client/serveur direct ou en appli web. ta technique, en contexte web, est plus discutable. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2223113
Sve@r
Posté le 25-03-2014 à 17:59:29  profilanswer
 

rufo a écrit :

Tes PJ prennent donc 43% de ta BD; ça fait beaucoup, je trouve. Suivant les sgbd, ça pourrait nuire aux perfs à la longue.


Oui mais chez-moi les PJ sont dans une table "à part" qui n'est invoquée que quand l'utilisateur veut afficher la PJ en question. Et il y a bien entendu un index sur l'identifiant.
Les perfs dans les sgbd dépendent plutôt des jointures dans les requêtes et des index positionnés non ???
 

rufo a écrit :

Ca dépend pas mal de comment sont gérer les champs de types blob (ou équivalent).


C'est du postgres, le top du top de la bdd GPL quoi...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Organisation des fichiers de la BDD

 

Sujets relatifs
Export vers BdD sql depuis serveur web[FORTRAN] Ouvrir les fichiers d'un répertoire sans connaitre leur nom
rotation fichiers awstats[BATCH] Changement d'extension et concaténer des fichiers
Rendre comme liens les résultats d'une BDD pris avec PHPscript batch kill processus + copie de fichiers
[PHP] Organisation ArrayBDD changer chaine de connexion d'une base existante
Gestion de fichiers PHPCopie de fichiers video selon lignes tableau Excel
Plus de sujets relatifs à : Organisation des fichiers de la BDD


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR