поиск файла - вопрос о скорости

moggucci

Guest
поиск файла - вопрос о скорости

Добрый день.
Стоит задача поиска файлов. В перспективе - много юзверей, около 100 тыс. в день. Писать базу , содержащую название файла и путь ,- не хочется.
Насколько я понимаю, при поиске в Windows после того, как один раз запустили поиск в папке, винда индексирует список файлов, содержащихся в этой папке, и повторный поиск происходит очень быстро. FreeBsd автоматически индексирует содержимое каталогов? Из php можно вызвать системную функцию поиска файлов FreeBSD? Имеется в виду именно поиск средствами операционной системой, а не перебор джерева каталогов средствами php.
 

moggucci

Guest
StUV, тормозной? Какая разница каких файлов - тебе типы перечислить или названия? или структуру каталогов? Не знаешь что ответить - молчи.

-~{}~ 27.05.07 18:57:

WP, не смог найти функцию locate на php.net :( Что такое locate?
 

StUV

Rotaredom
Какая разница каких файлов
большая
опиши еще раз задачу
откуда_берутся_эти_файлы - ?

тот путь решения, который ты выбрал (через [m]exec[/m] / итп... ) - совершенно неправильный

-~{}~ 27.05.07 18:59:

WP
не надо ему это
он щас еще locate будет в пхп искать
мозгов нет, а огрызается =)))
 

moggucci

Guest
StUV, рассказываю поподробней :)
У меня на сервере лежат файлы. Размером 3-10 мб. Их много - десятки тысяч. Появляются они от меня - я заливаю через FTP. Больше никто доступ к пополнению не имеет и иметь не будет.
Хочу дать юзверям не только листинг всех файлов, но и сервис поиска.
Поясняю, почему не хочу БД - придется постоянно сканировать все каталоги и файлы, для каждого файла проверять, есть ли запись в бд, если нет - добавлять, если есть - пропускать; далее проверить все записи в бд на реальное наличие/отсутствие файлов, если их нет - то запись бд удалить. Причем скрипт обновления бд вешать периодичемским заданием.
Почему хочу средствами ОС - если есть систменое решение, ГОТОВОЕ, которое само берет на себя головняк с индексацией - то почему бы и не воспользоваться? Более того, ОС будет точнее вообще говоря знать о наличии файла и быстрее работать - на события удаления, создаения, перемещения, копирования сама обновляет индекс, причем индекс обновляет только на ДЕЛЬТУ.
Теперь объясните, почему это неправильный путь?
 

StUV

Rotaredom
хм
давать левым юзерам доступ к поиску по реальной файловой системе - потенциальная дыра
я бы сделал поиск по "виртуальной фс", которую можно организовать как угодно - хоть бд, хоть еще как-то...

а на счет
Их много - десятки тысяч.
да хоть миллионы - мелочи это все
зависит от типа файловой системы и от того как ты будешь их складывать
 

moggucci

Guest
StUV, мозги у меня есть, у меня не хватает знаний в ПХП и прочих инет делах. Это две большие разницы.
WP, а можешь дать ссылку, как это можно использовать из PHP? Я сейчас поиск в инете запустил, я так понял, это как раз ф-я в FreeBSD для быстрого поиска файлов по индексу и шаблону поиска - то что доктор прописал. Если можешь навскидку ссылочку дать, дай пожалуйста.
 

StUV

Rotaredom
moggucci
да уж
сейчас ты научишься парсить результаты locate
а через неделю придешь с вопросом - помогите составить регэксп для универсальной валидации введеной юзером поисковой строки, чтобы он (юзер) не смог мне похерить что-нить на серваке после запуска exec/system/etc...
 

moggucci

