数据库与文件系统中的图像

Jes*_*sse 39 sql database asp.net sql-server-2005 document-storage

我们正在开展一个项目,我们将构建一个完整的后端CMS系统,该系统将通过一个软件包为整个外联网和内部网提供支持.我一直在试图寻找一个答案是哪一个更好的问题:存储数据库(SQL Server 2005中),所以我们可以有诚信,单个复制计划等或存放在文件系统上的图像?

我们遇到的一个问题是我们有多个服务器负载均衡,需要始终拥有相同的数据.截至目前,我们有SQL复制处理,但文件复制似乎有点困难.我们关注的另一个问题是我们希望拥有相同图像的多个分辨率,我们不确定在文件系统上创建和存储每个版本是最好的还是可以动态地拉动并创建我们想要的分辨率图像.

我们关注的是以下内容:

  • 数据的完整性
  • 数据复制
  • 多种分辨率
  • 数据库与文件系统的速度
  • 数据库与文件系统的负载
  • 数据管理和备份

有没有人有类似的情况或对推荐的内容有任何意见?在此先感谢您的帮助!

mar*_*c_s 57

微软研究院发布了一篇很好的研究论文,名为To Blob,或者不是Blob,他们研究了各种变量和影响.

他们最终的发现:

  • 大小高达256 KB,blob比文件系统更有效地存储在数据库中
  • 对于1 MB或更大,文件系统更有效
  • 在它之间是一个折腾

自该论文发表以来,SQL Server 2008还添加了FILESTREAM属性,该属性使得在文件系统中存储东西,但在事务控制下,这是一个现实.强烈建议你检查一下!

  • +1为优秀的来源和有效的总结. (9认同)

Ode*_*ded 6

这个问题经常出现 - 请参阅 SO搜索结果.

没有一个正确的答案 - 这取决于具体情况.

个人 - 保留数据库中的文件路径和文件系统上的文件.每个人都有自己的优势.您可以备份文件和数据库.这也是这个管理数据TB的的结论.

  • 只需确保您使用文件系统,还要存储校验和,以检测对文件的篡改. (3认同)

chr*_*ris 5

静态文件的复制可能难以管理,特别是在许多服务器上.它实际上归结为管理,监视和调试复制问题与数据库大小和负载之间的权衡.

我想我可能会选择数据库方法,如果加载成为问题,请考虑在图像调用周围设置某种缓存层.

在数据库中存储路径的建议缺少真正的问题,即在多台计算机上复制此问题.


Kyl*_*ndo 2

好吧,如果您最重要的两个需求是完整性和复制,那么答案肯定是数据库。

不过你还有其他观点:

  • 完整性 - DB,这就是数据库相对于平面文件系统存在的原因。

  • 复制 - 不确定您是否指的是图像复制,但如果是这样,那么显然是数据库,因为您肯定不会对其进行负载平衡。

  • 可以从数据库图像执行多种分辨率,但这会增加处理成本。另外,分辨率越高,尺寸越大,网络等待时间越长。多种分辨率以空间换取速度。

  • 速度 - 根据对图像的访问,它可能可以忽略不计。如果您要通过文件共享获取图像,则无论如何您都必须等待网络,而网络几乎始终是瓶颈。

  • 开销 - 坦率地说,这取决于您对开销的定义以及访问图像的方式。

  • 管理,数据库,轻而易举。单一存储 = 少了一份担心,并且在任何情况下您都应该始终在数据库上运行备份。多个服务器上的文件系统备份在很多方面都是昂贵的。