Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Debat: Stocker ou pas des fichiers images dans une base Sqlserver

6 réponses
Avatar
Omega
Bonjour,

Voici la problematique: notre logiciel utilise de nombreuses images jpeg.
La question est de savoir si nous devons stocker les fichiers images
directement dans notre base SqlServer ou bien stocker seulement les liens de
ces images pointant vers un endroit du disque dur ?

Quelqu'un aurait-il un avis sur la question, le debat fait rage au sein de
notre equipe de developpeur.

Cordialement

GREFFIER Olivier

6 réponses

Avatar
Patrice
Voir par exemple :
http://sql.developpez.com/stockerimages/

Je pense que le mieux est de considérer que dans des conditions normales de
température et de pression, il est préférable de stocker les images en
dehors de la base (volume de base, sauvegarde, emplacement de stockage
flexible etc...), la charge de la preuve contraire appartenant à la partie
adverse...

--
Patrice

"Omega" a écrit dans le message de
news:4397fc90$0$21036$
Bonjour,

Voici la problematique: notre logiciel utilise de nombreuses images jpeg.
La question est de savoir si nous devons stocker les fichiers images
directement dans notre base SqlServer ou bien stocker seulement les liens


de
ces images pointant vers un endroit du disque dur ?

Quelqu'un aurait-il un avis sur la question, le debat fait rage au sein de
notre equipe de developpeur.

Cordialement

GREFFIER Olivier







Avatar
Omega
Merci,

Mais il faut savoir egalement que les images ne devraient pas depasser 10Ko

D'autres avis... ?

--

"Patrice" a écrit dans le message de
news:u5TPJt9%
Voir par exemple :
http://sql.developpez.com/stockerimages/

Je pense que le mieux est de considérer que dans des conditions normales


de
température et de pression, il est préférable de stocker les images en
dehors de la base (volume de base, sauvegarde, emplacement de stockage
flexible etc...), la charge de la preuve contraire appartenant à la partie
adverse...

--
Patrice

"Omega" a écrit dans le message de
news:4397fc90$0$21036$
> Bonjour,
>
> Voici la problematique: notre logiciel utilise de nombreuses images


jpeg.
> La question est de savoir si nous devons stocker les fichiers images
> directement dans notre base SqlServer ou bien stocker seulement les


liens
de
> ces images pointant vers un endroit du disque dur ?
>
> Quelqu'un aurait-il un avis sur la question, le debat fait rage au sein


de
> notre equipe de developpeur.
>
> Cordialement
>
> GREFFIER Olivier
>
>
>
>
>




Avatar
tintin
Bonjour à tous,

D'un point de vue théorique et pour la cohérence des données, je préfère
toujours stocker *TOUT*, donc les images dans la base.

Mais c'est vrai qu'en pratique, cela *PEUT* pénaliser les performances. Cela
dit on voit souvent ici, ou dans des bouquins des conseils visant à éviter de
charger les machines, et quand on essaie, on s'aperçoit que l'effet est non
mesurable. Pas toujours, bien sûr !

Alors, je crois qu'il faut étudier la question avec des hypothèses de
volumes précises, et ne se résoudre à utiliser des fichiers que si c'est
vraiment nécessaire.

Notez bien que le choix "fichiers" pose d'assez sérieux problèmes, ou peut
conduire à de belles bourdes, dans le cas où il existe plusieurs bases (par
exemple une base test créée par copie de la base de production...) . Il faut
utiliser des noms de dossiers symboliques ou logiques, mais ils ne sont pas
très facile à manier sur des serveurs MS.





"Omega" a écrit :

Bonjour,

Voici la problematique: notre logiciel utilise de nombreuses images jpeg.
La question est de savoir si nous devons stocker les fichiers images
directement dans notre base SqlServer ou bien stocker seulement les liens de
ces images pointant vers un endroit du disque dur ?

Quelqu'un aurait-il un avis sur la question, le debat fait rage au sein de
notre equipe de developpeur.

Cordialement

GREFFIER Olivier








Avatar
Patrice
Comme quoi on trouve toujours quelqu'un qui est d'accord ;-)

