程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> SQL Server的FileStream和FileTable深刻分析

SQL Server的FileStream和FileTable深刻分析

編輯:MSSQL

SQL Server的FileStream和FileTable深刻分析。本站提示廣大學習愛好者:(SQL Server的FileStream和FileTable深刻分析)文章只能為提供參考,不一定能成為您想要的結果。以下是SQL Server的FileStream和FileTable深刻分析正文


互聯網時期數據是爆炸式增加,我們經常須要把構造化數據和非構造化數據(如文檔,演示文稿,視頻,音頻,圖象)存儲在一路。平日有幾種計劃:

1。在數據庫中存儲構造化數據,在文件體系中存儲非構造化數據,然後數據庫裡有一個字段記載文件體系的途徑,固然這類辦法本錢合算,但它引入了額定的龐雜度,由於你須要手動去包管跨關系和非關系體系治理事務的完全性。
2。將構造化數據和非構造化數據都存儲在數據庫中,多年以來,數據庫一向都支撐存儲非關系數據,如二進制年夜對象,或BLOB,SQL Server稱之為varbinary數據類型,如許的利益是能充足應用數據庫的特征(如事務支撐,備份和恢復支撐,集成平安性的支撐,全文搜刮支撐等),但本錢費用會更高,所需的磁盤空間更多,由於是存儲在統一行數據裡,存儲和檢索時光更長,對運用法式的全體機能也會有負面影響。(假如你寫查詢時用select * from xxx 就很慢了)
3。SQL Server 2008中引入的FILESTREAM數據類型來存儲非構造化數據,如文檔,演示文稿,視頻,音頻,圖象,數據庫中存儲的是文件體系上的一個指針。在SQL Server 2008中,新的FILESTREAM(文件流)特征是在現有的varbinary(max)數據類型之上完成的,你可以在辦事器的文件體系上存儲真實的數據,但可以在數據庫高低文內治理和拜訪。主動包管了事務的完全性。
4。SQL Server 2012的FileTable則進一步加強,它可讓運用法式經由過程引入FileTable整合其存儲和數據治理組件,許可非事務性拜訪,供給集成的對非構造化數據和元數據的全文搜刮和語義搜刮。

上面具體談談這兩項新功效。
懂得在SQL Server 2008中的FileStream
FILESTREAM數據類型作為varbinary(max)列完成的,數據是存儲在NTFS文件體系,數據庫中寄存的是指針。在這類情形下,存儲不再是BLOB的2GB年夜小的限制,只是受制於NTFS文件體系的文件年夜小。FileStream是默許制止的,所以你須要對varbinary(max)列指定FILESTREAM屬性。如許SQL Server才不會把BLOB存到SQL Server數據庫,而是存到NTFS文件體系。
將BLOB數據存儲在NTFS文件體系上的帶來了一些利益:
和直接操作NTFS文件體系的數據流的機能一樣
FILESTREAM數據沒有應用SQL Server緩沖池的,是以SQL Server緩沖池的查詢處置,其實不會遭到FILESTREAM數據的影響。
不再有BLOB的2G年夜小的限制。
事務的分歧性。
SQLServer集成的平安模子。
備份和恢復時,會包括FILESTREAM BLOB數據。
支撐全文搜刮。

用SELECT,INSERT,UPDATE和DELETE語句,操作帶FILESTREAM數據的表,機能沒有變慢。
為了應用這項新功效,我們起首須要在實例級別啟用它(在裝置進程中,或經由過程修正SQL Server實例的屬性,或經由過程應用sp_configure來更改實例屬性),然後創立或修正數據庫,有一個文件組有FileStream屬性,然後創立一個表帶有varbinary(max)數據類型列,並指定FileStream屬性。

懂得SQL Server 2012的FileTable
FileTable應用FILESTREAM的基本長進一步增強,它既許可直接的,事務性的,存取FILESTREAM列年夜型數據。FileTable表也能夠設置裝備擺設為許可非事務性拜訪文件,而無需事前SQLServer受權。

FileTable是一種特別類型的表,它的構造是固定的,不像通俗用戶表可以界說本身的字段,就似乎它是一個文件夾中的文件體系。一個的FileTable包括的FileStream跟著幾個文件級屬性(file_id,稱號,途徑,創立日期,修正日期,最初拜訪時光等),文件和目次條理構造的數據。這意味著FileTable中的每行數據代表一個文件體系上的文件或目次。

