Fragensteller
Wie funktioniert die SQL Tabellenstruktur des MS Filestream Providers für SQL RBS?

Frage
-
Hallo liebe Community,
ich habe einen SharePoint 2013 und SQL 2014 mit aktiviertem RBS. Dazu den MS Filestream Provider installiert. Alles funktioniert soweit auch. D.h. BLOBs werden aus der Datenbank ins Dateisystem ausgelagert.
Nun versuche ich aber zu verstehen, wie der Filestream Provider funktioniert. Im SQL wurden dafür neue Tabellen angelegt. U.a. die Tabelle "mssqlrbs_filestream_data_1.rbs_filestream_data_1" in der die BLOBs gespeichert werden die über RBS an den Filestream übergeben werden.
Ab einer bestimmten Grenze (voreingestellt auf 64k) werden abgelegte BLOBs jedoch ins Dateisystem ausgelagert, um die Datenbank zu schonen.
In der Datenbank sieht das bspw. so aus.
Für einen BLOB <64k wird es inline in der Datenbank gespeichert (Einträge).
store_blob_id: irgendeine ID halt
Size: Dateigröße
blob_data_inline: 0x... (ich nehm an das ist jetzt das Binary als Hexdump, was auch die richtige Size hat)
blob_data_filestream: NULL (ist NULL, da ja der BLOB in der DB liegt und nicht im Dateisystem)
Dateisystem: nichts (keine Datei vorhanden, da es ja in der DB liegt)Für einen BLOB >64k wird es nicht mehr inline abgelegt, sondern im Dateisystem, wie folgt:
store_blob_id: irgendeine ID wieder
Size: Dateigröße
blob_data_inline: NULL (ist jetzt NULL, da der BLOB ja nun ausgelagert wurde)
blob_data_filestream: 0x... (binary als Hexdump, ca. 44k als Größe, Frage*)
Dateisystem: hier liegt jetzt eine Datei mit der Größe "Size"Ok, soweit so gut. Was ich aber nicht verstehe, was macht die Tabelle "blob_data_filestream"? In der liegen immer ca. 44k egal wie groß der BLOB im Dateisystem ist und vor allem, wie bekomme ich die Referenz zur Datei im Dateisystem? Ist das einfach irgendwie in dem Hexdump Filestream-intern codiert? Kennt sich da jemand aus?
Ich hoffe die Frage war verständlich,
Danke! :-)
Alle Antworten
-
Hallo
die Frage denke ich verstanden zu haben. Die Antwort habe ich nicht parat und kann es auch nicht mal eben testen. Daher würde ich Dich auf das Whitepaper dazu verweisen. Dort ist die BlobReference, die über eine Prozedur ermittelt & zurückgegeben wird, High-Level erklärt.
Das Whitepaper zu "Remote BLOB Storage" findet Du hier: http://msdn.microsoft.com/de-de/library/gg638709.aspx
ich hoffe Du findest dort Deine Antwort :)
Andreas Wolter (Blog | Twitter)
MCM - Microsoft Certified Master SQL Server 2008
MCSM - Microsoft Certified Solutions Master Data Platform, SQL Server 2012
www.andreas-wolter.com | www.SarpedonQualityLab.com -
Hallo,
Siehe MSDN FILESTREAM (SQL Server) und Folgelinks, dort ist genau beschrieben wie man mit Filestream arbeitet und per T-SQL / API auf Filestream Daten zugreift. Ein weiteres detailliertes Beispiel findest Du auch hier: https://www.simple-talk.com/sql/learn-sql-server/an-introduction-to-sql-server-filestream/
Olaf Helper
[ Blog] [ Xing] [ MVP] -
-
Hallo Olaf,
wir reden wahrscheinlich aneinander vorbei. :-)
Kurz zu deinem Beispiel. Wenn es im Dateisystem liegt (bspw. "Test mit Datei"), warum belegt es dann in der Datenbank immer noch so viel Platz und warum ist es nicht nur eine Referenz? Oder wird es in SQL nur so dargestellt? Mir erscheint das wie doppelte Datenhaltung. Einmal in der Spalte FSHandle und einmal im Dateisystem. Erwarten würde ich hier innerhalb der Datenbank lediglich eine Referenz.
Was meine 44k angeht, da rede ich nicht vom Filestream Mechanismus im SQL sondern vom Filestream Provider für SharePoint. Der hat eigene zusätzliche Verwaltungstabellen, da der sich ja praktisch zwischen das FSHandle und die Dateiablage schaltet. Und in diesen Tabellen tritt das von mir oben skizzierte Verhalten auf.
-