Sql server 在WCF中使用图像

Sql server 在WCF中使用图像,sql-server,wcf,image,filesystems,Sql Server,Wcf,Image,Filesystems,我有一个桌面应用程序,需要通过TCP协议向服务计算机上传/下载图像 起初,我将图像存储在文件系统中,但我需要在MS SQL DB中比较哪个解决方案更好。图像数量超过50万张。我还不知道照片的大小是否有任何限制 如果你曾经这样做过,请写下你对这个问题的看法 哪一个更快更安全?这些照片中哪一张效果更好?如果我要存储在DB上,我是否需要将图像与我用于我的应用程序的所有其他表分开存储?哪种类型工作得更好?image或varbinary on DB?等等 谢谢。哪个版本的SQL server?2008版增

我有一个桌面应用程序,需要通过TCP协议向服务计算机上传/下载图像

起初,我将图像存储在文件系统中,但我需要在MS SQL DB中比较哪个解决方案更好。图像数量超过50万张。我还不知道照片的大小是否有任何限制

如果你曾经这样做过,请写下你对这个问题的看法

哪一个更快更安全?这些照片中哪一张效果更好?如果我要存储在DB上,我是否需要将图像与我用于我的应用程序的所有其他表分开存储?哪种类型工作得更好?image或varbinary on DB?等等


谢谢。

哪个版本的SQL server?2008版增加了专门为此目的而设计的。FILESTREAM数据可以位于磁盘上,这使得访问速度非常快

如果这不是一个选项,您可以考虑为您的图像数据创建一个单独的文件组(以便在对数据进行分区时提供最大的灵活性),并使用varbinary(max)或image数据类型


SQL专家可能会提供更好的信息。

微软研究院有一篇非常好的论文,名为

经过大量性能测试和分析,他们得出的结论如下:

  • 如果图片或文档的大小通常低于256K,则将其存储在数据库VARBINARY列中更有效

  • 如果图片或文档的大小通常超过1MB,则将其存储在文件系统中会更高效(使用SQL Server 2008的FILESTREAM属性,它们仍然处于事务控制之下,并且是数据库的一部分)

  • 在这两者之间,这取决于你的使用情况

如果您决定将图片放入SQL Server表中,我强烈建议您使用单独的表来存储这些图片-不要将employee foto存储在employee表中-将它们保存在单独的表中。这样,Employee表可以保持精简、平均和非常高效,前提是您不需要在查询中也选择Employee foto

对于文件组,请查看介绍。基本上,您可以从一开始就为大型数据结构使用单独的文件组创建数据库,或者稍后添加一个额外的文件组。我们称之为“大数据”

现在,每当要创建需要存储VARCHAR(MAX)或VARBINARY(MAX)列的新表时,都可以为大数据指定此文件组:

 CREATE TABLE dbo.YourTable
     (....... define the fields here ......)
     ON Data                   -- the basic "Data" filegroup for the regular data
     TEXTIMAGE_ON LARGE_DATA   -- the filegroup for large chunks of data

查看文件组上的MSDN简介,并使用它

你回答错了。但是为了回答您的问题,您可以在同一个数据库中创建一个单独的表,但使用不同的文件组,这意味着数据物理上存储在一个单独的文件中。应该与单独的数据库具有相同的好处,但更易于使用。@ArsenMkrt我已经读过,但我有一个问题,如果我将路径存储在数据库中,将文件存储在文件系统中,我们如何知道如果该表中有一行,您总能找到引用的文件?谢谢你的例子。对不起,我是新来的,我现在明白了:)我想我必须尝试使用filestream。现在服务器是2005年,但我们正在测试2008年的新应用程序,所以稍后我们将转到SQLServer2008。嗯…有趣的是,我不知道,你可以在db中使用单独的文件组?我该怎么做?@marc_谢谢你的文章。我想照片应该在256Kb到1Mb之间。我在单独的表上测试,但我也想知道,也许我需要一个单独的db(不仅仅是表)?@hgulyan:不,单独的db不会有多大帮助。首先尝试使用单独的表,然后可能使用单独的文件组(以及磁盘上的文件)。我不认为把这些图片放在一个单独的数据库中有任何好处。@marc_s:好的,我只是认为使用单独的数据库进行备份可能会更好,我已经读到存储大量数据可能会导致整个sql server工作更慢。是这样吗?您能否提供有关如何在sql server中使用文件组的任何信息?:)@hgulyan:是的,在同一张表中混合“常规”数据和大斑点可能会造成伤害,因为当你在表上进行“选择*”时,你总是会得到所有数据,包括图片。若你们把它放在一个单独的表中,你们就不会有这些问题了。那个么这个单独的表中的大量数据不会影响整个数据库的性能?谢谢你详细的回答。这真的帮了我很大的忙。是时候试试了。