SharePoint 2010 的 FILESTREAM

英文原文已於 2011 年 4 月 21 日星期四發佈

作者: Bill Baer,資深技術產品經理,Microsoft Corporation - SharePoint

FILESTREAM 是 SQL Server 2008 中的新功能,可讓您將未結構化資料儲存在 NTFS 檔案系統上。SharePoint 2010 中支援 FILESTREAM 做為一種機制,這個機制會透過允許將大型未結構化二進位資料儲存在可定址的內容或商品儲存空間,減少資本支出。

未結構化資料

未結構化資料是指未依循定義模型,或無法納入 SharePoint 中相關資料表的資訊。未結構化資料可以是 Microsoft Office 文件檔案格式、視訊、音訊和相關檔案類型。

 

結構化資料

SharePoint 中的結構化資料是指,與對應的未結構化資料或 BLOB 關聯的中繼資料。相關資料庫大多引用做為結構化資料的範例。

 

SQL Server 與未結構化資料存放區

共有三種 (3) 方法可以使用 SQL Server、RBS、SQL BLOB 和 FILESTREAM 儲存未結構化資料:

  • 遠端 Blob 儲存 (RBS),在其中 SharePoint 依賴 SQL Server 中的新層,才能讀取或更新儲存在個別 BLOB 儲存上資料庫之外的 BLOB 資料。
  • SQL BLOB,是指 SharePoint 的傳統 BLOB 儲存,而 BLOB 資料會儲存在內容資料庫中的未結構化中繼資料旁邊
  • FILESTREAM

 

FILESTREAM 概觀

FILESTREAM 是根據 varbinary(max) 資料類型而實作,透過包含檔案系統目錄 (而非檔案本身,亦稱為資料容器) 的 FILESTREAM 檔案群組,指示資料庫引擎將未結構化資料儲存在檔案系統上。資料容器是資料庫引擎存放區和檔案系統存放區之間的介面。Varbinary 是儲存在 SharePoint 2010 內容資料庫中的大型二進位物件的二進位資料類型指定,並且可以是變數長度二進位資料。(MAX) 是指最大值,表示最大儲存大小為 2^31-1 位元組,否則為 2GB。遠端 BLOB 儲存不包含超過 SharePoint 所附加的 2GB 檔案大小限制的機制。

 

在 SharePoint 2010 中,遠端 BLOB 資料是由內容資料庫中為 RBS 所設定的唯一識別碼所參考 (請見下圖)。

 

 

 

 

 

FILESTREAM 提供數個與效能有關的好處 1) FILESTREAM 使用 NT 系統快取來快取檔案資料,以減少 FILESTREAM 資料對 Database Engine 效能的影響,以及 2) 不會使用 SQL Server 緩衝集區,因此,記憶體可供查詢處理使用。

 

將 SharePoint 用來儲存大型 BLOB 資料 (例如視訊檔案) 時,FILESTREAM 會提供最佳值,如此,對於 FILESTREAM 或超過 1MB 的資料將有所助益。

 

特殊考量事項

 

FILESTREAM 和企業永續經營

 

資料庫鏡像不支援 FILESTREAM,因為無法在主體伺服器上建立 FILESTREAM 檔案群組,並且無法為包含 FILESTREAM 檔案群組的資料庫設定資料庫鏡像。如果 FILESTREAM 提供者可用來在本機儲存 BLOB 資料 (在相同內容資料庫內),就無法設定資料庫進行資料庫鏡像。

 

如果 FILESTREAM 提供者是設定為在個別 SQL 資料庫內儲存 BLOB 資料或使用協力廠商 BLOB 存放區,就可以鏡像內容資料庫,不過,資料庫鏡像將只適用於內容資料庫,而非 BLOB 資料庫。BLOB 資料必須個別處理且與相關聯的中繼資料 (內容資料庫) 保持同步。若是 FILESTREAM BLOB 資料庫,透過記錄傳送就能達成。

 

若要了解 FILESTREAM 與 SQL Server 遠端 BLOB 儲存之間的差異,請參閱 https://blogs.msdn.com/b/sqlrbs/archive/2009/11/18/sql-server-remote-blob-store-and-filestream-feature-comparison.aspx (可能為英文網頁)

 

FILESTREAM 與 Office Web Applications 快取

 

Word 和 PowerPoint Web Applications 會使用 Office Web Applications 快取來建立被要求透過瀏覽器檢視的文件版本,藉由製作快取版本的文件或簡報,改善伺服器電腦上的效能並減少資源消耗,以防同一個文件出現多個要求。

 

Office Web Applications 快取發生於兩個 (2) 不同階層,即伺服器檔案系統,以及裝載在每個 Web 應用程式的「特製化」網站集合。由於會顯示用戶端消耗的影像,因此透過 Office Web Applications 發出的文件或簡報要求會由兩者的快取處理。兩者的快取位置是由已啟用 Office Web Applications 功能的 Web 應用程式內的所有網站集合所使用。

 

