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

  FORUM HardWare.fr
  Programmation
  PHP

  Quand utiliser les types BLOB de MySQL ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Quand utiliser les types BLOB de MySQL ?

n°1544095
pot2yaourt
Posté le 18-04-2007 à 08:20:08  profilanswer
 

Salut tlm,
 
Voilà, je sais parfaitement à quoi servent les types Tiny/Medium/Long/Blob de MySQL et donc je ne suis pas là pour vous demander comment enregistrer un fichier en binaire dans un de ces champs, pour ça y'a pas de problème.
 
La question qui me trotte dans la tête c'est : à quel moment est-il judicieux de stocker des données (et quels types de données en particulier ?) dans ces champs, que ce soit pour un site web ou un intranet ??
 
Merci d'avance pour vos réponses !
Lionel.

mood
Publicité
Posté le 18-04-2007 à 08:20:08  profilanswer
 

n°1544140
rufo
Pas me confondre avec Lycos!
Posté le 18-04-2007 à 10:40:00  profilanswer
 

dans le cas de fichiers, on stocke plutôt leur path dans un champ CHAR ou VARCHAR plutôt que le contenu lui-même. Ca va faire grossir inutilement ta BD.

n°1544239
pot2yaourt
Posté le 18-04-2007 à 13:02:31  profilanswer
 

Merci, je le sais parfaitement...  
 
Je repose donc ma question : quel est l'intérêt de stocker des fichiers directement en base (avec tous les inconvénients que ça comporte) plutôt que sur un serveur en stockant uniquement les paths et noms de fichiers en base ?!

n°1544265
rufo
Pas me confondre avec Lycos!
Posté le 18-04-2007 à 13:57:30  profilanswer
 

là, comme ça, je vois pas :/

n°1544281
Je@nb
Kindly give dime
Posté le 18-04-2007 à 14:08:55  profilanswer
 

certains avancent comme argument la sécurité. En effet, seule l'appli et le dbmaster aura accès à la base. Perso je trouve pas trop cet argument valable, il suffit de mettre des bons droits sur les fichiers mais voilà déjà une piste :d

n°1544310
0x90
Posté le 18-04-2007 à 14:30:21  profilanswer
 

Je@nb a écrit :

certains avancent comme argument la sécurité. En effet, seule l'appli et le dbmaster aura accès à la base. Perso je trouve pas trop cet argument valable, il suffit de mettre des bons droits sur les fichiers mais voilà déjà une piste :d


 
"il suffit", mais ça ajoute un truc de plus à faire et à vérifier, vu l'importance de l'erreur humaine dans la sécurité, l'argument peut rester valable.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1544339
MagicBuzz
Posté le 18-04-2007 à 14:50:49  profilanswer
 

je vois surtout deux raisons :
 
