Stratégie pour gérer une base de données SQL Server contenant trop de fichiers (BLOB)?

11

Scénario:
base de données SQL Server 2005 desservant une application ASP.NET (sur des serveurs Web distincts).

Base de données:
DB contient environ 5 Go de données «normales» et environ 15 Go de «fichiers» (par exemple: un PDF de 200 Ko stocké sous forme d'image (BLOB), ce genre de chose). Les utilisateurs téléchargent davantage de fichiers et consomment rapidement plus d'espace disque (la base de données pourrait atteindre 50 Go au cours des prochains mois, principalement des fichiers).

Préoccupations: Le fait de
stocker autant de fichiers dans la base de données pose déjà des problèmes (par exemple: la grande taille totale de la base de données rend les sauvegardes et les déploiements occasionnels de toute la base de données difficiles).

Et nous craignons qu'il n'y ait plus de problèmes . (par exemple: problèmes de performances - peut-être causés par le fait de ne pas pouvoir conserver la base de données entière dans la RAM, peut-être?)

Question:
Quelle solution technique proposeriez-vous à ce problème? Stocker les fichiers dans le système de fichiers? Fractionner la base de données en deux et en avoir une plus grande et plus lente pour les fichiers?

Plus de détails si nécessaire:
ces fichiers ne sont pas super importants et n'ont pas besoin de temps d'accès très rapides - quelques secondes seraient bien, et il y a peut-être une douzaine de sélections par heure au plus, actuellement. Les autres données "normales" de la base de données incluent les informations nécessaires plusieurs fois par seconde.

MGOwen
la source
La mise à niveau vers 2008+ est-elle une possibilité dans le cadre d'une solution?
Jon Seigel
@ Jon Seigel Oui, quelles options sont disponibles en 2008 (ou même 2012)?
MGOwen

Réponses:

6

Je m'occupe d'une base de données très similaire, actuellement 3 To et augmentant de 5 Go par jour.

  • Filestream (2008+) ne résout pas le défi de la sauvegarde / restauration.
  • Filestream fonctionne mieux que le stockage LOB pour les fichiers> 1 Mo, selon les tests de Paul Randal . Cela dépend de la charge de travail à 256 Ko-1 Mo et généralement pire à <256 Ko.
  • Un grand avantage pour Filestream dans certains environnements est qu'il contourne le pool de tampons et utilise le cache système Windows à la place.
  • Si vous placez les fichiers sur un système de fichiers, vous perdez la cohérence transactionnelle avec l'enregistrement de base de données. Vous avez également ajouté la surcharge de sauvegarde de millions de fichiers individuels, ce qui peut être gênant.

Pesez les avantages et les inconvénients de Filestream et voyez si cela convient à votre cas. Dans notre cas, nous avons choisi une voie différente et opté pour le partitionnement de la base de données afin de pouvoir utiliser la disponibilité partielle / restauration fragmentaire .

Une option qui ne nous était pas disponible, que vous pourriez avoir, consiste à marquer les groupes de fichiers plus anciens / d'archivage comme étant en lecture seule. Les groupes de fichiers en lecture seule peuvent ensuite être sauvegardés rarement.

Si vous êtes bloqué sur 2005 Standard (le partitionnement est une fonctionnalité de l'édition Enterprise) et que vous avez la possibilité de lire uniquement pour l'historique, vous pouvez résoudre ce problème à l'ancienne.

  • Divisez votre table. Vous pouvez considérer l'itinéraire actif / historique ou la date, par exemple une table par mois.
  • Placez les données historiques sur un groupe de fichiers en lecture seule et sauvegardez-les uniquement lorsque vous archivez d'autres données. Assurez-vous que vos utilisateurs comprennent que cela réduit le temps de sauvegarde uniquement. La restauration peut prendre un certain temps lorsque vous ne disposez pas de la fonctionnalité de disponibilité partielle.
  • Créez une vue partitionnée sur les tables.

Une dernière option (que nous envisageons pour notre blobber de 3 To) consiste à déplacer les données du fichier vers une base de données de documents ou un stockage cloud (par exemple AmazonS3 , Azure BLOB Storage ). Cela introduit le problème de cohérence transactionnelle que j'ai mentionné plus tôt, mais il supprime la charge de ces serveurs SQL très chers.

Mark Storey-Smith
la source
3

essayez la fonctionnalité FILESTREAM dans SQL Server,

FILESTREAM intègre le moteur de base de données SQL Server à un système de fichiers NTFS en stockant des données de gros objets binaires (BLOB) varbinary (max) sous forme de fichiers sur le système de fichiers

beaux articles à ce sujet

  1. Une introduction à SQL Server FileStream
  2. Vers BLOB ou pas vers BLOB: stockage d'objets volumineux dans une base de données ou un système de fichiers
  3. Stockage FILESTREAM dans SQL Server 2008
AmmarR
la source