2010-05-17 60 views
3

我想存储与他们的个人资料的细节我的员工的图像SQL在SQL Server数据库中,但我有下列保留:在SQL Server中存储的图像使用C#

我应该压缩的图像或没有,如果是,请社区为我提供示例代码,或者直接给我一个指导,以帮助我解决这个问题。

我应该如何有效地检索图像?我担心asp.net应用程序性能问题。我认为,拥有数以千计的员工记录,系统可能会停止或放慢速度。

回答

0

大多数图像格式(如JPEG或PNG)已经采用了一些压缩算法,所以除非您的源是RAW图像或未压缩的位图,否则额外的压缩功能将无济于事。可能有帮助的是限制图像的大小,例如最大400 x 400像素。我不知道预期目的是什么,所以我不知道这是否适合你。显然,如果您直接从数码相机存储数据,图像将会非常大,您可能需要首先将其缩小到更合理的位置。

+0

如何限制我的尺寸图像在用户端 – barq 2010-05-17 15:31:36

+0

@barq:你必须编写代码为。 – FrustratedWithFormsDesigner 2010-05-17 15:39:51

1

SQL Server正在装备精良,以处理大量的二进制数据,但一如既往,魔鬼在细节和设计:

为了避免可能与其他应用程序的报告或访问发生的任何性能问题由于Sql Server的分页过程(所有数据库引擎都使用页面作为数据操作的独立单元),因此我会将图像数据放置在一个单独的表中,该表与您的员工表进行1对1链接。这样做可以防止从系统的其他部分进行访问时不必要地使用员工查询来移动二进制数据。您的图像显示逻辑当然必须加入这两张表格才能匹配员工和图像记录。

+0

这是不好的建议。 SQL Server已经将BLOB分离到各自的分配单元中用于存储(单独的B-Tree),请参阅http://msdn.microsoft.com/en-us/library/ms189051.aspx。 – 2010-05-17 15:46:56

+0

不好的建议可能取决于所使用的sql server的版本。该链接是一个sql 2008文章。而且,这种类型的组织并不是必需的。为什么dba可能想要以这种方式拆分表格可能有很多原因。 – 2010-05-17 16:46:53

2

我会建议在你的sql表中存储图像的路径,并实际上将图像存储在一个安全的文件夹中。这对我来说非常合适。

+0

但是当我需要取回我的数据库?那么和secobdly病毒可能会损坏我的图像文件夹 – barq 2010-05-17 15:27:54

+0

只是压缩图像文件夹,并将其存储在您的数据库备份相同的媒体。您也可以将图像存储在SQL数据库之外的同一个db服务器驱动器上。如果你的图像与你的数据库在同一台机器上,我怀疑是否有病毒能够进入(假设有正常的安全进程) – user279521 2010-05-17 15:45:15

1

第一件事,一万条记录不算什么......只要你有正确的索引就可以了,SQL Server会轻松处理。

但是,可以考虑使用文件系统来存储图像等内容。 SQL Server记录可能只包含一个指向该文件的指针(即路径),并且asp.net应用程序可以使用该指针从磁盘读取文件并将其传输到浏览器。

+0

但是当我需要恢复数据库时?那么和secobdly病毒可能会损坏我的图像文件夹 – barq 2010-05-17 15:28:24

+0

@ barq:确实,图像不是数据库备份的一部分。有时这是一件好事,有时这是一件坏事。 – FrustratedWithFormsDesigner 2010-05-17 15:31:31

0

如果您使用的是SQL Server 2008或更高版本,那么您可以使用文件流功能,这是两全其美的。它将图像存储在文件系统中,但将其保存在事务控制下,并在备份时也包含在备份中。

如果你不在2008或以上,那么我会说图像保存在数据库中,请参阅这篇旧的微软白皮书,原因是我的原因。

http://arxiv.org/pdf/cs.DB/0701168