使用Sql Server FileStream还是传统的文件服务器?

时间:2010-12-27 02:20:46

标签: azure filestream

我正在设计一个拥有大约1000万+用户的系统,每个用户都有一张约1~2 MB的照片。 我们将使用Microsoft Azure部署数据库和Web应用程序 我想知道我应该存储照片的方式,目前有两种选择,

1,存储所有照片使用Sql Server FileStream

2,使用文件服务器

我没有使用FileStream体验过如此大规模的BLOB数据。

任何人都可以提出我的建议吗?缺点和优点? 任何拥有Microsoft Azure体验的大型照片商店都非常感谢!

THX 莱恩。

5 个答案:

答案 0 :(得分:5)

我既不投票也不投票。使用Windows Azure Blob存储。简单的REST API,0.15美元/ GB /月。你甚至可以直接从那里提供图像,如果你公开它们(比如< img src =“http://myaccount.blob.core.windows.net/container/image.jpg”/>),这意味着你不必通过您的网络应用程序汇集它们。

答案 1 :(得分:4)

对于任何大规模的二进制存储需求,数据库几乎总是一个可怕的选择。数据库最适用于仅关系系统,而是在数据库中为实际存储位置提供引用。您应该考虑以下几个因素:

  • 成本 - SQL Azure每GB存储成本相当高,而且存储空间有限(每个数据库50GB),这两者都使其成为二进制数据的不良选择。 Windows Azure Blob存储对于提供二进制对象要便宜得多(虽然定价系统有点复杂,但每GB仍然便宜得多)。
  • 吞吐量 - SQL Azure具有相当好的吞吐量,因为它可以很好地扩展,但是,Windows Azure博客存储具有更大的吞吐量,因为它可以扩展到任意数量的节点。
  • 内容交付网络 - SQL Azure无法使用的功能(虽然可以创建复杂的自定义包装器),但可以在几分钟内轻松设置,以便捎带您的Windows Azure Blob存储,为您的终端提供无限的带宽-users,所以你永远不必担心你的二进制对象是你系统的瓶颈。 CDN成本与Blob存储的成本相似,但您可以在此处找到所有内容:http://www.microsoft.com/windowsazure/pricing/#windows

换句话说,没有理由不使用Blob存储。它易于使用,具有成本效益,可以满足任何需求。

答案 2 :(得分:1)

我无法谈论与Azure相关的任何内容,但就我的资金而言,使用FILESTREAM的最大好处是可以在正常的SQL Server备份过程中备份数据。您正在谈论的数据大小也表明FILESTREAM也是一个不错的选择。

我曾在一个带有RDBMS后端的SCM系统上工作,我们的一个重要决定是将文件增量存储在文件系统上还是存储在数据库本身内部。因为它是跨RDBMS我们不得不做一个通用的非FILESTREAM方式,但是做单次备份的能力让我们卖掉了。

答案 3 :(得分:1)

FILESTREAM是存储图像的可怕选择。我很惊讶MS曾经提升它。

我们目前正在将它用于我们网站上的图片。主要是用户生成的图像以及管理员创建的任何CMS相关内容。我开始之前决定使用FILESTREAM。最大的问题与提供图像有关。你最好坐在前面的CDN。如果没有,计划你的系统戛然而止。当然,大多数网站都有CDN,但您不希望受到该服务的影响,这意味着您的系统将会过载。施加在sql server上的压力是这里的主要问题。

在易用性方面。你的权衡是你的数据库更大,因此,备份需要更长的时间。可能更长,系统在备份期间运行速度较慢。更不用说,移动备份需要更长时间(即,在开发环境中或在本地机器上恢复prod数据以用于开发目的)。不要将此作为决定因素。

大多数云服务都会自动冗余存储在系统中的任何文件(即aws的S3和azure的blob)。如果您在本地进行,请确保使用图像的共享位置并确保备份该位置。我认为最好的选择是设置它,以便每个图像(其他UGC文件类型)在数据库中都有一个条目,其中包含该文件的路径。更进一步,将根路径分成配置设置,并仅将剩余路径与条目一起存储。例如,config中的根路径可能是基本URL,共享驱动器或虚拟目录,或空白条目。然后你的条目可能有" /files/images/image.jpg"。这样,如果移动文件存储,则只需更新根配置即可。我还建议创建一个FileStoreProvider接口(Singleton),可用于管理(保存,删除,更新)这些文件。这样,如果您在AWS,Azure或内部部署之间切换,则只需创建一个新的提供程序。

答案 4 :(得分:0)

我有一个客户端服务器数据库,我管理很多文件(doc,txt,pdf,...),所有文件都在文件流BLOB中。客户有50多MB MB。如果在azure你可以做同样的事情。在数据库中拥有所有内容是一件很棒的事情。它也被认为是Postgres和MySQL的好政策