SQL Server 2012 FileTables 简介
本文将介绍有关 SQL Server 2012 FileTables。
大家都知道像是 SQL Server 这类的关联式数据库擅长处理大量结构化数据,对于文件或目录这类型的非结构化数据的管理及查询,相对而言比较难以处理。
以一般网站应用程序开发为例,常常会需要提供使用者透过浏览器上传文件的功能,应用程序要如何记录这些文件的相关资讯,大致上都是采用这两种方法,一是只在 DBMS 中纪录文件名称、大小、类型等资讯,实际文件还是存放在文件系统当中,二是把上传的文件转成二进制后保存到 DBMS 中。
上述两种方法都有其优缺点,前者的问题会在于当您备份数据库时,保存在文件系统中的文件或目录,需要自行想办法做备份,换言之,数据库和实例文件是独立的。后者将实例文件转成二进制数据,容易在性能上或保存空间上衍生问题。
现在这个难题在 SQL Server 2012 新增特殊数据表(FileTables)已经可以解决大部分的问题,它是以 FILESTREAM 技术为基础,并提供和全文检索(Full-Text Searc)和语义搜寻(Semantic Search)等进阶搜寻功能整合。透过 FileTables 您可以只利用 T-SQL 就可以读取文件、目录阶层及文件属性等资讯,并且可以和备份功能整合,将来只要备份数据库,就会连同 FileTables 中的文件或目录一同备份,又不会衍生性能或数据库保存空间的问题。接下来笔者就来介绍如何设定并使用 FileTables。
启用 FileTables 有几个必要条件,说明如下:
- 执行个体层级必须启用 FILESTREAM。
- 必须为 FILESTREAM 建立专用的文件群组。
- 在数据库层级起用非事务式存取(Non-transactional access)。
- 建立 FileTables 数据表。
特别一提的是,假设您的 SQL Server 是安装在 64 位的操作系统上,而您的 SQL Server 是安装 32 位版本,您将无法启用 FILESTRAM 功能,这点是在规划安装 SQL Server 前必须先考虑清楚的。
接着笔者说明上述四个步骤应该如何进行:
-
执行个体层级必须启用 FILESTREAM。
您可以于【开始 > 执行 > 输入 SQLServerManager11.ms】开启 SQL Server Configuration Manager。勾选 Enable FILESTRAM for Transact-SQL access,并设定分享目录名称,接着重新启动 Database Engine 服务。
服务重新启动后,再以下列 T-SQL 设定 FILESTREAM ACCESS LEVEL:
1: EXEC sp_configure filestream_access_level, 2
2: GO
3: RECONFIGURE
4: GO
-
必须为 FILESTREAM 建立专用的文件群组。
由于 FileTables 这种特殊的数据表,无法保存在一般的文件群组中,因此这个步骤必须在您建立数据库时,必须以下列 T-SQL 建立 FILESTREAM 专用的文件群组(如第 12 列的程序):
1: DECLARE @DB_Name NVARCHAR(64) = N'FTDB'
2: DECLARE @device_directory NVARCHAR(256)
3: SELECT @device_directory = SUBSTRING(filename, 1, CHARINDEX(N'master.mdf', LOWER(filename)) - 1)
4: FROM master.dbo.sysaltfiles WHERE dbid = 1 AND fileid = 1
5:
6: IF DB_ID(@DB_Name) > 0
7: EXEC ('DROP DATABASE ' + @DB_Name)
8:
9: EXEC (
10: N'CREATE DATABASE ' + @DB_Name
11: + ' ON PRIMARY (NAME = N''FTData'', FILENAME = N''' + @device_directory + N'FTData.mdf'') '
12: + ', FILEGROUP FSFileGroup CONTAINS FILESTREAM( NAME = FTData1, FILENAME = N''' + @device_directory +N'FTData1'') '
13: + 'LOG ON (NAME = N''FTLog'', FILENAME = N''' + @device_directory + N'FTLog.ldf'')'
14: )
15: GO
-
在数据库层级起用非事务式存取(Non-transactional access)。
-
建立 FileTables 数据表。
您可以用下列两种方式来建立 FileTable:
1: --方法一,指定目录名称及定序
2: CREATE TABLE MyFileTable AS FileTable
3: WITH (
4: FileTable_Directory = 'FileTables',--指定目录名称
5: FileTable_Collate_Filename = database_default--指定 name 数据行的定序
6: )
7: GO
8:
9: --方法二,使用默认的目录名称
10: CREATE TABLE MyFileTable2 AS FileTable
11: GO
建立完成后您可以在刚刚建立好的数据库属性中看到类似下图的结果:
若顺利建立成功,您将于【Object Explorer > 数据库名称 > Tables > FileTables】项下看到您建立的 FileTable,同时您可以看到 SQL Server 可以帮您管理非结构化文件中的那些资讯(如下图)。
本文就先介绍到此,下一篇文章,笔者将介绍如何把文件纳入 SQL Server 2012 的 FileTables 管理。
【参考数据】
- FileTables (SQL Server)
原文:大专栏 SQL Server 2012 FileTables 简介
原文地址:https://www.cnblogs.com/chinatrump/p/11516469.html
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试
- .Net 转战 Android 4.4 日常笔记(10)--PullToRefresh下拉刷新使用
- .Net 转战 Android 4.4 日常笔记(10)--ADT集成环境更新SDK
- Windows Server 2008R2 配置网络负载平衡(NLB)
- .Net 转战 Android 4.4 日常笔记(9)--常用组件的使用方法[附源码]
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(38)-Easyui-accordion+tree漂亮的菜单导航
- .Net 转战 Android 4.4 日常笔记(8)--常见事件响应及实现方式
- silverlight于javascript通信
- 微信上线小游戏:对流量基础入口应用商店革命
- Appium Desktop 使用
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(36)-文章发布系统③-kindeditor使用
- Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站
- .Net 转战 Android 4.4 日常笔记(7)--apk的打包与反编译
- 丰富的silverlight控件
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- redis学习(二)
- You-Get 使用方法
- 接口测试 Mock 实战 | 结合 jq 完成批量化的手工 Mock
- 在Angular应用的child Component里同时使用@Input和@Output
- Angular应用里的@Input和@Output注解使用方法介绍
- K8S Ingress使用|常见问题列表
- 部署Tomcat及负载均衡
- Jenkins常用插件Publish Over SSH
- Zabbix 4.0配置监控Linux客户端
- esp8266+oled+DHT 11温湿度显示
- esp8266+oled 显示时间日期
- esp8266+DHT11温湿传感器 制作web室内温度计
- Linux端口转发的几种常用方法
- kali破解wifi密码
- 面向对象的7种设计原则(7)-开闭原则