c# - 仅根据用户名存储和检索大量头像?

标签 c# asp.net-mvc-4 architecture filesystems scalability

我想在文件系统中存储大量(数百万)用户头像。 但文件必须均匀分布在文件系统中,以便随着添加的文件数量的增加而良好地扩展。

头像的图像大小为 5-10KB。 该应用程序是 ASP.NET MVC (C#)

存储:

考虑以下唯一用户 ID:bob、mike、robert、johnson 头像名称将为 bob.jog、mike.jpg、robert.jpg、johnson.jpg

渲染头像的 HTML 元素:

<img class="avatar" src="www.xyz.com/getAvatar?user=bob" />
<img class="avatar" src="www.xyz.com/getAvatar?user=mike" />

这将转到 getAvatar Controller 操作,该操作将从物理位置获取头像并写入响应缓冲区

当前架构:

[HttpPost]        
public ActionResult SaveAvatar(HttpPostedFile avatarImage, string user)
{
   //get MD5 hash of user (bob=9F9D51BC70EF21CA5C14F307980A29D8)
   //split MD5 hash string to get the folders (\9F\9D\51\BC\)
   //save avatar at path <file_server>\images\9F\9D\51\BC\bob.jpg
}

[HttpGet]        
public ActionResult GetAvatar(string user)
{
   //get MD5 hash of user (bob=9F9D51BC70EF21CA5C14F307980A29D8)
   //find the file location from MD5 hash (9F\9D\51\BC\)
   //return <file_server>\images\9F\9D\51\BC\bob.jpg
}

我在这方面还差得远吗? 如果是,您将如何构建它?

我可以使用数据库中用户的用户 ID(自动生成为新的 UUID),但在这种情况下,我必须将用户 ID 存储在我拥有用户名的所有表中

感谢您的阅读

最佳答案

我还没有见过这种创建文件夹结构的方式,但是,我认为这很有趣。

假设您将拥有 100 万用户,那么,100 万用户 X 10kb 将接近 10GB,存储量并不算太多。

问题是,有多少用户会同时访问?如果数量很多,服务器传输这些文件的速度可能会变慢,因为服务器已经必须处理数百万次访问。

如果我必须为数百万用户做一个网站,我不会将头像和内容存储在我的应用程序服务器中,我会使用 CDN(内容分发网络)来存储图像,甚至使用专用服务器用于上传图像,例如 avatar.mydomain.com,因此我会通过 WCF 上传到此域。

关于c# - 仅根据用户名存储和检索大量头像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32788656/

相关文章:

architecture - 您现在正在做MDA(模型驱动的体系结构)吗?如果是这样,您将使用哪些工具,其工作方式如何?

c# - 使用 Rfc2898DeriveBytes 在 C# 中实现 PBKDF2

c# - WPF从数据网格中获取数据的东西存储过程

c# - 动态更改 Owin 配置值

architecture - 32 位与 64 位架构 - 虚拟地址空间

database - 优化查询与降低建模质量

java - C# 接口(interface)中的类型

c# - 在没有编码的 URI 模板中使用正斜杠 ('/' )

Javascript "Expect ;"int 上

c# - Windows 身份验证和身份为空的自定义授权属性