24/05/2011

FileStream: un ibrido tra l'archiviazione dei file nei blob e nel file system (parte 3)

A cura di Gianluca Negrelli


Pagina 1 di 4

Creazione di una tabella

Procediamo ora con la creazione di una tabella che sfrutti il file system per memorizzare i dati. La tabella in esempio è strutturata per mostrare le caratteristiche minime necessarie all’uso di FILESTREAM.

CREATE TABLE dbo.Blob
(
 BlobGuid uniqueidentifier NOT NULL ROWGUIDCOL UNIQUE,
 BlobData varbinary(MAX) FILESTREAM NULL,
)

BlobGuid è un campo di tipo uniqueidentifier.
E’ necessario che la tabella sia dotata di un campo di questo tipo in quanto il guid contenuto nel record verrà utilizzato per rendere univoco a livello di file system il file archiviato e soprattutto per permettere a SQL Server il suo ritrovamento. Si tratta quindi della “chiave logica” del record.
Ciò non esclude che la tabella sia dotata di una chiave fisica che identifichi il record nelle relazioni con le altre tabelle del DB e di qualunque altro campo per, ad esempio, memorizzare dimensione, nome, estensione e tipo del blob. Il campo uniqueidentifier deve essere corredato dagli attributi NOT NULL e UNIQUE.

BlobData è il campo che, dal punto di vista del database, conterrà i file.
Decorando il campo con l’attributo FILESTREAM (FILESTREAM infatti è un attributo di un campo db VARBINARY(MAX) e non un nuovo tipo di dato) si indica a SQL Server che i dati binari lì indirizzati non saranno archiviati come d’uso nel file .mdf, ma direttamente nel file system, all’interno della cartella root di FILESTREAM creata in precedenza.

I due campi vanno sempre tenuti assieme e gestiti assieme anche, ad esempio, nella costruzione di eventuali viste. Con una vista dotata del solo campo BlobData, SQL Server non sarebbe in grado di ritrovare il file.

Il fatto che non esista un tipo dato apposito per FILESTREAM indica che SQL Server non fa differenza a livello di T-SQL nel trattamento dei file residenti fisicamente su tabella o su file system.
Allo stesso modo il trattamento di questi dati viene reso trasparente alla gestione delle policy di accesso o al sistema di backup o qualunque altra operazione.

Dal punto di vista del data container la creazione di ogni nuova tabella corrisponde alla creazione di una nuova cartella contenitore dove verranno inseriti fisicamente i file appartenenti ai record della tabella stessa.

Potrà essere utile qualche altra annotazione riguardo i campi con attributo FILESTREAM. Il tipo dato VARBINARY(MAX), introdotto da SQL Server 2005, ha una capienza limitata a 2GB per record. Se il campo viene abilitato a FILESTREAM, automaticamente acquisisce la capacità di archiviare file indipendentemente dalle loro dimensioni. Il problema del limite massimo di archiviazione ricade così sulla capacità dello spazio disco riservato al file system ospite.
Un altro vantaggio risiede nel fatto che, se un campo VARBINARY è decorato con l’attributo FILESTREAM, ciò che è lì archiviato non concorre al raggiungimento del limite massimo permesso ai database SQL Server Express (4GB per istanza).

Dal punto di vista del file system, SQL Server provvede alla creazione di una cartella il cui nome rappresenta ancora una volta una GUID. All’interno di questa cartella verranno inseriti fisicamente i file archiviati nella tabella Blob.

Pagina 1 di 4

Commenti



Nessun commento disponibile.

Cobisi EmailVerify.NET is a Microsoft .NET software component that validates email addresses. valid email