IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Utilisation de filestream pour une grande quantité de fichiers


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Points : 85
    Points
    85
    Par défaut Utilisation de filestream pour une grande quantité de fichiers
    Bonjour,

    J'ai besoin aujourd'hui de valider une architecture SQL me permettant de gérer une grosse quantité de fichiers (plusieurs TeraOctets).
    J'aimerais utiliser un champ varbinary(max) avec un FileStream.

    Je me pose toutefois la question du bon fonctionnement lorsque j'atteindrais plusieurs Tera de fichiers. Vu que tous les fichiers sont à un même niveau d'arborescence cela ne pose t'il pas des problèmes de performances ? (les fichiers seront stockés sur des disques durs hautes performances je m'inquiète surtout de la gestion qui est faites par Windows).

    D'avance merci pour vos réponses.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 898
    Points : 53 136
    Points
    53 136
    Billets dans le blog
    6
    Par défaut
    En fait il faut un san dédié avec des RAID de niveau 0, 1 et combinés (0+1, 1+0...) avec beaucoup de disques de préférence.
    Par exemple 24 disques de 128 Go...

    A +

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Points : 85
    Points
    85
    Par défaut
    Merci pour ta réponse rapide.

    Je comprend pour le RAID mais peux-tu me dire quels sont les avantages du nombre de disque ? cela permet de gagner au niveau de la performance de recherche des fichiers qui sont tous à un même niveau d'arbo ?

    Me confirmes-tu que nous n'avons aucune maîtrise du classement (et du nom) des fichiers dans le répertoire de destination ?

  4. #4
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    J'ai eu l'occasion de travailler avec un client qui utilisait filestream dans un SharePoint avec 5To de fichiers.

    L'avantage de filestream c'est que l'on peut profiter des caches du système d'exploitation + caches du stockage (le cache en lecture est ici très utile) sans forcément avoir des disques ultra rapides.

    Il faut privilégier les disques rapides pour ton instance SQL Server. Par contre quelle va être la taille moyenne de tes documents ? Filestream ne t'apportera pas vraiment de gain de performance si tes fichiers sont < 1 Mo environ.

    ++

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Points : 85
    Points
    85
    Par défaut
    Ok pour la taille de fichier et les accès rapide en lecture.
    Sur 5To de données n'y a pas t'il pas de problème du fait que tous les fichiers sont stockés dans un même répertoire dans le FILESTREAM ? (c'est bien le cas ? on ne peux pas créer d'arborescence ?).

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 898
    Points : 53 136
    Points
    53 136
    Billets dans le blog
    6
    Par défaut
    1) l'arborescence est créée automatiquement
    2) vous pouvez utiliser plusieurs espace de stockage différents.

    A +

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Points : 85
    Points
    85
    Par défaut
    Désolé de demander un peu plus de détails mais j'ai besoin de bien comprendre :

    Quand tu dis que
    1) l'arborescence est créée automatiquement
    Cela veux dire que c'est géré par SQL Server mais au final si l'on regarde ce qui est créé tous les fichiers se retrouvent dans un même niveau d'arborescence ?

    Et qd tu dis que
    2) vous pouvez utiliser plusieurs espace de stockage différents.
    Tous mes fichiers vont être contenu dans la même table SQL et donc tous dans le même champ varbinary. Puis-je également dans ce cas de figure utiliser plusieurs espace de stockage ? Si oui comment ?

    D'avance merci pour l'aide.

  8. #8
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Cela veux dire que c'est géré par SQL Server mais au final si l'on regarde ce qui est créé tous les fichiers se retrouvent dans un même niveau d'arborescence ?
    L'arborescence est ici sera plus logique que physique. Elle sera effectuée au niveau des métadonnées dans la table et non sur disque.


    Tous mes fichiers vont être contenu dans la même table SQL et donc tous dans le même champ varbinary. Puis-je également dans ce cas de figure utiliser plusieurs espace de stockage ? Si oui comment ?
    Plus exactement les métadonnées des fichiers seront contenus dans une table avec une colonne varbinary qui sera en réalité un pointeur vers le stockage.

    Après tout dépend ce que tu veux dire par utiliser plusieurs stockages mais il est possible de créer plusieurs groupes de fichiers filestream. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FILEGROUP [FILESTREAM_GRP] CONTAINS FILESTREAM  DEFAULT 
    ( NAME = N'filestream_ds', FILENAME = N'E:\MSSQL\FILESTREAM' ),
    FILEGROUP [FILESTREAM_GRP2] CONTAINS FILESTREAM  
    ( NAME = N'filestream_ds2', FILENAME = N'E:\MSSQL\FILESTREAM2' )
    ... et ensuite créer plusieurs tables SQL qui pointeront vers ces différents groupes de fichiers

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    CREATE TABLE [dbo].[Documents](
    	[DocID] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
    	[DocNumber] [varchar](20) NULL,
    	[DocName] [varchar](50) NULL,
    	[DocDescription] [varchar](50) NOT NULL,
    	[DocExtension] [varchar](50) NOT NULL,
    	[Doc] [varbinary](max) FILESTREAM  NULL
        UNIQUE NONCLUSTERED ([DocID] ASC)
    ) 
    ON [PRIMARY] 
    FILESTREAM_ON [FILESTREAM_GRP];
    
    
    CREATE TABLE [dbo].[Documents2](
    	[DocID] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
    	[DocNumber] [varchar](20) NULL,
    	[DocName] [varchar](50) NULL,
    	[DocDescription] [varchar](50) NOT NULL,
    	[DocExtension] [varchar](50) NOT NULL,
    	[Doc] [varbinary](max) FILESTREAM  NULL
        UNIQUE NONCLUSTERED ([DocID] ASC)
    ) 
    ON [PRIMARY] 
    FILESTREAM_ON [FILESTREAM_GRP2];
    ++

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2003
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 211
    Points : 85
    Points
    85
    Par défaut
    Merci pour toutes vos réponses.

    Du coup pour résumé avec 2 questions "oui/non" :

    - Si on utilise un filestream sur un champ unique tous les fichiers vont être placés au même niveau d'arborescence par SQL Server ? (oui / non ?)

    - Si tous les fichiers sont à un même niveau d'arborescence peux t'on avoir des gros problèmes de performances si l'on se retrouve avec plusieurs centaines de milliers de fichiers ? (oui / non ?)

    Merci

  10. #10
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    - Si on utilise un filestream sur un champ unique tous les fichiers vont être placés au même niveau d'arborescence par SQL Server ? (oui / non ?)
    Si tu utilises une seule table avec une seule colonne filestream la réponse est oui.
    Si tu utilises une seule table avec plusieurs colonnes filestream la réponse est non. Chaque colonne aura un sous dossier correspondant.
    Si utilises plusieurs tables avec une colonne filestream la réponse est non il y aura un sous dossier par table (et éventuellement un sous dossier par colonne filestream)


    - Si tous les fichiers sont à un même niveau d'arborescence peux t'on avoir des gros problèmes de performances si l'on se retrouve avec plusieurs centaines de milliers de fichiers ? (oui / non ?)
    La réponse est oui si tu n'utilises pas filestream pour les cas où il doit être utilisé :

    - Stocker des fichiers > 256KB (regarde cette étude intéressante : http://research.microsoft.com/apps/p....aspx?id=64525). D'ailleurs certains providers externes permettent de placer des documents soient sur disque soit en base en fonction de leur taille.
    - Mettre en place les options de performance de stockage : (voir section XI de cet article)

    ++

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/05/2006, 01h00
  2. Réponses: 4
    Dernier message: 09/02/2006, 17h44
  3. Quelle BDD pour une grande utilisation et en cluster?
    Par SkyDev dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 21/10/2005, 20h20
  4. [MASM] Utiliser un .IF pour une comparaison de nombre signés
    Par Crisanar dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 24/11/2004, 16h32
  5. [C#] [ADO] Parcours d'une grande quantité d'enregistrements
    Par Wavyx dans le forum Windows Forms
    Réponses: 4
    Dernier message: 21/09/2004, 09h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo