zoukankan      html  css  js  c++  java
  • 【转】使用SQL Server 2012的FileTable轻松管理文件

    一 、FileStream和FileTable介绍

    我们经常需要把结构化数据(int、Char等)和非结构化数据(如Varbinary(max))一起存储,那我们在怎么存储的呢?

    1、 在SQL Server 2008之前,我们通常在数据库中存储结构化的数据,并且将非结构化数据(例如文档、音频、视频等)存储在NTFS文件系统中,然后在数据库中存放这些文件的路径。但是显而意见,很难保证文件系统和数据库的一致性。

    2、 在SQL Server 2008,新增了FileStream,它允许我们将Varbinary(max)类型的文件存放在NTFS文件系统,但是能够直接通过SQL Server管理文件系统中的文件,有效地保证了事务的一致性。但是文件系统只是用来存储文件而已,并不能用来组织和管理文件。

    3、 在SQL Server2012,在FileStream的基础之上新增了FileTable,它拥有FileStream的一切功能。并且通过Windows的文件系统能够组织和管理文件,对于文件的一切操作都会反映在SQL Server的文件表中,例如在文件系统中新建文件、新建文件夹、更改文件类型、文件大小等 ,都会相应地在SQL Server的文件表上做相应的操作。

    二 、如何配置和使用FileTable

    1、 在SQL Server配置管理器中开启文件流访问

    a) 勾上“针对Transact-SQL访问启用FileStream”

    b) 勾上“启用FileStream进行文件I/O访问”。“Windows共享名(W)”处填入“CanwaySQLFile”

    c) 勾上“允许远程客户端访问FileStream数据(R)”

    2、 在数据库的实例属性上允许访问文件流

    打开“SQL Server Management Studio”,修改该实例的配置。默认配置如下:

    将“FileStream访问级别”从“已禁用”改成“已启用完全访问”

    其中“FileStream访问级别”有三种可选项:

    a) 已禁用

    无法将二进制大型对象 (BLOB) 数据存储在文件系统中。此为默认值。即filestream access level=0

    b) 已启用 Transact-SQL 访问

    可使用 Transact-SQL 访问 FILESTREAM 数据,但不能通过文件系统进行访问。即filestream access level=1

    c) 已启用完全访问

    FILESTREAM 数据可使用 Transact-SQL 以及通过文件系统进行访问。即filestream access level=0

    点击“确定”之后提示必须重启SQL Server服务才会生效:

    3、 数据库中添加文件流组和文件

    a) 添加文件流组

    右键数据库FileTableDB->属性->文件组,在下方的“FileStream”点击“添加”来添加一个文件流组FileStreamGroup。

    b) 添加文件

    添加了文件流组之后就可以在文件流组中添加数据文件

    右键数据库FileTableDB->属性->文件,添加一个名为“FileTable”、文件类型为“FileStream数据”、文件组为“FileStreamGroup”、路径为“E:FB”的数据库文件。

    打开目录“E:FB”,可以看到自动新建了一个文件夹“FileTable”,在FileTable文件夹下面有一个filestream.hdr文件,它是是FILESTREAM 容器的头文件

    4、 数据库启用“非事务访问”和填写“FileStream目录名称”

    右键数据库FileTableDB->属性->选项

    a) 在“FileStream非事务访问”处选项“Full”

    b) 在“FileStream目录名称”处填写“ImageFile”

    点击“确定”后提示:

    直接点击是就可以了。

    5、 创建文件表FileTable

    打开SSMS,打开新的查询窗口,输入以下命令并运行

    展开数据库FileTableDB,在数据库下有一个名为FileTable的文件夹,展开此文件夹,可以看到一个名为ImageTable2并且拥有很多列的表。

    6、 获取共享路径

    在数据库FileTableDB下创建文件表ImageTable2之后,就能够通过Windows的资源管理器来看到文件表ImageTable2中存放的文件。

    先获取文件表ImageTable2的共享路径,在SSMS下运行以下命令可以得到:

    7、 通过共享路径访问数据库FileTableDB下文件表ImageTable2中存放的文件

    a) 通过共享路径访问

    目前共享文件中没有文件。

    b) 查询ImageTable2

    目录表ImageTable2也是空的

    c) 在Windows资源管理器上打开上面的共享目录

    i. 新建一个名为“Test.txt”的文件

    然后再查询表ImageTable2

    (后面还有其它字段,截图没截到)

    可以发现,在共享目录下创建一个文件,那么在表ImageTable2下也会自动添加一条记录。

    ii. 同样地,在数据库中删除表ImageTable2下的记录也会相应地自动删除共享目录下的文件。

    iii. 在共享目录下创建文件夹也会自动地在文件表中创建一个文件夹

    iv. 共享目录下修改文件的名字、增加文件的内容、更改文件的类型等都会自动地在数据库的ImageTable2下做相应的更改。

    三 、总结

    通过SQL Server 2012的FileTable,我们可以很方便地组织和管理存放在数据库中的文件。可以通过文件系统直接为文件建立多级目录进行分类管理,可以修改文件类型,修改文件名等,这些都不会影响到数据库和文件系统的一致性。

  • 相关阅读:
    Java之IO(一)InputStream和OutputStream
    bitset库
    assert
    C++ 与 Python 混合编程
    C++多线程
    C++11新特性
    C++性能优化指南
    C++随机数
    C++中struct与class的区别
    C++杂记
  • 原文地址:https://www.cnblogs.com/chenshao/p/4108678.html
Copyright © 2011-2022 走看看