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

SQL Server ->> FileTable

編輯:關於SqlServer

FileTable是SQL Server 2012的新特性之一。它是基於SQL Server 2008的FILESTREAM特性上而來的,允許我們把Windows文件存儲在SQL Server中,讓SQL Server可以存儲非結構化的數據。也就是存是存在SQL Server中,像backup這種SQL Server這種操作也可以兼顧到,但是對於文件的訪問時是通過Windows文件系統來訪問的。FileTable和Windows文件的命名空間達到兼容,還可以和SQL Server的全文索引(fulltext)和語義搜索(semantic search)結合。以往我們都是通過文件服務器來管理文件,由於SQL Server提供了對文件管理的支持和整合,所以FileTable成了和應用程序相結合起來管理文件的一個好的辦法,而且它又具備了一些SQL Server的特性,比如backup的支持,而應用程序可以如常的從文件系統的角度去訪問文件。

 

和Windows達到兼容性

既然和Windows達到兼容性,那麼FileTable(或者它自身具備的FileStream的特性)就應該是和具備Windows API的一些特性,如:

1)非事務型流數據訪問和就地(原)文件更新;

2)層級命名空間(文件目錄結構和文件);

3)文件屬性,如文件創建日期和修改日期;

4)對Windows文件和目錄的管理;

 

FileTable的結構

FileTable的結構是固定是。表中的每一行數據代表了一個文件,表中的欄位代表了文件的一些屬性列,像文件創建時間和修改時間,以及文件的路徑。參考FileTableSchema

 

我們都知道FILESTREAM是基於Windows文件系統的共享功能,那麼FileTable也不例外。我們通過在FILESTREAM共享路徑下創建根路徑給一張FileTable。FileTable和T-SQL也是結合的,允許被更新和查詢數據。

 

Windows文件系統和SQL Server間的整合

對FILETABLE根目錄的任何改動,比如對文件的創建更新刪除都會反映到FILETABLE表中。

 

事務性和非事務性

FileTable作為一張SQL Server表,表的數據更新是支持事務性的。但是由於對文件的操作是屬於一個Windows文件系統的操作行為,是不具備事務性的。而FILESTREAM其實是支持事務性的。

 

FileTable和FileStream的關系

FileTable依賴於FileStream特性。FileTable本身是需要啟用non-transactional access選項,但是不代表說FileStream本身是必須開啟這個選項的。也就是如果我不使用FileTable,我再添加FILESTREAM FILEGROUP的時候是不需要啟用non-transactional access選項。其次,FileStream可能包含FileTable的數據和其他應用程序的數據,然後FileTable的non-transactional access選項並不對其他的數據造成影響。

 

 使用FileTable前先開啟FileStream功能,這個功能要麼你在安裝的時候就勾選啟用選項,要麼你就開啟server-level configuration。需要說明由於filestream功能使用了139和445端口,所以防火牆要允許139(inbound)和445(inbound)端口。

EXEC sp_configure filestream_access_level, 2
RECONFIGURE

 

再開啟數據庫的filestream功能

ALTER DATABASE JerryDB
SET FILESTREAM
( 
NON_TRANSACTED_ACCESS = FULL,
DIRECTORY_NAME = N'FileTable1'
);

 

 加入一個FILESTREAM FILEGROUP到當前數據庫

ALTER DATABASE JerryDB
ADD FILEGROUP FILESTREAM_FG
CONTAINS FILESTREAM;

 

為當前的文件組添加一個共享路徑

ALTER DATABASE JerryDB
ADD FILE
(
NAME= 'FILESTREAM_File1',
FILENAME = 'F:\Database Log Files\FILESTREAM_File1'
)
TO FILEGROUP FILESTREAM_FG;

 

數據庫的配置完成後就可以創建filetable了。除了下面兩個選項,還可以指定表的主鍵約束等三個約束的名字

CREATE TABLE DemoFileTable AS FILETABLE
WITH
( 
FILETABLE_DIRECTORY = 'FileTable1',
FILETABLE_COLLATE_FILENAME = database_default
);
GO

 

創建完表之後你可以通過Windows Explorer在FileStream共享路徑下新建、刪除、修改文件,共享路徑為

\\SERVERNAME\FILESTREAM_WINDOWS_SHARE_NAME\FILESTREAM_TABLE_NAME\FILETABLE_DIRECTORY\

 

結果也會反映到FileTable中。你甚至可以更新文件的名字、創建日期、修改日期等。這些改動同樣會反映到文件本身的NTFS文件系統屬性。

 

獲取文件完整路徑

SELECT FileTableRootPath()+[file_stream].GetFileNamespacePath(),
GetPathLocator(FileTableRootPath()+[file_stream].GetFileNamespacePath()),
path_locator
FROM [JerryDB].[dbo].[DemoFileTable]

 

 

 

參考:

FileTableSchema

FileTables(SQLServer)

FullTextSearchesonDocumentsinFileTables

FileTableFeatureinSQLServer2012

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved