Кой е най-добрият начин за съхраняване на изтеглени файлове?

Извинете за лошото заглавие.

Запазвам уеб страници. В момента използвам 1 XML файл като индекс. Един елемент съдържа дата на създаване на файла (UTC), пълен URL (с низ на заявка и какво ли още не). И заглавките в отделен файл с подобно име, но с добавено специално разширение.

Въпреки това, при 40k (вкл. заглавка) файлове, XML вече е 3,5 MB. Наскоро все още четях, добавяйки нов запис, запазете този XML файл. Но сега го пазя в паметта си и го записвам от време на време.

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

Структурата на директорията е .\www.host.com/randomFilename.randext

Така че търся по-добър начин.

Аз мисля:

  • Един XML файл на. домейн (вкл. поддомейни). Но чувствам, че това може да е караница.
  • Използване на SVN. Току-що го тествах, но нямам опит в големи хранилища. Изпълнение на svn add "path to file" за всяко изтегляне и ангажимент, когато свърша.
  • Създайте персонализирана файлова система, където след това мога да включа всичко, което искам, напр. Публикувайте данни.
  • Генериране на име на файл от URL адреса и изравняване по някакъв начин на низа на заявката, но големи низове на заявки може да бъдат отхвърлени от операционната система. И ако го запазя със заглавките, все още трябва да следя множество файлове, съпоставени към всеки различен низ на заявка. Караница. И аз също не искам да се изпълнява твърде бавно.

Множество програмни екземпляри ще извършват операции за четене/запис на различни компютри.

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

Просто търся насока или опит тук.

Това, което също искам, е възможността да пазя хронология на тези файлове, така че локалният файл да не се презаписва и след това мога да избера коя версия (по дата) искам. Ето защо опитах SVN.


person CS.    schedule 30.08.2009    source източник


Отговори (2)


Бих препоръчал или релационна база данни, или система за контрол на версиите.

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

person SLaks    schedule 30.08.2009
comment
MySQL също има тип BLOB, който може да се използва и за съхраняване на двоични данни в базата данни. - person Fiarr; 31.08.2009

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

За да съхраните плоския файл, мисля, че Berkeley DB е добър избор, ключът може да бъде генериран от md5 или друга хеш функция и можете също така да компресирате съдържанието на файла, за да спестите малко дисково пространство.

За индекси можете да използвате релационна база данни или по-сложна текстова търсачка като Lucene.

person Tony    schedule 30.08.2009