4

假设:Microsoft 堆栈(ASP.NET;SQL Server)。

一些内容管理系统通过将用户生成的内容(图像、文件附件)存储在文件系统中来处理它。其他人将这些项目存储在后端数据库中。

两者的一些例子:

  • 在文件系统中:社区服务器、Graffiti CMS
  • 在数据库中:Microsoft Sharepoint

我可以看到每种方法的优缺点。

在文件系统中

  • 轻的
  • 避免膨胀数据库
  • 备份和恢复可能更简单

在数据库中

  • 所有内容都集中在一个存储库(数据库)中
  • 完全分离关注点(内容与格式)
  • 更容易部署网站(例如直接从 Subversion 存储库)

什么是最好的方法,为什么?将用户文件保存在数据库中的优点和缺点是什么?还有另一种方法吗?

我提出这个问题 Community Wiki 因为它有点主观。

4

4 回答 4

1

如果您使用的是 SQL Server 2008 或更高版本,则可以使用 FileStream 功能获得两全其美的效果。也就是说,您可以从数据库访问文档(用于查询等),但仍然可以通过文件系统访问文件(使用 SMB)。更多细节在这里。

埃里克

于 2010-10-22T18:59:03.947 回答
0

实际上它的门#3 Chuck。

我认为将图像存储在数据库中是个坏消息,除非您需要将它们保密,否则,只需将它们放在 CDN 上并存储图像的 URL。我已经为电子商务建立了一些巨大的网站,并将负载放在像 Akumai 或 Amazon Cloudfront 这样的 CDN 上是显着加快网站速度的好方法。我不喜欢消耗带宽、CPU 和内存来提供图像。由于 CDN 如此便宜,现在似乎是一种愚蠢的资源浪费。此外,它确实允许部署不在乎,因为您的东西已经在全球可访问的区域中。您可以查看我的个人资料,了解我做过的网站,并了解他们如何使用 CDN 卸载静态请求。如果您可以 gzip 压缩它,这才有意义并且会变得更好。

于 2011-12-13T08:02:23.100 回答
0

我选择文件系统是因为它使在原地编辑文档变得更容易,也就是说,当用户编辑文件或文档时,它可以保存在加载它的位置,而无需程序或用户干预。

于 2010-10-08T18:49:59.400 回答
0

IMO,就目前数据库中可用的功能而言,文件系统是更好的选择。

  1. 文件系统对文件的大小没有限制,并且内容很容易成为大于 2 GB 的文件。
  2. 它使数据库大小更小,这意味着内存压力更小。
  3. 您可以将系统设计为使用 UNC 和 NAS 甚至是云存储,而您无法使用 FILESTREAM 做到这一点。

使用文件系统的最大缺点是可能会孤立文件并使文件上的数据库信息与磁盘上的实际文件保持同步。诚然,这是一个大问题,但在像 FILESTREAM 这样的解决方案更加灵活之前,这是您必须付出的代价。

于 2010-10-08T18:56:43.283 回答