- déploiment qui est simplifié.
dans le cas d'un site web, t'as un répertoire sécurisé, peut-être totalement en dehors du site, même sur un autre serveur. diffuser les fichier de façon externe à la base, c'est donc s'exposer à des éventuels problèmes pour retrouver les fichiers si on change de serveur (disque réseau à monter de nouveau, base à mettre à jour pour changer le chemin d'accès, etc.)
 
- sécurité de la gestion
le problème des fichiers stockés sur le disque, c'est que lorsqu'on va supprimer un fichier dans la base, ou en ajouter un, il n'est pas évident d'avoir une garantie que la même action à été effectuée sur le fichier. et l'inverse est tout simplement impossible à garantir.
 
sinon, il y a aussi les possibilités d'indexation du contenu des fichiers. les sgbd offrent des solutions généralement plus poussées que les serveurs de fichiers, notamment parcequ'on peut lier les fichiers à d'autres infos lors des requêtes.
 
enfin, le versioning est aisé avec le sgbd, alors qu'il devient rapidement complexe en utilisant le système de fichier (à cause du point 2)

Message cité 1 fois
Message édité par MagicBuzz le 18-04-2007 à 14:51:30
n°1544672
esox_ch
Posté le 19-04-2007 à 00:21:09  profilanswer
 

Il risque pas de morfler profond le DB si on stoque dedans des fichiers qu'on a souvent besoin ?

n°1544674
RiderCrazy
Posté le 19-04-2007 à 00:38:58  profilanswer
 

MagicBuzz a écrit :

sinon, il y a aussi les possibilités d'indexation du contenu des fichiers. les sgbd offrent des solutions généralement plus poussées que les serveurs de fichiers, notamment parcequ'on peut lier les fichiers à d'autres infos lors des requêtes.
 
enfin, le versioning est aisé avec le sgbd, alors qu'il devient rapidement complexe en utilisant le système de fichier (à cause du point 2)


C'est, amha, le point le plus intéressant. C'est d'ailleurs ce qu'utilisent svn/cvs non ? (j'ai un doute pour le second mais logiquement...)

n°1544676
MagicBuzz
Posté le 19-04-2007 à 01:04:52  profilanswer
 

esox_ch a écrit :

Il risque pas de morfler profond le DB si on stoque dedans des fichiers qu'on a souvent besoin ?


C'est pas forcément recommandé, et surtout, un travail de DBA est nécessaire (notamment pour gérer proprement où sont stockées les infos des blob). Mais en soit, c'est fait pour. Par contre, si je me base sur la doc de SQL Server par exemple, l'association blob + fulltext, ils proposent... une machine 10 fois suppérieure à la config recommandée ;)
"Un quadri-processeur, avec 1 à 2 Go de mémoire par processeur, et au moins deux chaines RAID 5 (chaînes RAID 50 recommandées)", alors que c'est tiré de la doc de SQL Server 2000, qui s'accomodait parfaitement d'un petit serveur mono-proc à 400 MHz, une simple chaîne RAID 5 et de 1 ou 2 Go de mémoire pour la config recommandée :D
 
Bon, après tout dépend de la charge, du tuyaux qu'il y a entre l'application et le SGBD et la propreté du code (genre on évite les "select *" histoire de ne pas rammener les valeurs des blob quand on n'en a pas besoin)


Message édité par MagicBuzz le 19-04-2007 à 01:07:57
mood
Publicité
Posté le 19-04-2007 à 01:04:52  profilanswer
 

n°1544697
esox_ch
Posté le 19-04-2007 à 07:37:40  profilanswer
 

C'est clair que si on balance des select * à toutes les sauces alors que le gamin du chef de projet a trouvé cool d'uploader toutes ses video :D

n°1547776
JLNouse
Posté le 24-04-2007 à 01:55:18  profilanswer
 

:heink:
 
Moi j'utilise les BLOB pour controler l'accès à certains fichiers.
Exemple une page web qui permet d'uploader des images qui ne peuvent être visibles que par celui qui les a uploadées ou une liste de membres.
 
C'est un truc tout con et ca me parait bizarre que personne ici n'a mentionné cette utilisation.
 
Je ne vois aucune autre solution aussi facile :heink:

n°1547808
MagicBuzz
Posté le 24-04-2007 à 09:26:54  profilanswer
 

Tu obtiens rigoureusement le même comportement en ne stockant que le path et en gérant proprement l'affichage des images...
 
http://www.manga-torii.com/include/image.asp?imgID=59&imgNAME=is_008.jpg&imgTYPE=2&legal_type=1&legal_id=1
=> Comme tu peux le voir, là l'image ne se charge pas. Pourquoi ? Parceque tu n'es pas authentifié sur le site d'où ça viens et que tu n'as pas accepté la charte de lecture des images.
Pourtant, elles sont stockées sur le disque ces images, et pas dans la base. TU peux toujours courrir pour les afficher sans authentification.
 
(lol, merde, je tombe juste sur un mauvais exemple, j'ai ouvert les portes quand la requête vient d'HFR :D)


Message édité par MagicBuzz le 24-04-2007 à 09:27:37
n°1547809
MagicBuzz
Posté le 24-04-2007 à 09:28:15  profilanswer
 

http://www.manga-torii.com/include/image.asp?imgID=59&imgNAME=is_008.jpg&imgTYPE=1
 
(ah, voilà, c'est l'affichage en grand qui est bloqué ^^)
 
tout ça pour dire qu'il n'y a pas la trace du moindre blob dans ma base, et qu'il y a une gestion de droits...

Message cité 1 fois
Message édité par MagicBuzz le 24-04-2007 à 09:29:01
n°1548334
JLNouse
Posté le 24-04-2007 à 19:08:25  profilanswer
 

MagicBuzz a écrit :

http://www.manga-torii.com/include [...] &imgTYPE=1
 
(ah, voilà, c'est l'affichage en grand qui est bloqué ^^)
 
tout ça pour dire qu'il n'y a pas la trace du moindre blob dans ma base, et qu'il y a une gestion de droits...


Ah.
 
Et ca permet donc de spécifier quel utilisateur peut la voir ? Jusqu'à quel niveau de précision (pour tout les membres loggués, pour un membre loggué en particulier, etc.) ?  
 
Comment tu fais pour dire que tel utilisateur peut acceder à telle image mais pas à une autre ?
 
Ca marche par cookies ?


Message édité par JLNouse le 24-04-2007 à 19:12:18
n°1548443
MagicBuzz
Posté le 25-04-2007 à 00:01:38  profilanswer
 

Actuellement, le niveau de protection est faible :
- Tous les membres logués
- A condition qu'ils aient accepté un message d'infos légal pour certaines images
 
Mais je peux pousser aussi loin que je veux.
Le système est le même en fait :
- les images sont dans un répertoire en dehors du site
- une page "image.asp" effectue un certain nombre de contrôles via la BDD avant de décider si j'affiche l'image ou une image de remplacement tel qu'ici
- cette page "image.asp" retourne le contenu du fichier retenu, avec un content-type qui correspond au format de l'image au lieu du format html
- dans mon cas, j'utilise trois types de variables (en plus de la base de données) : session -pour vérifier que l'utilisateur est authentifié-, cookie -pour vérifier qu'il a accepté les mentions légales-, et server (pour vérifier que la demande vient d'un site authorisé à afficher les images)
=> du coup, j'utilise un bête tah "<img src="image.asp"/>" pour afficher l'image de mon choix, et ceci permet de bloquer totalement les requêtes vers des fichiers qui ne sont pas autorisés pour l'utilisateur


Message édité par MagicBuzz le 25-04-2007 à 00:03:41

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Quand utiliser les types BLOB de MySQL ?

 

Sujets relatifs
libxml : utiliser le DTD pour remplacer les nodes manquantSELECT dans un INSERT mysql
Afiicher les 5 résultats les plus nombreux dans une table MySQLMysql - Compression de données texte / index fulltext ?
Mettre en route une base de données Mysql svpcalculer une multiplication de deux champs (mysql)
MySql & Builder c++[Aide] Insertion MySQL à partir d'un fichier .CVS depuis un script PHP
Requête MAX sur MySQL 
Plus de sujets relatifs à : Quand utiliser les types BLOB de MySQL ?


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