我想在文件系统中存储大量(数百万)用户头像。 但文件必须均匀分布在文件系统中,以便随着添加的文件数量的增加而良好地扩展。
头像的图像大小为 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/