已設定 FILESTREAM 的內容資料庫會將快取的文件或簡報版本儲存在設定的提供者位置。 建議您在未設定 FILESTREAM 的資料庫上設定 Office Web Applications 快取。

 

設定 FILESTREAM 與 SharePoint 2010

下列指示是設計用於單一伺服器部署,做為示範之用並實作本機 FILESTREAM 提供者。

 

啟用目標 SQL Server 執行個體上的 FILESTREAM

 

1. 在 [開始] 功能表上,依序指向 [所有程式]、[Microsoft SQL Server 2008 (R2)]、[組態工具],然後按一下 [SQL Server 組態管理員]。

2. 在服務清單中,以滑鼠右鍵按一下 [SQL Server 服務],然後按一下 [開啟]。

3. 在 [SQL Server 組態管理員] 嵌入式管理單元中,找出您要啟用 FILESTREAM 的 SQL Server 執行個體。

4. 以滑鼠右鍵按一下執行個體,然後按一下 [屬性]。

5. 在 [SQL Server 屬性] 對話方塊中,按一下 [FILESTREAM] 索引標籤。

6. 選取 [啟用 FILESTREAM 的 Transact-SQL 存取] 核取方塊。

7. 如果您想要從 Windows 讀取及寫入 FILESTREAM 資料,請按一下 [啟用 FILESTREAM 的檔案 I/O 資料流存取]。在 [Windows 共用名稱] 方塊中輸入 Windows 共用的名稱。

8. 如果遠端用戶端必須存取儲存在這個共用上的 FILESTREAM 資料,請選取 [允許遠端用戶端具有 FILESTREAM 資料的資料流存取權]。

9. 按一下 [套用]。

10. 依序按一下 [開始]、[所有程式]、[Microsoft SQL Server 2008 (R2)],然後按一下 [SQL Server Management Studio]。

11. 在 SQL Server Management Studio 中,按一下 [新增查詢] 以顯示 [查詢編輯器]。

12. 在 [查詢編輯器] 中,輸入下列 Transact-SQL 程式碼:

 

EXEC sp_configure filestream_access_level, 2

 

在 [查詢編輯器] 中,輸入下列 Transact-SQL 程式碼:

 

RECONFIGURE

佈建 RBS 資料存放區

 

1. 依序按一下 [開始]、[所有程式]、[Microsoft SQL Server 2008 (R2)],然後按一下 [SQL Server Management Studio]。

2. 展開 [資料庫]。

3. 選取您要建立 BLOB 存放區的內容資料庫,然後按一下 [新增查詢]。

4. 在 SQL Server Management Studio 中,按一下 [新增查詢] 以顯示 [查詢編輯器]。

5. 在 [查詢編輯器] 中,輸入下列 Transact-SQL 程式碼:

 

use [Database Name]

 

if not exists (select * from sys.symmetric_keys where name = N'##MS_DatabaseMasterKey##')create master key encryption by password = N'Admin Key Password !2#4'

 

在 [查詢編輯器] 中,輸入下列 Transact-SQL 程式碼:

 

use [Database Name]

 

if not exists (select groupname from sysfilegroups where groupname=N'RBSFilestreamProvider')alter database [Database Name] add filegroup RBSFilestreamProvider contains filestream

 

在 [查詢編輯器] 中,輸入下列 Transact-SQL 程式碼:

 

use [Database Name]

 

alter database [Database Name] add file (name = RBSFilestreamFile, filename = 'c:\BlobStore') to filegroup RBSFilestreamProvider

安裝 Microsoft SQL Server 2008 R2 遠端 Blob 存放區

 

從 Microsoft SQL Server 2008 R2 功能套件下載 Microsoft SQL Server 2008 R2 遠端 Blob 存放區適用的 x64 套件: https://www.microsoft.com/downloads/details.aspx?FamilyID=ceb4346f-657f-4d28-83f5-aae0c5c83d52&displayLang=zh-tw

 

使用系統管理員權限開啟 [命令提示字元],並執行下列命令,以安裝先前步驟所下載的 RBS.MSI:

 

msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi TRUSTSERVERCERTIFICATE=true FILEGROUP=PRIMARY DBNAME="<Database Name>" DBINSTANCE="<Instance Name>" FILESTREAMFILEGROUP=RBSFilestreamProvider FILESTREAMSTORENAME=FilestreamProvider_1

 

注意

請在上述狀況中指定 RBS.MSI 的完整路徑,例如 C:\Users\Administrator\Desktop\RBS.MSI。取代 DBNAME 和 DBINSTANCE 的值以符合您的環境。

 

啟用遠端 BLOB 儲存

1. 按一下 [開始] 功能表上的 [所有程式]。

2. 按一下 [Microsoft SharePoint 2010 產品]。

3. 按一下 [SharePoint 2010 管理命令介面]。

