• SQL Server ->> FileTable


    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的结构是固定是。表中的每一行数据代表了一个文件,表中的栏位代表了文件的一些属性列,像文件创建时间和修改时间,以及文件的路径。参考FileTable Schema

    我们都知道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 FilesFILESTREAM_File1'
    )
    TO FILEGROUP FILESTREAM_FG;

    数据库的配置完成后就可以创建filetable了。除了下面两个选项,还可以指定表的主键约束等三个约束的名字

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

    创建完表之后你可以通过Windows Explorer在FileStream共享路径下新建、删除、修改文件,共享路径为

    \SERVERNAMEFILESTREAM_WINDOWS_SHARE_NAMEFILESTREAM_TABLE_NAMEFILETABLE_DIRECTORY

    结果也会反映到FileTable中。你甚至可以更新文件的名字、创建日期、修改日期等。这些改动同样会反映到文件本身的NTFS文件系统属性。

    获取文件完整路径

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

    参考:

    FileTable Schema

    FileTables (SQL Server)

    Full Text Searches on Documents in FileTables

    FileTable Feature in SQL Server 2012

  • 相关阅读:
    默认构造函数
    Android笔记(二十八) Android中图片之简单图片使用
    Android笔记(二十七) Android中的动态广播和静态广播
    Android笔记(二十六) Android中的广播——BroadcastReceiver
    <转> Android LayoutInflater详解
    Android笔记(二十五) ListView的缓存机制与BaseAdapter
    Android笔记(二十四) Android中的SeekBar(拖动条)
    Android笔记(二十三) Android中的ProgressBar(进度条)
    Android笔记(二十二) Android中的GridView
    Android笔记(二十一) Android中的Adapter
  • 原文地址:https://www.cnblogs.com/jenrrychen/p/5170340.html
Copyright © 2020-2023  润新知