Как лучше всего регистрировать ежемесячные загрузки пользователей в наше веб-приложение? - PullRequest
0 голосов
/ 26 апреля 2010

Наше веб-приложение позволяет пользователям загружать фотографии, оно использует сценарий PHP на сервере LAMP, работающем в Amazon EC2, для обработки загрузки изображений, Amazon S3 для хранения файлов и базу данных MySQL для записи данных об изображении (идентификатор пользователя, имя файла, теги и т. д.).

Я намереваюсь иметь в базе данных таблицу image_uploads со столбцом для каждого месяца и строкой для каждого пользователя. Таким образом, я могу отслеживать тенденции в загрузках. Также может быть загружено видео, поэтому у меня также будет таблица video_uploads. Кроме того, пользователи могут принадлежать к нескольким группам, и я хочу отслеживать ежемесячную загрузку по группам, поэтому, вероятно, будет также таблица group_uploads. Это означает, что для каждого загруженного файла будет 2 запроса на обновление sql - update image_uploads и update group_uploads.

  1. $ filesize = $ _FILES ['Filedata'] ['size'];
  2. ОБНОВЛЕНИЕ image_uploads SET data_in_bytes = (data_in_bytes + $ filesize), ГДЕ месяц = ​​$ current_month ... (например - я знаю, что это неверный sql)

В качестве альтернативы может быть длинная таблица, в которой записываются данные о каждой загрузке (дата, пользователь, размер, носитель). Таким образом, я всегда могу запросить в базе данных необходимую информацию - например, ежемесячные загрузки на пользователя = сумма data_in_bytes, ГДЕ пользователь = ## и месяц = ​​currentMonth

Каковы лучшие практики для такого рода задач?

привет

Ответы [ 2 ]

1 голос
/ 26 апреля 2010

Могу я спросить, зачем вам отдельная таблица group_uploads?

Почему бы не иметь таблицу с такой схемой: закачки (user_id, group_id, имя файла, тип, размер, дата). Где «group_id» может быть NULL, если пользователю разрешено загружать файлы для себя (не связанного с группой), а «type» будет «video» или «image» Этот подход кажется более гибким в случае, если вы хотите добавить другие типы файлов (документы, mp3 и т. Д.).

При использовании этой схемы запросы к различным фильтрам (фильтр по пользователю, пользователю, а не группе, пользователю и группе по типу, по дате) должны быть проще.

Надеюсь, это поможет.

1 голос
/ 26 апреля 2010

Я бы сохранил основную таблицу журнала со всеми загрузками, а затем запросил бы у таблицы нужные вам даты:

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