Sql server 用于存储大量图像的SQL Server表结构

Sql server 用于存储大量图像的SQL Server表结构,sql-server,large-data-volumes,Sql Server,Large Data Volumes,在SQL Server 2008中存储大量图像数据的最佳做法是什么?我预计将使用大约5 Gig的存储空间存储大约50000张图像。目前,我使用一个带有列的表来执行此操作: ID: int/PK/identity Picture: Image Thumbnail: Image UploadDate: DateTime 我很担心,因为在我预期总容量的10%左右,插入似乎需要很长时间。典型的图像大约是20k-30k。是否有更好的逻辑结构来存储此数据?或者我需要研究集群或其他IT解决方案来适应数据负载

在SQL Server 2008中存储大量图像数据的最佳做法是什么?我预计将使用大约5 Gig的存储空间存储大约50000张图像。目前,我使用一个带有列的表来执行此操作:

ID: int/PK/identity
Picture: Image
Thumbnail: Image
UploadDate: DateTime
我很担心,因为在我预期总容量的10%左右,插入似乎需要很长时间。典型的图像大约是20k-30k。是否有更好的逻辑结构来存储此数据?或者我需要研究集群或其他IT解决方案来适应数据负载吗?

到DB还是不到DB,这就是问题所在

你正在用DB中的图像发动一场宗教战争

对于SQL 2000的意见可能有分歧,但2005年及以上版本在存储Blob方面做得相当不错——只要看看使用MS SQL Server作为存储的SharePoint安装数量就知道了。我只会选择这条路线来存储次要的图像

如果您最终将它们放入数据库,我会说您应该将图像与相关数据分离,以便于查询和减少IO以及开发人员编写
SELECT*
时的实例(是的,他们会这样做)

查看SQL 2008中的FILESTREAM-它适用于类似的情况

以下是您可能需要考虑的关于DB与文件系统的其他一些要点:

  • 数据库存储、备份、恢复和维护许可费用高昂
  • 数据库中的存储比磁盘上的存储更硬
  • 磁盘可以加速
  • 您需要编写代码以DB格式获取/设置图像-磁盘不需要

查看SQL Server 2008中的新功能。本质上,它允许您在数据库中存储blob(read:image)数据,而无需在每次读写时将数据读入sql缓冲区。它无缝地使用文件系统来存储大文件,而不是sql页面。这可以大大加快较大文件的读写时间,而且最重要的是,由于这一切都是在后台进行的,因此不需要更改任何现有的存储过程来处理filestream列。有关代码示例和一些性能评测,请参阅。

Image
是SQL Server 2008中不推荐使用的数据类型。自SQL Server 2005以来,它已被替换为
VARBINARY(MAX)
。如果您决定将图像存储在DB中,那么您应该使用<代码> VARDION(MAX)字段,并考虑添加<代码> FielestRAM< <代码>选项> < /P> 对于像图像这样的流式数据,
FILESTREAM
比单独使用
VARBINARY(MAX)
要快得多,根据:


(来源:)


请注意,要实现这种流式传输性能,您必须在设计中使用适当的API,并获得正确的API。请注意,
FILESTREAM
列(包括
INSERTS
)的更新速度将慢于
VARBINARY(MAX)

为什么要将图像存储在数据库中,而不是只存储每个图像的路径?文件系统可以很好地处理文件。@dnagirl-好奇的是,如何保持文件和元数据记录的同步?如果图像经常更改(使用版本控制进行照片编辑),我可以想象恢复数据库和文件备份会导致孤立数据?典型大小为20-30K,您可以完全将其存储在表中,没有问题。但是请使用VARBINARY(MAX)而不是不推荐使用的“IMAGE”类型!如何在数据库和文件之间同步备份还原?这对于管理经常更改并且需要版本控制的图像的应用程序来说是困难的。似乎文件和元数据记录将被关闭。我更喜欢基于插入的模型而不是基于更新的模型。因此,如果用户有一个新图像,我不会覆盖该记录,我会选择添加一个新行,并用“不使用”标志标记旧行。我将把写入文件和数据库作为一个事务处理——它们总是在某个时间点同步。