【问题标题】:What is the best way record monthly user uploads to our web application?记录每月用户上传到我们的 Web 应用程序的最佳方式是什么?
【发布时间】:2010-04-26 15:57:19
【问题描述】:

我们的 Web 应用程序允许用户上传照片,它使用运行在 Amazon EC2 上的 LAMP 服务器上的 PHP 脚本来处理图像上传,使用 Amazon S3 来存储文件,并使用 MySQL 数据库来记录有关图像的数据(用户 ID、文件名、标签等)。

我打算在数据库中有一个 image_uploads 表,其中每个月有一个列,每个用户有一个行。这样我就可以跟踪上传的趋势。也可能有视频上传,所以我也会有一个 video_uploads 表。此外,用户可能属于多个组,我想跟踪每个组的每月上传量,因此可能还会有一个 group_uploads 表。这意味着对于每个上传的文件,都会有 2 个 sql 更新查询 - 更新 image_uploads 和更新 group_uploads。

  1. $filesize = $_FILES['Filedata']['size'];
  2. UPDATE image_uploads SET data_in_bytes = (data_in_bytes + $filesize) WHERE month = $current_month ...(例如 - 我知道这不是正确的 sql)

或者,可以有一个长表来记录每次上传的数据(日期、用户、大小、媒体)。这样我就可以随时在数据库中查询我想要的信息 - 例如,每个用户的每月上传 = data_in_bytes 的总和 WHERE user = ## and month = currentMonth

此类任务的最佳做法是什么?

问候

【问题讨论】:

    标签: php mysql database-design upload size


    【解决方案1】:

    我会保留一个包含所有上传内容的主日志表,然后在该表中查询您想要的日期:

    SELECT *
    FROM logs
    WHERE upload_date between to_date ('2003/01/01', 'yyyy/mm/dd')
    AND to_date ('2003/12/31', 'yyyy/mm/dd');
    

    【讨论】:

      【解决方案2】:

      请问您为什么需要一个单独的 group_uploads 表?

      为什么没有这样的表:uploads(user_id, group_id, filename, type, size, date)。如果允许用户为自己上传文件(不关联到组),“group_id”可以为 NULL,“type”可以是“video”或“image”。如果您想添加其他文件类型(文档、mp3 等),这种方法似乎更灵活一些。

      使用此架构,对各种过滤器的查询(按用户、用户而不是组、用户和组、按类型、按日期过滤)应该更简单。

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-06
        • 1970-01-01
        相关资源
        最近更新 更多