最近,我们的团队正在研究FILESTREAM以扩展我们专有应用程序的功能.此应用程序的主要目的是管理我们制造的所有零件的各种PDFS,图像和文档.我们的ASP应用程序使用一些第三方工具来允许查看这些文件.我们目前在Fileserver上有980GB的数据.我们在SQL Server中有大约200GB的二进制数据,我们想要提取它,因为它不能很好地执行,因此FILESTREAM似乎是对两个主要数据存储/访问问题的良好折衷.
我们不清楚一些事情:
FILESTREAM可以或不可以将其数据存储在非本地连接的驱动器上.我们已经有一个带有RAID 10(1.5TB驱动器)的文件服务器.此服务器现在存储所有文档,我们是否必须将这些驱动器移动到SQL Server for FILESTREAM?由于服务器也是应用服务器(一台物理服务器上有两个虚拟机)的两倍,因此这将是一个棘手的问题.
FILETABLE存储有关文件的公共元数据,但存储的全文部分在哪里,以便搜索doc/docx等文件?这是分开的吗?您是否可以自由添加标准来搜索?如果是这样,任何澄清的链接将不胜感激.
可以使用外键在另一个表中引用FILETABLE吗?
先感谢您
编辑:对于那些有这些问题的人来说,这个网络视频涵盖了从2008年到2012年解释文件流的所有内容和更多内容以及需要考虑的问题(如果可能,我会认真地回答他):http://channel9.msdn.com/Events / TechDays/Techdays-2012-的-荷兰/ 2270
总之,我们不会使用FILESTREAM,因为它可以适应投资的巨大热潮.
编辑2:
更新到#1 - 除了FILESTREAM之外,我们仔细评估了FileTable,我们获得了一个成功的组合.我们确实必须将文件移到新服务器上(因为它们位于同一个VM上并不痛苦).老实说,我花了更多时间编写一个提取工具,将SQL中的二进制数据转储到文件系统中.
更新到#2 - 这是独立的,但鲍勃再次有一个很好的网络研讨会解释这个:http://channel9.msdn.com/Events/TechEd/Europe/2012/DBI411
更新到#3 - 使用TFT继承我们回收了我们拥有的Docs表(减去巨大的二进制blob),这对我们的遗留应用程序只需要很少的更改.这对开发团队来说是一个巨大的结果.
如果我在SQL Server 2012中创建一个FileTable,然后将一个4G文件放到NT文件系统(即文件流中),那么将整个4G文件读入表的文件流列吗?
SQL实际上是在制作我的4G文件的COPY吗?或者文件流列是否代表我的4G文件的指针,它开始在查询中读取?
我只想弄清楚我是否将100G数据添加到我的文件系统中,是否会为我的数据库添加100G的数据大小.
有人可以帮助解释这是如何工作的吗 甚至更好地指向一些比MS/MSDN"如何做"更详细的文档?
编辑:有趣的是 - 如果我在FT目录中删除1G文件,然后选择file_stream列包含该文件的所有数据(我认为).但是,如果我sp_spaceused FileTableTb在放入该文件之前和之后进行操作,则表格大小不会改变.也许这就是选择打开文件流并将其读入的证据,但除此之外数据不存储在表中?
我正在尝试将文件从桌面拖放到用于文件流文件的本地MSSQLSERVER共享文件夹/目录.每次我这样做,我都会收到以下Windows错误 - "您需要获得执行此操作的权限."
我觉得我已经尝试过一切可以解决这个问题,从将用户和组添加到共享的权限列表(并授予完全访问权限) - 一直到调整SQL Server中的权限设置(对于数据库和单个文件表) ).
我的本地MSSQLServer服务作为网络帐户登录,我正在尝试使用我的Windows身份验证帐户进行拖放.我已经尝试修改服务,所以它由Windows身份验证帐户登录,重新启动,但仍然没有运气.
有什么想法吗?
谢谢
有没有办法在不使用文件I/O API的情况下在FileTable中创建目录?它是否像创建SQL INSERT语句一样简单?
这是我第一次使用SQL Server 2012,我不熟悉FileTableSQL Server中的限制.
我准备在 SQL Server 2012 中使用 FileTable 功能,但我不清楚备份如何与此功能配合使用:
1) 完整数据库备份是否包括 FileTable 文件?
2) 例如,我将如何执行单个文件的还原?
我有一个ASP.NET网站.我想将文件上传到网站并将其保存到SqlServer 2012中的FileTable中.
上传后,我的网站代码有一个Stream对象,我想用它来保存
System.IO.File.Create()
Run Code Online (Sandbox Code Playgroud)
我去的时候可以在Windows资源管理器中访问FileTable
\\ComputerName\FileStremShareName\FileStreamDirectoryName\FileTableName
Run Code Online (Sandbox Code Playgroud)
我可以使用Windows资源管理器在此文件夹中手动创建文件.我也可以使用SQL将文件插入到File表中.在这两种情况下,Windows资源管理器和SQL Server都按预期显示文件.
但是,如果我尝试使用System.IO.File.CreateFile在路径中创建文件,例如
File.Create(\\\\ComputerName\FileStremShareName\FileStreamDirectoryName\FileTableName\myfile.jpg)
Run Code Online (Sandbox Code Playgroud)
我收到消息"访问路径'[路径]'被拒绝"
我认为这是因为我的IIS应用程序池标识无权读取/写入此位置.
通常,我会进入NTFS权限并分配对身份帐户的读/写访问权限,但我无法执行此操作,因为基础文件夹对我来说是隐藏的.
我曾考虑我的Stream对象转换成字节数组,并使用SQL将其插入的FileTable但这似乎效率不高,因为我要流先转换成字节数组为它随后被传递到SQL.这似乎是我解析我的文件数据两次以保存它一次.
是否可以使用File.Create或类似的内容在ASP.NET网站中写入文件表.如果是这样,我该怎么做?
我想在 SQL Server Management Studio 中的 SQL Server Express 上创建数据库,当我执行命令时,出现此错误:
消息 5133,级别 16,状态 1,第 1
行 文件“C:\Users\godorojaalexandru\WebApiFileTable\AspNetCoreFileUploadFileTable2\FTDB.mdf”的目录查找失败,操作系统错误 5(访问被拒绝。)。消息 1802,级别 16,状态 1,第 1 行
创建数据库失败。无法创建列出的某些文件名。检查相关错误。
这是我被指示创建的查询:
CREATE DATABASE AspNetCoreFileUploadFileTable2
ON PRIMARY
(Name = AspNetCoreFileUploadFileTable2,
FILENAME = 'C:\Users\godorojaalexandru\WebApiFileTable\AspNetCoreFileUploadFileTable2\FTDB.mdf'),
FILEGROUP FTFG CONTAINS FILESTREAM
(NAME = AspNetCoreFileUploadFileTableFS2,
FILENAME='C:\Users\godorojaalexandru\WebApiFileTable\AspNetCoreFileUploadFileTable2\FS')
LOG ON
(Name = AspNetCoreFileUploadFileTableLog2,
FILENAME = 'C:\Users\godorojaalexandru\WebApiFileTable\AspNetCoreFileUploadFileTable2\FTDBLog.ldf')
WITH FILESTREAM (NON_TRANSACTED_ACCESS = FULL,
DIRECTORY_NAME = N'AspNetCoreFileUploadFileTable2');
GO
Run Code Online (Sandbox Code Playgroud)
我进入目录的属性并观察到服务器和系统的访问权限都设置为完全访问权限,所以我不明白为什么它说访问被拒绝。
我正在遵循一个教程,它只是说在创建目录( )后运行上面的命令WebApiFileTable。在运行此命令之前我是否必须自己创建文件(FTDB.mdf、 FS 、FTDBLog.ldf),如果是这样,我该怎么做?
非常感谢你。
linux/Ubuntu OS是否创建了一个表,它保存每个文件的条目及其存储在硬盘上的绝对地址?
只是好奇才知道,因为我打算制作一个文件搜索程序.
我知道有像find等终端命令,但是我会在CI中编程想是否有任何这样的东西Ubuntu操作系统,如果是这样,我怎么能访问该表?
更新:
正如有些人提到没有这样的东西,那么如果我想创建一个文件搜索程序,我将不得不搜索每个目录的每个文件夹,启动程序根目录.由此产生的计划将非常缓慢,并将表现不佳!那么还有更好的方法吗?或者我的方式很好!
我FileTable先在项目中使用SQL Server 2014和EF代码。
当我使用此命令时
USE [master]
GO
ALTER DATABASE [OnlineStore]
SET FILESTREAM( DIRECTORY_NAME = N'OnlineStore',
NON_TRANSACTED_ACCESS = FULL) WITH NO_WAIT
GO
Run Code Online (Sandbox Code Playgroud)
它在sql中显示此警告
当FILESTREAM数据库选项NON_TRANSACTED_ACCESS设置为FULL且READ_COMMITTED_SNAPSHOT或ALLOW_SNAPSHOT_ISOLATION选项处于启用状态时,T-SQL和FILETABLE上下文中对FILESTREAM数据的事务性读取访问将被阻止。
现在我继续创建表,并插入文件夹和文件没问题。
我读取数据的问题,当读取数据时显示此错误:
消息33447,级别16,状态1,第2行
无法访问FileTable'File'中的file_stream列,因为FileTable不支持行版本控制。可以将事务级别设置为“ READ COMMITTED SNAPSHOT”或“ SNAPSHOT”以外的值,或者使用READCOMMITTEDLOCK表提示。
我先使用EF代码-如何解决此问题?
SQL Server Express是否支持文件表?如果没有,SQL Server Express中最接近文件表的方法是什么?
filetable ×10
filestream ×4
sql ×4
sql-server ×2
asp.net ×1
asp.net-mvc ×1
backup ×1
c# ×1
c++ ×1
linux ×1
restore ×1
t-sql ×1
ubuntu ×1