我的應用程序在用戶註冊後播放視頻文件(文件大於100 MB)。文件流vs本地保存在SQL Server?
是更好地做我保存他們硬盤上,並保持文件路徑數據庫? 或 作爲文件流類型存儲在數據庫中嗎?
當數據存儲在數據庫中時,對操作和存儲在硬盤上更安全嗎?
如何提供數據安全防止操縱?
謝謝。
我的應用程序在用戶註冊後播放視頻文件(文件大於100 MB)。文件流vs本地保存在SQL Server?
是更好地做我保存他們硬盤上,並保持文件路徑數據庫? 或 作爲文件流類型存儲在數據庫中嗎?
當數據存儲在數據庫中時,對操作和存儲在硬盤上更安全嗎?
如何提供數據安全防止操縱?
謝謝。
微軟研究院有一篇名爲To Blob or Not To Blob的非常好的論文。
他們大量的性能測試和分析後得出的結論是這樣的:
如果您的圖片或文檔通常低於在大小256K,將它們存儲在一個數據庫VARBINARY列更有效
如果您的圖片或文檔通常大小超過1 MB,將它們存儲在文件系統中效率更高(並且使用SQL Server 2008的FILESTREAM
屬性,它們仍處於事務控制下並且是數據庫的一部分)
,這取決於你的使用有點難以取捨的
如果你決定把你的照片到SQL Server表,我會強烈建議使用一個單獨的表用於存儲這些圖片 - 不要將員工照片存儲在員工表中 - 將他們保存在單獨的表格中。這樣,Employee
表可以保持精簡併意味着非常高效,假設您並不總是需要選擇員工照片作爲查詢的一部分。
對於文件組,請查看Files and Filegroup Architecture的介紹。基本上,您可以從一開始就爲大數據結構創建一個單獨的文件組的數據庫,或者稍後添加一個額外的文件組。我們稱之爲LARGE_DATA
。
現在,只要你有一個新的表來創建一個需要存儲VARCHAR(MAX)
或VARBINARY(MAX)
列,可以爲大型數據指定該文件組:
CREATE TABLE dbo.YourTable
(....... define the fields here ......)
ON Data -- the basic "Data" filegroup for the regular data
TEXTIMAGE_ON LARGE_DATA -- the filegroup for large chunks of data
檢查出文件組的MSDN介紹,和玩它!
1 - 取決於你如何定義「更好」。通常,我更喜歡將二進制資產存儲在數據庫中,以便將它們與相關數據一起備份,但將它們緩存在文件系統上。將二進制數據從SQL Server流式傳輸到頁面請求是一個真正的性能問題,並沒有真正的擴展。
3 - 這本身就是一個完整的問題。對於堆棧溢出來說太寬...