Question

J'ai une décision de conception à faire en ce qui concerne les documents téléchargés sur mon site web: Vous pouvez me les stocker sur mon serveur de fichiers quelque part, ou je peux les stocker comme blob dans ma base de données (MSSQL 2005). Si cela fait une différence à la décision de conception, ces documents sont confidentiels et doivent avoir un certain degré de protection.

Les considérations que j'ai pensé sont:

  1. Stockage sur le serveur de fichiers fait pour les numéros de HUUUUUUUGE de fichiers tous les sous-évalués dans un seul répertoire, et par conséquent un accès plus lent, à moins que je peux travailler une définition sémantique raisonnable pour une structure d'arborescence
  2. OTOH, je devine que le serveur de fichiers peut gérer la compression un peu mieux que la DB ... ou je me trompe?
  3. Mon instinct me dit que la sécurité de DB est plus forte que celle du serveur de fichiers, mais je ne suis pas sûr que ce soit nécessairement vrai.
  4. Je ne sais pas comment avoir des téraoctets de blobs dans mon DB aura une incidence sur la performance.

Je voudrais bien apprécier quelques recommandations ici. Merci!

Était-ce utile?

La solution

Dans SQL Server 2005, vous avez seulement le choix d'utiliser VARBINARY(MAX) pour stocker les fichiers dans la table de base de données, ou alors les garder à l'extérieur.

L'inconvénient évident de les laisser en dehors de la base de données est que la base de données ne peut pas vraiment contrôler ce qui leur arrive; ils pourraient être déplacés, renommés, supprimés .....

serveur SQL 2008 introduit l'attribut FILESTERAM sur les types de VARBINARY(MAX), ce qui vous permet de laisser les fichiers en dehors de la table de base de données, mais toujours sous le contrôle des transactions de la base de données - par exemple vous ne pouvez pas supprimer les fichiers du disque, les fichiers font partie intégrante de la base de données et ainsi copiés et sauvegardés avec elle. Si vous en avez besoin, mais il pourrait faire quelques sauvegardes énormes! : -)

Le lancement a présenté quelques « meilleures pratiques » SQL Server 2008 quand pour stocker des choses dans la base de données directement, et quand utiliser FILESTREAM. Ceux-ci sont:

  • si les fichiers sont généralement moins de 256 Ko en taille, la table de base de données est la meilleure option
  • si les fichiers sont généralement plus de 1 Mo, ou pourrait être plus de 2 Go, puis FILESTREAM (ou dans votre cas: système de fichiers bon vieux) est votre meilleur choix
  • aucune recommandation pour les fichiers entre ces deux marges

En outre, afin de ne pas avoir un impact négatif sur les performances de vos requêtes, il est souvent une bonne idée de mettre les gros fichiers dans une table séparée alltogether - ne sont pas les énormes blobs faire partie de vos tables régulières que vous interrogez - mais plutôt créer une table séparée, que vous ne jamais interroger contre, si vous avez vraiment besoin des méga-octets de documents ou d'images.

Alors, qui pourrait vous donner une idée de l'endroit où commencer à partir!

Autres conseils

Je vous suggère fortement d'envisager la solution de système de fichiers. Les raisons sont les suivantes:

  • vous avez un meilleur accès aux fichiers (précieux en cas de mise au point), ce qui signifie que vous pouvez utiliser des outils de console réguliers
  • vous pouvez prendre rapidement et facilement tirer parti du système d'exploitation pour répartir la charge, par exemple en utilisant un système de fichiers distribué, ajouter de la redondance via un RAID matériel etc.
  • vous pouvez tirer parti des listes de contrôle d'accès du système d'exploitation pour appliquer des autorisations.
  • vous ne bouchent pas votre base de données

Si vous êtes inquiet au sujet de grandes quantités d'entrées dans vos répertoires, vous pouvez toujours créer un schéma de branchement. par exemple:

filename : hello.txt
filename md5: 2e54144ba487ae25d03a3caba233da71
final filesystem position: /path/2e/54/hello.txt

Il y a beaucoup de « ça dépend » derrière ce sujet populaire. Puisque vous dites que les documents sont sensibles et confidentielles, le brassard de je partirais avec le stockage dans la base de données. Voici quelques raisons:

  • potentiellement une meilleure sécurité. Il est souvent plus facile de pirater un système de fichiers d'une base de données.
  • Un meilleur contrôle du volume. Des milliers de fichiers dans un dossier peuvent filtrer un système d'exploitation, où une base de données peut prendre des millions de lignes dans une table sans ciller.
  • Une meilleure recherche et de numérisation. Ajouter catégorisant colonnes lorsque vous chargez les données, ou essayer l'indexation en texte intégral pour numériser les documents réels.
  • Les sauvegardes peuvent être plus efficaces - il suffit d'ajouter une autre base de données à votre plan de sauvegarde, et vous êtes couvert (une fois que vous travaillez les détails de l'espace, bien sûr). Et ces fichiers de sauvegarde sont une autre couche de faux-fuyants sur toute personne essayant d'obtenir vos documents sensibles.
  • SQL Server 2008 a des options de compression de données qui peuvent aider ici. Ce ou ont l'application faire? (Plus de sécurité grâce à l'obscurcissement, peut-être)

SQL Server 2008 a également le type de données filestream, ce qui peut aider, mais je ne suis pas assez familier avec elle pour donner une recommandation à votre situation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top