Plus sérieusement on en revient à lister ce qui est réellement important
pour TOI (intégrité, volume de la base, facilité d'accès au fichier etc..)
et à choisir en fonction de ce qui est en tête de liste...

--

"tintin" a écrit dans le message de
news:
Bonjour à tous,

D'un point de vue théorique et pour la cohérence des données, je préfère
toujours stocker *TOUT*, donc les images dans la base.

Mais c'est vrai qu'en pratique, cela *PEUT* pénaliser les performances.


Cela
dit on voit souvent ici, ou dans des bouquins des conseils visant à éviter


de
charger les machines, et quand on essaie, on s'aperçoit que l'effet est


non
mesurable. Pas toujours, bien sûr !

Alors, je crois qu'il faut étudier la question avec des hypothèses de
volumes précises, et ne se résoudre à utiliser des fichiers que si c'est
vraiment nécessaire.

Notez bien que le choix "fichiers" pose d'assez sérieux problèmes, ou peut
conduire à de belles bourdes, dans le cas où il existe plusieurs bases


(par
exemple une base test créée par copie de la base de production...) . Il


faut
utiliser des noms de dossiers symboliques ou logiques, mais ils ne sont


pas
très facile à manier sur des serveurs MS.





"Omega" a écrit :

> Bonjour,
>
> Voici la problematique: notre logiciel utilise de nombreuses images


jpeg.
> La question est de savoir si nous devons stocker les fichiers images
> directement dans notre base SqlServer ou bien stocker seulement les


liens de
> ces images pointant vers un endroit du disque dur ?
>
> Quelqu'un aurait-il un avis sur la question, le debat fait rage au sein


de
> notre equipe de developpeur.
>
> Cordialement
>
> GREFFIER Olivier
>
>
>
>
>
>


Avatar
Omega
Pour tout dire, on a une table PRODUIT, qui possède certaines
caractéristiques, comme son prix, sa description etc... et une image.
Je penche de plus en plus pour la solution stockage complet du fichier dans
la base, car :
- Poids total de l'application: ces images doivent être quoi qu'il en soit
distribuées avec notre application

- Simplicité: des mise a jour de cette base de produits sera tres
regulièrement disponible (avec le stockage on a plus à ce soucier de la
copie des fichier images dans leur bon repertoire)

- Taille des requetes: le poids des fichier est (je pense) negligeable tant
qu'il reste aux allentour de 10Ko

Des lors, l'inconnue est surtout le temps de traitement d'un SELECT * dans
cette table. Sachant que nous recommandons à nos client 512Mo de RAM,
Pentium ou AMd > 1Ghz et Win2K ou sup.
--

"Patrice" a écrit dans le message de
news:eo1jPR%23%
Comme quoi on trouve toujours quelqu'un qui est d'accord ;-)

Plus sérieusement on en revient à lister ce qui est réellement important
pour TOI (intégrité, volume de la base, facilité d'accès au fichier etc..)
et à choisir en fonction de ce qui est en tête de liste...

--

"tintin" a écrit dans le message de
news:
> Bonjour à tous,
>
> D'un point de vue théorique et pour la cohérence des données, je préfère
> toujours stocker *TOUT*, donc les images dans la base.
>
> Mais c'est vrai qu'en pratique, cela *PEUT* pénaliser les performances.
Cela
> dit on voit souvent ici, ou dans des bouquins des conseils visant à


éviter
de
> charger les machines, et quand on essaie, on s'aperçoit que l'effet est
non
> mesurable. Pas toujours, bien sûr !
>
> Alors, je crois qu'il faut étudier la question avec des hypothèses de
> volumes précises, et ne se résoudre à utiliser des fichiers que si c'est
> vraiment nécessaire.
>
> Notez bien que le choix "fichiers" pose d'assez sérieux problèmes, ou


peut
> conduire à de belles bourdes, dans le cas où il existe plusieurs bases
(par
> exemple une base test créée par copie de la base de production...) . Il
faut
> utiliser des noms de dossiers symboliques ou logiques, mais ils ne sont
pas
> très facile à manier sur des serveurs MS.
>
>
>
>
>
> "Omega" a écrit :
>
> > Bonjour,
> >
> > Voici la problematique: notre logiciel utilise de nombreuses images
jpeg.
> > La question est de savoir si nous devons stocker les fichiers images
> > directement dans notre base SqlServer ou bien stocker seulement les
liens de
> > ces images pointant vers un endroit du disque dur ?
> >
> > Quelqu'un aurait-il un avis sur la question, le debat fait rage au


sein
de
> > notre equipe de developpeur.
> >
> > Cordialement
> >
> > GREFFIER Olivier
> >
> >
> >
> >
> >
> >




Avatar
Fred BROUARD
Omega a écrit:
Pour tout dire, on a une table PRODUIT, qui possède certaines
caractéristiques, comme son prix, sa description etc... et une image.
Je penche de plus en plus pour la solution stockage complet du fichier dans
la base, car :
- Poids total de l'application: ces images doivent être quoi qu'il en soit
distribuées avec notre application

- Simplicité: des mise a jour de cette base de produits sera tres
regulièrement disponible (avec le stockage on a plus à ce soucier de la
copie des fichier images dans leur bon repertoire)

- Taille des requetes: le poids des fichier est (je pense) negligeable tant
qu'il reste aux allentour de 10Ko

Des lors, l'inconnue est surtout le temps de traitement d'un SELECT * dans
cette table. Sachant que nous recommandons à nos client 512Mo de RAM,
Pentium ou AMd > 1Ghz et Win2K ou sup.



1) si vous voulez des performances, créer un groupe de fichier secondaire sur un
fichier à part pour stoker les tables recevant vos images

2) stockez toutes vos images dans une table d'images avec les méta données :
dimension (hauteur, largeur), type (jpeg, gif...), nom du fichier à l'origine,
nombre de couleur, taux de compression...

3) pour ce qui est du SELECT / INSERT / UPDATE si les images dépassent 8 Ko il
faudra faire les manipulations avec des pointeurs par les commandes READTEXT,
WRITETEXT et UPDATETEXT (version 2000). Sinon en SQL 2005 il est possible
d'utiliser directement les commandes SQL en utilisant le type VARBINARY(max).

A +

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************