Guest
StUV, тогда вопрос - сервер не загнется, если я буду организовывать поиск в файлах средствами ПХП?
Т.е. скандиректори, получаю массив, для файлов проверяю на содержание подстроки поиска, не регуляркой конечно, для совпавших печатаю в результаты поиска, дальше для всех вложенных папок опять вызываю скан с поиском... Так вот при такой системе и множестве поисков система не загнется? Поиск будет быстро работать?
Складывать хочу вложенно - т.е. не миллион файлов в одной директории, а структурированно, получится не более 100 файлов в директории и не более 100 директорий в директории...
Таким способом написать дял меня проще всего, беспокоит только вопрос скорости.
 

WP

^_^
Блин, меня убивают такие люди. Они не спрашивают как ЛУЧШЕ, а спрашивают загнется или не загнется, при этом не говорят количество запросов в день, железо и примерный код.
Без БД делать - бред. Лучший вариант - locate.
 

StUV

Rotaredom
moggucci
тогда еще вопросы:
файлы обязательно заливать "руками"?
или можно написать интерфейс - чтобы данные в базу записывались непосредственно в момент заливки/удаления файла?

если "только руками"
напиши скрипт, который будет периодически по крону сканить директорию с файлами и записывать данные в бд
а поиск можно организовать через поиск по базе - т.е. не надо сканить винт на каждый юзерский запрос
 

moggucci

Guest
StUV, я именно так описал алгоритм работы с бд :)
Заливка только руками. Поэтому писать добавление записи в бд и удаление на заливку/стирание файла не получится. К тому же надежней периодически, например, раз в сутки, сканить - меньше вероятности накопления ошибок...
С бд все понятно, остался только такой вопрос, как найти файл
"here some name of file.txt"
по запросу типа
"file som"
?
Запрос на составляющзие его слова я распарсю, а вот селектом сразу получить список уже не получится. Т.е. придется построчно для каждой строки бд проверять на вкождение строк "file", "som". Правильно я думаю или нет?
 

StUV

Rotaredom
"here some name of file.txt"
по запросу типа
"file som"
ты случайно последовательностью подстрок во втором случае не ошибся? - а то такой вариант тебе ни locate, ни find не найдет =))

а по поводу селекта к базе - копай в сторону полнотекстового поиска - для начала тебе и LIKE хватит, потом если проблемы будут - займешься оптимизацией
т.е. в данном случае - тебе что find'ом, что select'ом искать - одинаково

-~{}~ 27.05.07 19:57:

зы:
Запрос на составляющзие его слова я распарсю, а вот селектом сразу получить список уже не получится. Т.е. придется построчно для каждой строки бд проверять на вкождение строк "file", "som". Правильно я думаю или нет?
неправильно (см.выше =)))

-~{}~ 27.05.07 20:00:

в общем - вот, полистай:
http://phpclub.ru/talk/search.php?s=&action=showresults&searchid=1734976&sortby=lastpost&sortorder=descending
=)
 

moggucci

Guest
WP
StUV
огромное спасибо за правильное направление и правильно произнесенные слова а-ля "LIKE". Никогда не делал MySql бд, и никогда не использовал в пхп (да и пхп я не силен, изучаю только в силу необходимости написания конкретного функционала). Короче разозлили вы меня, сел, разобрался и сделал. Заметьте, все в первый раз. Ну разве что общий синтаксис скуля знаю. В сипанели сделал бд, добавил юзверя и пароль, скриптом создал таблу, сейчас написал простенький скан (без вложенности пока, ща допишу по-нормальному, попробую рекурсией с параметром "ломиться или не ломиться в субдиректории") и написал простенький поиск с оператором like - РАБОТАЕТ СЦУКО!!! Простите, эмоций тьма ) Очень рад, ребят, спасибо, что разозлили :)

-~{}~ 28.05.07 01:51:

А, да, фак все-таки хорошая вещь - сразу лбом в кавычки стукнулся...

-~{}~ 28.05.07 01:53:

Да, еще, вместо лайка другую вещь напишу, чтобы искать по запросам типа указанного выше, где я намеренно спутал порядок слов - поиск должен выдать адекватный результат. Главное сейчас есть скелет и он работает.
 

WP

^_^
А потом не забывай в цикле проверять существование каждого файла периодически и удалять из БД несуществующие ссылки.
 
Сверху