一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - SQL Server的FileStream和FileTable深入剖析

SQL Server的FileStream和FileTable深入剖析

2019-12-25 14:38MSSQL教程網 Sql Server

互聯網時代數據是爆炸式增長,我們常常需要把結構化數據和非結構化數據存儲在一起。本文將介紹幾種解決方案

互聯網時代數據是爆炸式增長,我們常常需要把結構化數據和非結構化數據(如文檔,演示文稿,視頻,音頻,圖像)存儲在一起。通常有幾種方案: 

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' 


SQL Server的FileStream和FileTable深入剖析 
創建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] 
SQL Server的FileStream和FileTable深入剖析 
在企業管理器選擇FileTable,右鍵 "Explorer FileTable Directory" link as shown below: 
SQL Server的FileStream和FileTable深入剖析 
你會看到網絡共享目錄. 手動添加幾個文件到該目錄,我們返回SQLServer企業管理器看看有什么事情發生: 
SQL Server的FileStream和FileTable深入剖析 
再運行一次查詢語句 
USE LearnFileTable SELECT * FROM [dbo].[MyFirstFileTable] 
SQL Server的FileStream和FileTable深入剖析 
總結 
在這篇文章中,我談到了利用SQL Server的FileStream和FileTable功能存儲非結構化的數據。 FILESTREAM功能在文件系統中存儲??非結構化數據,并把文件的指針保存在數據庫,而FileTable進一步擴展了這一功能允許非事務性訪問(訪問文件,而無需事先授權,共享位置)。換句話說,有了這個功能,我們可以通過文件系統來管理非結構化數據,而不是在SQL Server管理,卻依然可以在SQL Server中的事務訪問這些文件。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 好姑娘在线观看完整版免费 | ts人妖国产一区 | 午夜免费啪视频观看视频 | 草莓绿巨人香蕉茄子芭乐 | 欧美四级无删版影片 | 亚洲国产在 | 91精品国产高清久久久久久 | 欧美一级视频在线 | 日本精工厂网址 | 欧美男男gaysgays | 国产免费精彩视频 | 免费亚洲一区 | 四虎国产欧美成人影院 | 五月精品 | 91视频国产精品 | 日韩毛片在线 | 无限在线观看视频大全免费高清 | 国产欧美一区视频在线观看 | 成人小视频在线免费观看 | 国产五月天在线 | 色多多在线视频 | 亚洲人成影院午夜网站 | 国产va欧美va在线观看 | 狠狠色综合久久婷婷色天使 | 高清在线观看免费入口 | 精品午夜中文字幕熟女人妻在线 | 免费看片黄 | 99国产国人青青视频在线观看 | 成人影院在线观看免费 | 欧美xxxxx性 欧美xxxbrazzers | 贵妇的私人性俱乐部 | 性关系视频免费网站在线观看 | 好大好深好涨好烫还要 | 火影小南被爆羞羞网站 | 欧美亚洲视频在线观看 | 图片专区小说专区卡通动漫 | 国产高清国内精品福利色噜噜 | 国产欧美日韩综合二区三区 | 日本高清在线观看天码888 | 女暴露狂校园裸露小说 | 国产精品免费拍拍拍 |