【发布时间】:2012-07-17 20:35:57
【问题描述】:
我知道这个问题以前被问过很多次,但我还没有找到适合我具体情况的答案。
使用 PHP 和 MySQL...
我即将将用户个人资料图片添加到应用程序中,并且我看到它有几个选项。其中两个如下:
1. 不引用数据库中的图像并存储图像 像这样:-
/assets/avatars/32px/userid.jpg
/assets/avatars/90px/userid.jpg
- /assets/avatars/256px/userid.jpg
这意味着不需要额外的数据库查找,因为我已经有了相关的用户 ID。
1. 将相对路径存储在 users_meta 表中,并在检索用户数据时使用连接检索 url。
每种方法的优缺点是什么?如果您认为这两种方法都不是最好的方法,您认为哪种方法是存储/引用和检索用户个人资料图片的最有效和可扩展的方法。
非常感谢
编辑:添加更多细节:
我对选项 1 的担忧是我不确定文件系统如何处理单个目录中的 100 万多个文件。它会慢到爬行吗?如果是这样,我该如何解决这个问题?有没有可以消除这个潜在问题的结构?也许使用用户加入的时间作为 url 的一部分并按月存储图像。
例如/assets/avatars/10_2012/small/userid.jpg
10_2012 表示所有在 2012 年 10 月注册的用户。
或者在每个目录中只存储 1000 张图像并像这样访问:
- /assets/avatars/0/small/userid.jpg
- /assets/avatars/1000/small/userid.jpg
- /assets/avatars/2000/small/userid.jpg
每当应用达到 1000 * n 个注册用户时添加一个新目录。
这会带来优势吗?
【问题讨论】:
-
为什么其他问题对你不起作用?
-
如果您不关心向公众公开图像路径,那么我会选择 NR.1 选项。如果您选择使用数据库选项。
-
我总是偏执于让外部查看者可以根据他们可以获得的信息请求任意个人资料图片。我会为图像名称分配一个随机数,或者使用密钥对其名称进行散列。
-
要么我误读了它们,要么它们倾向于处理将图像作为 BLOB 直接存储在数据库中或使用存储在数据库中的相对 url 引用之间的差异。此外,这需要支持大量用户,这肯定超过了您的平均用例。