![]() |
Что будет быстрее работать?(теория)
Есть некая структура файлов(котороя не обновляется и не изменяется, просто папки и файлы).
Мне надо реализовать навигацию по этим файлам. Просто включить Options +Indexes не устраивает. Собственно что будет быстрее работать. Если мы загоним весь список файлов в базу(не сами файлы а просто их иерархию) и будем просто вытаскивать из базы. Или будем через system('ls') ползать? Или еще чтонибудь предложите? ЗЫ пока писал вспомнил про opendir/readdir. он наверно будет быстрее? |
База медленная штука. Используй readdir();
|
Базу юзай. Чтобы рекурсивно не лазить по директориям. Легче гораздо это. Да и теоретически быстрее.
Хотя для твоего проекта все равно - он не будет настолько популярным, чтобы замечать разницу. |
база имхо.
к теме надо опрос прикрутить =\ |
не нужен опрос. Да и автор не знает походу, что ему надо.
|
nerezus что ты на меня сразу набросился?
Цитата:
Кстати ненадо получать рекурсивно список файлов. Нужно только список из папки/подпапки. А нагрузка будет хотябы потому что файлов в папки будет порядка 500 штук(возможно больше) Цитата:
ЗЫ уже двое за базу. Кстати можно еще прокешировать запрос к базе(так-как инфа меняться будет ну очень редко) |
Тоже за базу. Должно быть быстрее.
|
бд полюбому будет лучшим вариантом.. 500 файлов постоянно дергать неудобно + с бд больше возможностей
|
Пока уезжал тема упала, ну да ясно что тут долго обсуждать.
Предлагаю свой вариант "что бы быстрее". Нам в любом случае понадобиться отсканить директории что бы мы не использовали базу или файл. Хранить дерево предлагаю в массиве такой структуры Код:
ArrayДалее, начинаем ускорять это дело. Мысль такая использовать кеширование в памяти. Т.е. будем хранить в памяти на сервере массив дерева каталогов при необходимости берем массив сразу из памяти, а не с файла/базы. Объем памяти потребуется относительно небольшой. Вот примерный расчет взят с моего диска С. Общее количество файлов и папок 14000 (установлена винда ХП, офис, и несколько других программок). Возьмем среднее количество букв в имени файла/папки равным 15 (символов). Итого имеем 14000*15=210000 (байт-символов) или 205 килобайт. Много мало решать вам. Теперь все это в коде. 1. Сканер директорий. PHP код:
PHP код:
Можно сделать разные проверки и прочее, но это нужно уже для конкретной задачи. Вот такое вот решение. Интересно услышать критику. З.Ы. Для использования кеша придется установить memcache. Очень коротко почитать можно тут http://www.webnext.ru/blog/2007/09/18/php-memcache.html Есть версия для винды (ей и пользовался) http://jehiah.cz/projects/memcached-win32/ |
А что ты мучаешься. один тест у тебя уже сделано напиши второй и для БД =)
Я думаю что БД быстрее т.к. хранить в каждом запущенном скрипте структуру из 14к элементов - накладно. Да и в БД есть тоже свой кеш, который можно настроить. |
Да можно сделать тест.
Только вот ЧТО хранить в БД. Точнее КАК хранить структуру папок? Предлагайте варианты, я попробую сделать тест и проверим. |
О да, офигеть структура сложная: id, файл в системе, реальное имя
По имени файлав системе(типа 12ab211d2bac12d) смотрится его путь(12/12ab/12ab211d2bac12d) и реальное имя. |
2 nerezus
Ждал твоих комментов. Если не сложно поясни почему база быстрее файлов? Ведь она тоже на файлах. Это не спор, это вопрос, действительно интересно. И если говорить именно о скорости, все же как будет быстрее, из оперативки брать данные или все же из базы? Ну если не трудно дай все же ответ чуть шире чем обычно :) |
Цитата:
Не будешь же ты хранить файлы под их реальными именами, а потом лазить по всем папкам в их поиске? %) |
Хм... может я дурак... или неопытен, но вот нифига не понял.
Ладно, опыт придет. Спасибо и на том, будет над чем подумать, мало ли вдруг понадобится решать подобную задачу для чего нибудь своего. |
3 поля в бд.
Индексное уникальное слово или автоинкрементное целое - это номер файла Временное имя файла(сгенерировано скриптом) Реальное имя файла(при отдаче подставляется). |
Red_Red1 Наверное ты знаешь что БД развивается уже не один десяток лет, и даже в общих идеях и алгоритмах все более ли менее отточено. Взять хотя бы b-tree (сбалансированное дерево)... и представь поиск по нему, и поиск по харду... По сбалансированному дереву, при достаточно большом количестве записей ты получишь результат за 3-4 операции. Ну это я для примера, но общий смысл думаю понятен - почему база быстрее файлов.
|
2 VDShark. Конечно я понимаю почему база быстрее файлов и то как она ищет по индексированым полям. Идея моя в другом.
Вот скажи что будет быстрее сделать запрос в базу и обработать результат ИЛИ выполнить вот эту строку PHP код:
|
Цитата:
|
Цитата:
Массив $arr хранит все дерево каталогов. _______________________________________ Исправил код в предыдущем посту, допустил ошибку. |
| Время: 09:39 |