我正在设计一个拥有大约1000万+用户的系统,每个用户都有一张约1~2 MB的照片。 我们将使用Microsoft Azure部署数据库和Web应用程序 我想知道我应该存储照片的方式,目前有两种选择,
我没有使用FileStream体验过如此大规模的BLOB数据。
任何人都可以提出我的建议吗?缺点和优点? 任何拥有Microsoft Azure体验的大型照片商店都非常感谢!
THX 莱恩。
答案 0 :(得分:5)
我既不投票也不投票。使用Windows Azure Blob存储。简单的REST API,0.15美元/ GB /月。你甚至可以直接从那里提供图像,如果你公开它们(比如< img src =“http://myaccount.blob.core.windows.net/container/image.jpg”/>),这意味着你不必通过您的网络应用程序汇集它们。
答案 1 :(得分:4)
对于任何大规模的二进制存储需求,数据库几乎总是一个可怕的选择。数据库最适用于仅关系系统,而是在数据库中为实际存储位置提供引用。您应该考虑以下几个因素:
换句话说,没有理由不使用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的好政策