Создание масштабируемого сайта загрузки файлов

Я пытаюсь создать сайт загрузки файлов в качестве побочного проекта, и я никогда не создавал ничего, что требовало бы обработки большого количества файлов, например этот. Насколько я могу судить, есть три основных варианта для хранения и извлечения файлов (обратите внимание, что на одну загрузку может быть несколько файлов, поэтому, например, website.com/a23Fc может позволить вам загрузить один или несколько файлов, в зависимости от того, сколько пользователь изначально загрузил - аналогично imgur.com):

  • Поместите все файлы в один огромный каталог файлов и используйте (реляционную) базу данных, чтобы выяснить, какие файлы принадлежат каким URL, а затем вернуть список имен файлов в зависимости от этого. Пример: пользователь загружает website.com/abcde, поэтому он запрашивает в БД все файлы, связанные с загрузкой abcde, возвращает их имена, и сайт выводит их.
  • Используйте CouchDB, потому что он позволяет вам фактически прикреплять файлы к отдельным записям в БД, поэтому каждый URL / загрузка может быть записью БД с прикрепленными к ней файлами. Например, пользователь загружает website.com/abcde, CouchDB захватывает документ с идентификатором abcde, захватывает файлы, прикрепленные к этому документу, и передает их пользователю.
  • Полностью откажитесь от использования БД и для каждой загрузки создайте новый каталог и вставьте файлы в него. который. Пример: пользователь загружает website.com/abcde, site ищет каталог / files / abcde /, берет оттуда все файлы и передает их пользователю, так что база данных вообще не задействована.

Что из них кажется наиболее масштабируемым? Как я уже сказал, у меня очень мало опыта в этой области, поэтому, если я полностью отключен или есть очевидный 4-й вариант, я более чем открыт для него. Наличие тысяч или миллионов файлов в одном каталоге (например, вариант 1) кажется не очень разумным, но наличие тысяч или миллионов каталогов в каталоге (например, вариант 3) не кажется намного лучше.

5
задан Mike Crittenden 15 February 2011 в 21:58
поделиться