Я работаю над проектом аукционного листинга. Часть этого проекта позволяет пользователям загружать фотографии предметов (иногда сотен предметов), которые они будут иметь для продажи в определенный день. Поэтому у меня есть несколько вопросов, которые все приводят к тому, как сделать это эффективно и эффективно разрешить легкое удаление после истечения срока.
1. Управление папками. Моя идея состоит в том, чтобы назначить каждой дате свою собственную папку в этой папке для каждого пользователя / списка на этот день, а сам список будет иметь свою собственную папку с уникальным идентификатором на случай, если у них будет несколько списков на одну и ту же дату. Таким образом, схема папки будет выглядеть так: Дата / пользователь / uniquefoldername / images.jpg Мысли? Есть ли лучший способ помнить, что я хочу иметь возможность легко удалить папку и ее содержимое после истечения срока?
2. Последствия. Вполне возможно, что у меня может быть до 1500 списков на любую данную дату, и если каждый пользователь добавляет 100 фотографий (наихудший сценарий), то есть 150 000 для любой данной даты или 4 500 000 в месяц (пользователям разрешено публиковать списки до за месяц вперед). Учитывая схему выше, что, если таковые имеются, будут последствия? Помимо большого количества святого дерьма, мне нужно больше места для хранения! (Мы будем решать проблемы с хранилищем по мере необходимости).
3. Хранение и извлечение. Моя мысль — сохранить только путь к папке с изображениями, а затем написать сценарий, чтобы получить их все для отображения в виде лайтбокса, как при настройке (например, Facebook). Мысли? Есть ли способ сделать это более эффективно?
4. Удаление. Моя мысль состоит в том, чтобы ежедневно выполнять cronjob, чтобы удалить все папки после того, как прошло не менее 24 часов с даты внесения в список, а затем обновить базу данных, чтобы отразить удаление папки, чтобы избежать попыток ppl просматривать изображения, которые были удалены. Можно ли это сделать эффективно? То есть я должен удалить их все за один раз или разбить и запускать ежечасно, чтобы избежать перегрузки сервера?
5. Есть ли лучший путь вокруг? В какой-то момент мы будем добавлять сервер изображений или исследовать другие возможности хранения, но до тех пор мне нужно делать это максимально эффективно, чтобы сохранить минимальную нагрузку на сервер с бэкэнда.
6. Учитывая масштаб обработки данных и процесс удаления, можно ли обойтись без ущерба для производительности сервера?
Немного предыстории: Мы смотрим примерно 400 000 просмотров страниц в день, то есть 12 миллионов просмотров страниц в месяц. Мы ожидаем, что более 10 тыс. Участников с возможностью размещения списков и более 100 тыс. Зарегистрированных пользователей (регистрация требуется только для просмотра определенных аспектов сайта) широкой публики и 12-15 миллионов уникальных посетителей в год. Каждый листинг, представленный публике, будет взаимодействовать с 4 таблицами в базе данных, как это теперь делается на бумаге, очевидно, что это может измениться, когда область применения станет более ясной. Ежедневно будет выполняться несколько заданий cron, 2 из которых мы рассматриваем как интенсивное использование сервера, рассылку новостей и удаление фотографий. Информационный бюллетень активно взаимодействует с БД, поскольку он содержит специальные данные почтового индекса, которые используют таблицу в БД для каждого пользователя. Таким образом, учитывая все это, вы можете понять, почему я беспокоюсь о правильной схеме хранения изображений с первого раза.
Задача ещё не решена.
Других решений пока нет …