FileTable在文件體系表示為一個indows同享目次,外面有文件和目次數據,你可以經由過程非事務性的文件拜訪(基於Windows API的運用法式可以或許拜訪文件,而無需SQLServer拜訪權限)。關於Windows運用法式,這看起來像一個正常的收集同享地位的文件和目次。運用法式可使用Windows API來治理這個收集同享地位的文件和目次。

Windows API操作長短事務性的,和數據庫是不相干。但是,FileTable是基於FileStream完成的,所以SQL的事務是支撐的。FileTable也能夠經由過程正常的Transact-SQL敕令查詢和更新。他們還集成了SQL Server治理對象和功效,如備份和恢復。

我們須要離開設置裝備擺設FileTable和FILESTREAM。這意味著,我們可以持續只應用FileStream的功效,而無需啟用非事務性拜訪或創立FileTable。
開端應用SQL Server 2012的FileTable
啟用FileStream

USE master GO
EXEC sp_configure 'filestream access level', 2
Go
RECONFIGURE GO
--You can use this statement to see current
--config value and running value
EXEC sp_configure filestream_access_level;
GO

按 Ctrl+C 復制代碼創立LearnFileTable數據庫

USE master
GO
IF EXISTS (SELECT name FROM sys.databases WHERE name = N'LearnFileTable')
DROP DATABASE LearnFileTable
GO
CREATE DATABASE LearnFileTable
--Details of primary file group
ON PRIMARY
( NAME = LearnFileTable_Primary,
FILENAME =N'D:\FileTable\LearnFileTable_Data.mdf',
SIZE = 10MB,
MAXSIZE = 50MB,
FILEGROWTH = 5MB),
--Details of additional filegroup to be used to store data
FILEGROUP DataGroup
( NAME = LearnFileTable_Data,
FILENAME =N'D:\FileTable\LearnFileTable_Data.ndf',
SIZE = 10MB,
MAXSIZE = 50MB,
FILEGROWTH = 5MB),
--Details of special filegroup to be used to store FILESTREAM data
FILEGROUP FSDataGroup CONTAINS FILESTREAM
( NAME = FileStream,
--FILENAME refers to the path and not to the actual file name. It
--creates a folder which contains a filestream.hdr file and
--also a folder $FSLOG folder as depicted in image below
FILENAME =N'D:\FileTable\FSData')
--Details of log file
LOG ON
(Name = LearnFileTable_Log,
FILENAME = 'D:\FileTable\LearnFileTable_Log.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB
)
WITH FILESTREAM (NON_TRANSACTED_ACCESS = FULL, DIRECTORY_NAME = N'LearnFileTable')
--Other option for NON_TRANSACTED_ACCESS is READ_ONLY or OFF
GO

按 Ctrl+C 復制代碼檢討FileStream/FileTable

-- Check the Filestream/FileTable Options
SELECT DB_NAME(database_id), non_transacted_access, non_transacted_access_desc, directory_name FROM sys.database_filestream_options
WHERE DB_NAME(database_id) = 'LearnFileTable'

verify the FileStream and FileTable options 
創立FileTable

USE LearnFileTable
GO
CREATE TABLE MyFirstFileTable AS FileTable
WITH
(
FileTable_Directory = 'MyFirstFileTable',
FileTable_Collate_Filename = database_default
);
GO

按 Ctrl+C 復制代碼假如我們創立FileTable前沒有啟用FileStream,會報錯
Msg 1969, Level 16, State 1, Line 1 Default FILESTREAM filegroup is not available in database '<database_name>'創立後,我們查詢一下,沒有記載
USE LearnFileTable SELECT * FROM [dbo].[MyFirstFileTable]
the query returns no record 
在企業治理器選擇FileTable,右鍵 "Explorer FileTable Directory" link as shown below:
Object Explorer 
你會看到收集同享目次. 手動添加幾個文件到該目次,我們前往SQLServer企業治理器看看有甚麼工作產生:
FileTable 
再運轉一次查詢語句
USE LearnFileTable SELECT * FROM [dbo].[MyFirstFileTable]
three records appear 
總結
在這篇文章中,我談到了應用SQL Server的FileStream和FileTable功效存儲非構造化的數據。 FILESTREAM功效在文件體系中存儲​​非構造化數據,並把文件的指針保留在數據庫,而FileTable進一步擴大了這一功效許可非事務性拜訪(拜訪文件,而無需事前受權,同享地位)。換句話說,有了這個功效,我們可以經由過程文件體系來治理非構造化數據,而不是在SQL Server治理,卻仍然可以在SQL Server中的事務拜訪這些文件。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved