作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个网站,该网站可能会发展到几千个用户,所有这些用户都会在服务器上上传最多十张图片。我想知道存储图片的最佳方式是什么。假设我有 5000 个用户,每个用户有 10 张图片,这给了我们 50000 张图片。 (我想将它们存储在 blob 的数据库中不是一个好主意;))
为每 100 个注册用户动态创建目录(总共 50 个目录,假设有 5000 个用户)并在那里上传他们的图片,这是一个好方法吗?命名约定“xxx_yy.jpg”(xxx 是用户 ID 和 yy 图片编号)可以吗?然而,在这种情况下,一个文件夹中有 1000 张 (100x10) 张图片,是不是太多了?
最佳答案
我很可能通过图像内容的哈希值来存储图像。例如,128 位 SHA。因此,我将用户上传的图像“foo.jpg”重命名为其 128 位 sha(可能以 64 为基数,用于统一的 16 字符名称),然后将文件的用户名及其 SHA 存储在数据库中。我可能还会添加引用计数。然后,如果有些人都上传相同的图像,它只会存储一次,当所有引用消失时,您可以将其删除。
对于实际的物理存储,现在您已经有了保证的统一命名方案,您可以将文件系统用作平衡树。您可以决定目录中最多需要多少个文件,并让平衡器移动文件来维护它,或者您可以想象完全填充的树是什么样子,并以这种方式存储文件。
此方案的唯一真正缺点是它将文件名与内容分离,因此数据库丢失可能意味着不知道任何文件的名称,但无论如何您都应该小心备份此类信息。
关于storage - 在服务器上组织数千张图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2336862/
我是一名优秀的程序员,十分优秀!