【问题标题】:Refering to user uploaded files - DB or file name?参考用户上传的文件 - 数据库或文件名?
【发布时间】:2014-11-10 11:56:36
【问题描述】:

我有一个简单的用户评论系统。这些可以带有图像。目前我将用户上传的图像存储在一个文件夹中。我不会为图像向数据库写入任何内容,很简单,我用评论 ID 命名图像文件(每个评论只允许一张图像)并将它们全部存储在一个文件夹中:

move_uploaded_file($upload_pic,'images/'.mysql_insert_id().'.jpg');
//please note I am also upgrading to mysqli

然后在从数据库中检索评论数据时,我正在使用 file_exists() 检查并可能显示带有评论的完整图像。

if (file_exists('images/'.$fid.'.jpg')) echo '<img width="576" src="images/'.$fid.'.jpg">';

现在我想对其进行更改,以便能够在每个帖子中存储和显示更多图像(仍然限制为 4 个),并且还具有缩略图。

问题来了

对于这样简单的系统,将所有文件引用存储在数据库中的单独表中或增强与评论ID相关的文件命名是否更快?

  1. 如果数据库 - 如何命名文件? using uniqid ?简单映射表 id,imgname。
  2. 如果文件命名我在想XXXXXX-Y.jpg 并使用glob("images/".round(XXXXXX/1000)."/XXXXXX-*.jpg") 检索,一个文件夹中最多有1000 个文件。 (目前在过去 10 年的 10.5 万条帖子中有 6.5 万张图片)

对我来说,文件命名似乎更简单,因为我不需要存储与图像相关的任何其他信息,但另一方面似乎大多数人使用数据库。并希望专注于表现更好的方式。

【问题讨论】:

    标签: php mysql file-upload


    【解决方案1】:

    根据我在房地产网站上工作的经验,检查文件是否存在非常昂贵。

    因此,如果您在数据库中有一个包含文件名的表,则显示速度会更快。您不会每次都明确检查所有四个文件的 file_exists,您将只显示图像标签的次数与 db 中该评论的图像一样多。就像如果您有 1 张图片作为评论,则无需检查其他 3 张图片,您只从 db 中找到 1 张,因此您只需立即显示它。

    对于命名,请保持简单,如下所示:

    3673-1-originalfilename.jpg 
    3673-2-originalfilename.jpg
    3673-3-originalfilename.jpg 
    

    遵循以下模式

    "commentid"-"count"-"original-filename"."extension"
    

    不用说,如果您还必须喜欢缩略图文件名或文件大小等,您可以在数据库中存储更多关于图像的数据,并且您可以根据需要存储任意数量的图像以进行评论。

    希望这会有所帮助!

    【讨论】:

    • 谢谢拉希德,我认为这是有道理的。我不喜欢将图像存储在数据库中的想法,但我将专注于映射表。你认为我应该把文件分成更多的文件夹吗,因为现在我在一个文件夹中有大约 6500 个文件。
    • 一旦文件存在就不再查找,文件夹中文件的数量对性能的影响要小得多。可能您不再需要将它们拆分到文件夹中。
    • @John 就像 Lorenz 所说,它不会对性能产生任何实质性影响,但如果它对您自己的管理有所帮助,那么制作文件夹是一个好主意。 (但您需要知道图像所在的文件夹)
    • 非常感谢各位cmets,我暂时将所有图片保存在一个文件夹中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2018-09-16
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    相关资源
    最近更新 更多