4. 在 [SharePoint 2010 管理命令介面] 中,輸入下列 Windows PowerShell 陳述式,將內容資料庫設定為已設定:

$database=Get-SPContentDatabase –Identity “Database Name”

在 [SharePoint 2010 管理命令介面] 中,輸入下列 Windows PowerShell 陳述式,取得保有設定以判斷內容資料庫如何使用 Microsoft SQL Server 遠端 Blob 儲存的物件:

$rbs=$database.RemoteBlobStorageSettings

在 [SharePoint 2010 管理命令介面] 中,輸入下列 Windows PowerShell 陳述式,以判斷選取的內容資料庫是否已安裝 RBS:

$rbs.Installed()

注意

$rbs.Installed() 的結果應為 True,如果結果是 False,請檢閱 rbs_install_log.txt,確認已成功安裝 RBS.MSI。若要確定安裝陳述式是在 [SharePoint 2010 管理命令介面] 中執行,請輸入下列 Windows PowerShell 陳述式,啟用選取的內容資料庫的 RBS:

 

$rbs.Enable()

在 [SharePoint 2010 管理命令介面] 中,輸入下列 Windows PowerShell 陳述式,以設定選取的內容資料庫的 RBSprovider:

$rbs.SetActiveProviderName($rbs.GetProviderNames()[0])

 

$rbs

 

注意

$rbs 的結果應為:

資料表 1

 

資料表 1 的附錄

 

已啟用 指定選取的內容資料庫是否已啟用 RBS。

 

ActiveProviderName 是儲存新檔案的 SQL 遠端 Blob 儲存提供者的名稱。如果無法使用 SQL 遠端 Blob 儲存新檔案,將會是 null。

 

MinimumBlobStorageSize 表示最小大小,BLOB 可能被視為值得 RBS 儲存,而超過指定的 MinimumBlobStorageSize 的 BLOB 資料將儲存在 RBS 資料存放區中。

 

FILESTREAM 效能資料顯示,超過 1MB 的 BLOB 資料提供最有效率的資料流處理效能。請參閱 https://msdn.microsoft.com/zh-tw/library/cc949109(sql.100).aspx (可能為英文網頁)

 

 

若要設定 MinimumBlobStorageSize:

1. 按一下 [開始] 功能表上的 [所有程式]。

2. 按一下 [Microsoft SharePoint 2010 產品]。

3. 按一下 [SharePoint 2010 管理命令介面]。

4. 在 [SharePoint 2010 管理命令介面] 中,輸入下列 Windows PowerShell 陳述式,將 MinimumBlobStorageSize 設為 1MB:

$database = Get-SPContentDatabase “Database Name”

 

$database.RemoteBlobStorageSettings.MinimumBlobStorageSize=1048576

 

$database.Update()

UpgradePersistedProperties 針對已刪除或變更的欄位指定欄位名稱和值的集合。

 

驗證安裝

若要驗證 FILESTREAM 設定和 RBS 安裝:

 

1. 依序按一下 [開始]、[所有程式]、[Microsoft SQL Server 2008 (R2)],然後按一下 [SQL Server Management Studio]。

2. 展開 [資料庫]。

3. 選取您要建立 BLOB 存放區的內容資料庫,然後按一下 [新增查詢]。

4. 在 SQL Server Management Studio 中,按一下 [新增查詢] 以顯示 [查詢編輯器]。

5. 在 [查詢編輯器] 中,輸入下列 Transact-SQL 程式碼:

USE [Database Name]

SELECT * FROM dbo.DatabaseInformation

確認 RBSCollectionId 和 RBSProvider 資料列都可以使用。

 

測試 RBS 資料存放區

1. 在設定的內容資料庫中選取網站上想要的文件庫。

2. 上傳大於 1 MB 的檔案。

3. 在包含 RBS 資料存放區的電腦上,按一下 [開始],然後按一下 [電腦]。

4. 瀏覽至 RBS 資料存放區目錄。

5. 瀏覽至檔案清單,並開啟具有最新修改日期 (而非 $FSLOG) 的資料夾。在該資料夾中,開啟具有最新修改日期的檔案。請確認這個檔案具有與您上傳的檔案相同的大小和內容。如果沒有,請確認已正確安裝並啟用 RBS。

資料存放區目錄結構會顯示類似於下列圖表。

 

 

注意

在事件中,當上傳大於設定的 MinimumBlobStorageSize 的文件時會出現錯誤「URL '<文件庫>/File' 無效。它可能參照非存在的檔案或資料夾,或是參照不在目前網站中的有效檔案或資料夾」。請開啟 [SQL Server 組態管理員],並啟用 [啟用 FILESTREAM 的檔案 I/O 資料流存取],然後重新啟動 SQL Server (MSSQLSERVER) 服務。

 

其他資源

 

 

類別: 如何達成SharePoint 2010

發佈日期: 4/22/2011 9:00 AM

這是翻譯後的部落格文章。英文原文請參閱 FILESTREAM with SharePoint 2010