none
Wie funktioniert die SQL Tabellenstruktur des MS Filestream Providers für SQL RBS? RRS feed

  • 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! :-)

    Dienstag, 20. Mai 2014 12:00

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

    Dienstag, 20. Mai 2014 18:18
  • 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]

    Mittwoch, 21. Mai 2014 06:13
  • In der liegen immer ca. 44k egal wie groß der BLOB im Dateisystem ist

    Kann ich so nicht bestätigen, der Dateninhalt hat die Größe der Datei, denn das repräsentiert das ja nun. Wie kommt's Du auf 44k / wie ermittelst Du die?


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Mittwoch, 21. Mai 2014 12:46
  • 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.

    Donnerstag, 22. Mai 2014 07:56
  • Die Größe wird so vom SQL Server dargestellt und wie man den Datei Handle für die Filestream API erhält, kannst Du im Link nachlesen, den ich geposted hatte.

    Zu SharePoint kann ich nichts sagen, damit kenne ich mich nicht aus.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Donnerstag, 22. Mai 2014 09:56