Каков наилучший способ хранения загруженных файлов? - PullRequest
0 голосов
/ 31 августа 2009

Извините за плохой заголовок.

Я сохраняю веб-страницы. В настоящее время я использую 1 XML-файл в качестве индекса. Один элемент содержит дату создания файла (UTC), полный URL-адрес (со строкой запроса и прочее). И заголовки в отдельном файле с похожим именем, но со специальным расширением.

Однако, если использовать файлы размером 40 КБ (включая заголовок), XML-файл теперь равен 3,5 МБ. Недавно я все еще читал, добавлял новую запись, сохранял этот файл XML. Но теперь я храню его в памяти и время от времени сохраняю.

Когда я запрашиваю страницу, URL-адрес ищется с помощью XPath в XML-файле, если есть запись, возвращается путь к файлу.

Структура каталогов . \ Www.host.com/randomFilename.randext

Так что я ищу лучший способ.

Я думаю:

  • Один XML-файл на. домен (в т.ч. поддоменов). Но я чувствую, что это может быть хлопот.
  • Использование SVN. Я только что проверил, но у меня нет опыта работы с большими репозиториями. При выполнении svn добавьте « путь к файлу » для каждой загрузки и подтвердите, когда я закончу.
  • Создайте пользовательскую файловую систему, в которую я затем могу включить все, что хочу, например. POST-данных.
  • Генерация имени файла из URL и каким-то образом выравнивание строки запроса, но ОС может отклонить большие строки запроса. И если я сохраню это с заголовками, мне все равно нужно отслеживать несколько файлов, сопоставленных с каждой отдельной строкой запроса. Хлопот. И я не хочу, чтобы он выполнялся слишком медленно.

Несколько экземпляров программы будут выполнять операции чтения / записи на разных компьютерах.

Если я буду следовать методу директории / файла, я теоретически смогу добавить слой между ними, чтобы он использовал DotNetZip на лету. Но опять же, строка запроса.

Я просто ищу направление или опыт здесь.

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

Ответы [ 2 ]

0 голосов
/ 31 августа 2009

Я бы использовал 2 хранилища данных, одно для необработанных файлов и другое для индексов.

Для хранения плоского файла я думаю, что Berkeley DB является хорошим выбором, ключ может быть сгенерирован md5 или другой хэш-функцией, а также вы можете сжать содержимое файла, чтобы сэкономить место на диске.

Для индексов вы можете использовать реляционную базу данных или более сложную систему текстового поиска, например Lucene.

0 голосов
/ 31 августа 2009

Я бы порекомендовал либо реляционную базу данных, либо систему контроля версий.

Возможно, вы захотите использовать новую функцию FILESTREAM в SQL Server 2008 для хранения самих файлов в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...