
|
LSN Log Sequence Number (oder Protokollfolgenummer). Die LSN ist eine für jede Datenbanktransaktion eindeutig und aufsteigend vergebene Nummer. |
|
UNC-Pfad Uniform Naming Convention (auch Universal Naming Convention) wird weitgehend als Standard zur Bezeichnung von Adressen freigegebener Ressourcen in einem Rechnernetz genutzt. Die UNC-Adresse stellt einen Netzwerkpfad dar, über den man Ressourcen anderer Rechner in dem Netzwerk ansprechen und nutzen kann. |
|
FILESTREAM muss nicht separat installiert, nur aktiviert werden: Entweder direkt bei der Installation oder später im
Konfigurationsmanager (siehe Abbildung 1). Zusätzlich ist die Instanz noch mit der Prozedur sp_configure zu konfigurieren
(siehe Abbildung 2). Der Parameter bestimmt dabei den Zugriffsmodus:
0 = deaktiviert
1 = nur Transact-SQL-Zugriff
2 = zusätzl. E/A-Streaming-Zugriff (Win32-API)
Zur Speicherung wird eine spezielle Dateigruppe angelegt. Diese enthält keine Dateien sondern nur Verzeichnisse. In diesen Verzeichnissen werden dann die Inhalte gespeichert und durch den SQL Server verwaltet.
Die angegebenen Verzeichnisse werden vom SQL Server angelegt und konfiguriert. Sie dürfen daher vorher noch nicht existieren (siehe Abbildung 3).
Um die FILESTREAM-Daten zu verwalten, werden in der Tabelle zwei Spalten benötigt. Zum einen eine Spalte vom Datentyp UNIQUEIDENTIFIER, die mit der Option ROWGUIDCOL angelegt wird und die später im Dateisystem abgelegten Daten eindeutig referenziert. Zum anderen eine Spalte vom Datentyp VARBINARY(MAX), die mit der Option FILESTREAM versehen wird und für den Zugriff auf die Daten mit Transact-SQL dient. Wenn mehrere FILESTREAM-Dateigruppen angelegt wurden, gibt die Tabellen-Option FILESTREAM_ON an, in welcher Dateigruppe und damit in welchem Verzeichnis die Daten abgelegt werden sollen (siehe Abbildung 4).
Die Daten können mit normalen SQL-Befehlen bearbeitet werden. Texte (VARCHAR-Daten) müssen dabei mit CAST in den Datentyp VARBINARY konvertiert werden. So legt der in Abbildung 5 angegebene Befehl eine erste Zeile in der Tabelle und damit eine erste Datei im Dateisystem an.
Der SQL Server baut automatisch eine entsprechende Verzeichnisstruktur auf (siehe Abbildung 6). So steht die erste Verzeichnisebene (54f3f625 ...) für die Tabelle und die zweite Verzeichnisebene (01397ed0 ...) für die Spalte. Der Dateiname ist die Log-Sequenz-Nummer (LSN) zum Zeitpunkt der Datenänderung.
Für den Zugriff über die Win32-API wird ein UNC-Pfad verwendet, der mit der Funktion PathName() ermittelt werden kann (siehe Abbildung 7). Über diesen Pfad kann z. B. mit Hilfe einer C#-Applikation auf die Daten zugegriffen werden. Diese Art des Zugriffs soll hier jedoch nicht weiter erläutert werden. Ein Beispiel finden Sie unter der [2].
Welche Zugriffsart gewählt werden sollte, hängt von der Datengröße ab. Bis zu BLOB-Größen von etwa einem MB ist der Zugriff über Transact-SQL schneller. Danach ist der Zugriff über die Win32-API wesentlich effizienter. Daher ist es wichtig, dass die Applikation diese Zugriffsart unterstützt, wenn dieser Performance-Vorteil genutzt werden soll.
Die Dateien liegen unverschlüsselt im Dateisystem. Sie sind lediglich geschützt durch die Datei- und Verzeichnisrechte des Betriebssystems. Diese werden vom SQL Server bei der Einrichtung der Verzeichnisse so gesetzt, dass nur das Dienstekonto des SQL Servers sowie die lokalen Administratoren Zugriff haben.
Wichtig ist in diesem Zusammenhang, dass das Löschen von Dateien innerhalb der Verzeichnisse zu einer korrupten Datenbank führen kann.
Im Rahmen von Transaktionen werden die FILESTREAM-Daten genauso wie alle anderen Daten behandelt. Wird der Wert einer FILESTREAM-Spalte geändert, so wird nicht die zugehörige Datei verändert, sondern eine neue Datei mit dem neuen Inhalt angelegt. Zusätzlich werden alle Änderungen im Transaktionsprotokoll vermerkt. Die alte Datei wird erst dann entfernt, wenn ihr Inhalt nicht mehr für Recovery-Zwecke benötigt wird. Dies ist bei der Planung des benötigten Festplattenplatzes zu berücksichtigen.
Verwaltet die Applikation große, sich nur selten ändernde Datenmengen, bei denen es auf schnellen Lesezugriff ankommt, z. B. Video-Streaming-Applikationen, so stellt die FILESTREAM-Option eine gute Alternative zur klassischen Speicherung der Daten in BLOB-Feldern dar. Voraussetzung ist allerdings, dass die Applikation die Win32-API verwenden kann.
Andreas Jordan (info@ordix.de).