我知道这个问题之前已被多次询问,但我没有找到解决我具体案例的答案。
使用PHP&的MySQL ...
我即将添加用户个人资料图片到应用程序,因为我看到它有几个选项。其中两个如下:
1。不参考数据库中的图像并存储图像 像这样: -
/assets/avatars/32px/userid.jpg
/assets/avatars/90px/userid.jpg
这意味着没有额外的数据库查找,因为我已经拥有相关的用户ID。
1. 将相对路径存储在users_meta表中,并在检索用户数据时使用连接检索网址。
每种方法的专业人士的意见是什么?如果在您看来,这两种方法都不是最好的方法,那么您认为哪种方法是存储/引用和检索用户配置文件图片的最有效和可扩展的方式。
非常感谢
编辑:添加更多细节:
我对选项1的担心是我不确定文件系统如何处理单个目录中的100万个+文件。它会慢慢爬行吗?如果是这样我怎么能解决这个问题?是否有可以消除这一潜在问题的结构?也许使用用户加入的时间作为网址的一部分并按月存储图像。
e.g。 /assets/avatars/10_2012/small/userid.jpg
10_2012表示2012年10月注册的所有用户。
或者在每个目录中只存储1000张图像,然后访问:
每次应用达到1000 * n个用户注册时添加新目录。
这会带来优势吗?
答案 0 :(得分:2)
您可以选择1,但可以使用部分ID来创建路径。例如,如果您有六位数的ID,则可以将前两位数作为路径的一部分:Id 123456.xyz将变为/1 / 2 / 123456.xyz。等等... 在此示例中,使用数字ID,它将限制每个目录包含1000个文件。
答案 1 :(得分:1)
我在我的应用程序中倾向于保存原始图像。
在查找时,生成缩略图(或任何大小的图像)并将其放入缓存目录中,或者如果图像已存在于缓存目录中,则将其返回给用户。
如果上传图片的人删除或更新原始图片,您也会将其从缓存中删除。
这样做是非常有用的,因为您不需要知道最初保存时图像将使用的每个尺寸。
答案 2 :(得分:1)
正如您所正确指出的那样 - 如果您根据需要使用文件系统,则无需执行额外数据库查找。这节省了您的时间和资源。
我可以看到使用数据库的唯一好处是“单点”备份。但我怀疑它是一个非常有效的“专业人士”,或者它是否甚至超过了由数据库查找引起的额外级别的间接引入的额外复杂性
编辑(以匹配问题中的编辑):文件系统的工作方式在很大程度上取决于操作系统。你的目标平台是什么?