2013-05-02 62 views
3

如果我在SQL Server 2012中創建一個FileTable,然後將一個4G文件放到NT文件系統(即在文件流中),那麼整個4G文件會被讀入表的文件流列嗎?SQL Server 2012 FileTable-是存儲在數據庫中的文件嗎?

SQL實際上是在製作我的4G文件的副本嗎?或者文件流列表示指向我的4G文件的指針,它開始在查詢上讀取?

我只是想弄清楚如果我將100G的數據添加到我的文件系統中,是否會將100G的數據大小添加到我的數據庫中。

有人可以幫助解釋這是如何工作的?甚至更好的指向一些文檔比MS/MSDN的'如何做'更詳細的東西?

編輯:這很有趣 - 如果我在FT目錄中刪除1G文件,然後做一個選擇file_stream列包含該文件的所有數據(我認爲)。但是如果我在sp_spaceused FileTableTb之前和之後放入該文件,表格大小不會改變。也許這就是選擇打開文件流並讀入文件的證據,但除此之外,數據不存儲在表中?

回答

2

你是對的,數據沒有存儲在數據庫中,但是在文件系統本身中,注意到文件在被放置到文件系統時沒有被「讀入」數據庫也很重要,這意味着它被複制到另一個位置,它實際上被存儲爲一個NTFS文件,FileStream API顯示filetable內的文件元數據。

filetable建立在SQL 2008中引入的FileStream技術上,但允許您通過Windows資源管理器直接修改數據。

當您創建數據庫時,指定其中一個文件組是文件流文件組,這不像普通文件組,它實際上是一系列稱爲數據容器的NTFS文件夾,這是您的文件實際存儲的位置,你不能直接修改這個文件夾,但你可以看看內容(不是說這裏有很多人類可讀的東西,雖然你可以在這裏找到你的實際文件,但如果你通過GUID文件夾足夠堅硬並且奇怪地命名文件:))。

用於將文件複製到表中的文件共享實際上是這些數據容器內的數據表示,這些數據容器通過使用流API對數據進行更改的過濾器驅動程序呈現給Windows資源管理器容器並添加行到文件列表等。

+0

這是完美的,謝謝! – Nicros 2013-05-02 18:22:25

相關問題