|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
Bonjour,
Je suis actuellement en train de travailler sur un projet perso de GED. J'ai opté pour un stockage de mes documents dans une base SQL Server 2008 R2, en utilisant l'option FILESTREAM afin de séparer les documents des données. Actuellement, j'ai la structure suivante : Code :
- quand j'ouvre un document, si je fais une modification, je souhaite que mon programme déplace l'ancienne version du document dans une table d'historisation - puis remplace le document existant par le nouveau dans la table des documents Et là, je me pose la question : Puisque mon champ flagé FILESTREAM n'est qu'un pointeur vers un fichier physique sur le disque dur, pourquoi ne pas déplacer simplement le pointeur du fichier, plutôt que de devoir dupliquer le fichier, puis supprimer l'original. Est-ce possible ? Comment ? Sinon, quel architecture proposeriez-vous ? En effet, mes documents ainsi stockés dans la table "document" sont indexés en fulltext. Je ne souhaite pas intégrer une notion de version dans cette table pour plusieurs raisons : - Lors de mes recherches, je souhaite ne rechercher que dans les dernières versions : donc je serai obligé de faire des sous-requêtes avec des max() ou autres joyeusetés, sur une table pourtant déjà fortement sollicitée - Puisque je ne veux pas faire de recherche dans l'historique, ça m'ennuie d'indexer les documents qui ne sont pas la dernière version |
||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 725 ![]() |
Il n'y a pas de mise à jour partielle avec FILESTREAM sur les fichiers. Un seul octect changé sur un fichier va créer une nouvelle version de fichier et déférencer l'ancien.
Le fichier sur disque sera alors supprimé ultérieurement par un garbage collector de la même manière que ceux qui existent en programmation pour supprimer les objets qui ne sont plus référencés et utilisés. ++ |
|
00
|
|
|
#3 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 670 ![]() |
Bonjour,
Au passage, je peux comprendre que la colonne title soit au type nvarchar, puisque le nom des documents peut contenir des caractères non-latins. Mais je ne crois pas qu'il existe des extensions de fichiers qui en comprennent. Si tel est le cas, alors l'utilisation du type nvarcahr n'est pas justifiée et aurait dû être du varchar, voire même du char ... @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#4 |
|
Membre Expert
![]() Sylvain DevidalChef de projets Générix Inscription : février 2010 Messages : 1 062 ![]() |
IFilter travaille avec un nvarchar(8) donc si, Microsoft aussi à prévu le cas :
http://technet.microsoft.com/en-us/l.../ms142499.aspx En revanche, 8 caractères, je trouve ça court (moi j'avais prévu 10). Et puis rien ne m'empêche, si je suis chinois ou arabe, de m'amuser à mettre un mot de ma langue comme extension à un fichier. Je ne pense pas que Windows sourcille dans ce cas. Chose amusante, lorsque j'interroge le catalogue système pour regarder les extensions prises en charges... il y en a 2 qui font plus de 8 caractères de long : je me demande alors bien comment SQL Serveur peut gérer ça ![]() Sinon, ok pour le coup de la modification : je pensais que dans la dossier FILESTREAM, c'était bêtement géré comme des fichiers classiques. Donc je conserve ma méthode actuelle. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com