Данные о файлах (size, name...) хранить в базе или вытаскивать скриптом?

gorden

Новичок
Данные о файлах (size, name...) хранить в базе или вытаскивать скриптом?

Здравствуйте.

Интересует вопрос. Имеется к (примеру) 300 тысяч файлов, находящихся в одной директории и именующихся как 1.ext1, 2.ext1, 3.ext1 .... 300000.ext1, 1.ext2, 2.ext2, 3.ext3 .... 300000.ext2, итд.


Как эффективнее с точки зрения производительности хранить и получать данные об этих файлах (размер, название итд) Т.Е. хранить эти данные в базе или во время выполнения скрипта определять эти параметры с помощью функий (как например filesize() ).

Хочу заметить, что так же в бизнес правила заложен отбор файлов по именам и расширениям. Например нужно получить параметры всех файлов с именем 4678 но со всеми присутствующими расширениями для этого имени.

Интересует только вопрос производительности.

Спасибо,
Надеюсь на помощь.

Денис.
 

gorden

Новичок
Нет, размер у файлов меняться не будет.

-~{}~ 10.10.05 19:14:

И никакие другие параметры тоже...
 

chisto_tolyan

Враг народа
если надо будет делать поиск по файлам - то лучше в БД, поля имя размер дата и тп. Так поиск будет быстрее, чеп по файловой системе ворошить, я думаю)
 

gorden

Новичок
А как вы считаете разница в производительности будет большая? Если не большой разрыв - процентов 10-15, то для меня это будет не критично.
 

chisto_tolyan

Враг народа
ну а как вы считаете что быстрее прочитать 30,000 файлов или пройтись по таблице в 30,000 записей?и потом ведь, в будущем этих файлов/записей может стать и больше?
Да и удобнее намного с базой работать.
 

Steamroller

Новичок
gorden, от файловой системы зависит. В reiser4 например будет работать очень быстро, в ufs - медленно (причем не на 10-15%, а просто что-то страшное).
В общем-то с базой оно погибче получается, и скорость - вполне предсказуемая будет.
 

alexhemp

Новичок
gorden
Вообще большие хранилища лучше организовывать иерархически.

Пример - если у вас файлов 300000 то можно разбить на подкаталоги в зависимости от имени файла (если оно не меняестя)

типа файл test.txt нужно искать по пути
$STORAGE_ROOT/t/e/test.txt

Если планируется все файлы переименовывать согласно их идентификатору - то тогда можно брать последние цифры. Например

файл 4678 можно хранить $STORAGE_ROOT/8/7/4678

Тем самым достигается более высокая скорость поиска файла в каталоге. Я думаю даже для ReiserFS количество операций для поиска файла в большом каталоге значительно превышает число операций для поиска в малом.
 
Сверху