[lorien] Error: Cannot found any index for you query.
Поэтому для ускорения поиска применяются индексы. Соответственно, иногда возникает ситуация, что для какого-то слова индекс найти не удается (например mp3 или gif - наиболее часто используемы слова). В таких случаях выдается указанное сообщение.
Это техническое ограничение (в том смысле, что это не случайная ошибка, а так было задумано). Я пока не придумал как составлять индексы для слов с цифрами. Дело в том, что слов сейчас ~600 тысяч, а если разрешить цифры то будет ~1200 тысяч. Это ведет к сильному разбуханию словаря, индексов.
Вернуть все на место нельзя, так как база не влезает в память, старые безиндексовые алгоритмы более не работоспособны.
Мб стоит попропросить админов всех сетей сброситься на гиг-другой.
ресурс, по-любому, этого стоит.
База постоянно растет: http://lorien.local/mrtg/netsize.html (yearly graph)
Скоро наверное будет поиск по FTP, это еще увеличит базу раза в 1.5
Если так подходить то придется каждые пару месяцев покупать по планке памяти
imho это не правильный способ.
я хочу провести оптимизацию на уровне алгоритмов - строить более правильные индексы, в другом порядке хранить данные, не требуя увеличения объема занятой памяти. возможно это потребует некоторого времени на сбор статистики (какие запросы остаются без индекса) и теоретическое рюхание.
можно обсудить методы построения индексов прямо здесь. если кто-то выскажет идеи как улучшить работу - буду очень признателен.
а грузить с HDD сжатые индексы, распаковывая на лету не получится?
сами по себе индексы маленькие (~160 Mb в то время как информация о файлах занимает ~540 Mb. Индексы все время лежат в памяти и с ними все ок. Основная проблема - чтение с диска самого массива записей о файлах (или выборка записей с нужными id если нашелся индекс).
Как ещё один вариант "железного" решения вопроса - RAID 0.
Интересная мысль! Надо подумать. Строковую информацию, наверное, можно хорошо сжать (lzw какое-нибудь). Здесь явно будет выигрыш. Информация о дате/размере наверное хуже сожмется (все-таки более случайна).
Единственная трабла - сейчас доступ к таким структурам сделан "явно", с использованием C++ - указателей. При паковке/распаковке такое не применимо - придется как-то менять организацию доступа к данным.
развернуть эти явные указатели в IO-потоки. тогда какой-нить guzip покатит через | наверное.
Delete
TAS>Может посмотреть как что-то подобное реализовано в поисковиках (инетовских)?
По идее должно работать довольно быстро, особенно если использовать какуюнить шуструю фс типа reiser4, а базу в оперативе - она там кстати зипованая ( в slocate - точно можно сделать). Я так понимаю в данном случае база эта выступает в роли индексов скорее, размер не шибко большой должен получиться.
ps я понимаю, что это наполовину новый поисковик получится, но все же
с какого века 60000 файлов уже много? у меня не меньше 600000
Да, я ща кстати на работе - на тутошней машинке 4 диска по 160 Гб почти полностью забиты, но тем не менее - всего ~ 600000 файлов и есть... Правда довольно много больших файлов, но все равно... А slocate ищет тоже ~ 0.01 s real time-a...
на unix.hackers: 1868378 файлов
Интересно, скока файлов пошарено в сетке? На лориене в статистике че то не нашел...
всего то 13 милионов * 2 если фтп еще будет Думаю намально будет работать...
взять тот же slocate - у него база 6 мегов. а тут база 540 мегов, в 90 раз больше.
создать на диске 13 миллионов файлов - тоже гиблое занятие. На каждый файл ведь хранится куча информации, типа владелец, дата, inode итп. Когда 13 миллионов файлов каждые дополнительные 4 байта оборачиваются 52 мегабайтами. Я думаю, файловая система загнется (или будет работать очень медленно).
grep/sed/awk - в топку, потому что grep-ать 540 мегабайт - это долго, при таких размерах просто необходимо использовать индексы.
Единственное, что представляет интерес - это glimpse. Он решает в некотором роде подобную задачу, и масштабы данных у него тоже большие. Я не знаю как он работает. Почитаю на досуге его сырцы. Думаю, там должны быть нетривиальные вещи.
Слушай, а ты можешь расшарить какой-нибудь дамп всех файлов сетки? Просто построчный. Хочу попробовать состыковать все это дело с уже существующими поисковиками.
не, грепать 540 мегов без мазы это факт. но я ведь ничего такого и не предлагал касательно же locate - если поиск по базе в 6 мегов занимает <0,01 секунды, то поиск по базе в 90 раз большей - это 1 секунда. На самом деле - я думаю, что сильно быстрее (кроме того - сам сказал индексы весят 160) . Насчет 13 миллионов файлов это ты не прав - на unix.hackers - 1,8 и все работает тип топ Я 100% уверен, что и 10^8 файлов не шибко большая проблема. У меня в лабе сервак сановский стоит с прикрученным дисковым массивом - дык там 24 ТБ данных со средним размером файла 100 кб. Там конечно не одна фс, но не 1000 по любому Крутится все это дело на xfs - не самая плохая файл система, но все же... reiser4 круче. Особенно если ее настроить именно под такую задачу. А глимпс - это тот же греп по сути, но переделанный сильно ( он сделан на основе powergrep, который на основе agrep, который на основе fgrep, a что это такое все и так знают Работает он, кстати довольно медленно. Идея была в том, чтобы использовать в качестве БД саму файловую систему (чем она и является по сути а в качестве таблицы индексов быстро работающую и к тому же сжатую базу slocate ( точнее даже просто locate, поскольку на права на файлы в данном случае положить ). Ща попробую создать 13 миллионов файлов и посмотреть, что из этого выйдет
Процесс пошел - уже миллион есть
Конечно, можно создать 13 миллионов файлов, но по-моему накладные расходы при таком подходе будут просто чудовищные. Учти что создание каждого файла требует кучу системных вызовов.
среднее число файлов на компе? Учти я все выводил в xterm, потому как заломало еще и условие туда приписывать и остановил просто по ctrl-c, когда 2 милиона стало. создает он легко ~100000 файлов в минуту. у тебя по сети полюбе больше инфы идет, а диск полюбе быстрее. ща график сделаю. Но первая индексация долго идет - эт без вопросов...
А как часто у тебя индексы перестраиваются?
1) Объем базы данных slocate.db = 42(1) Mb
2) Среднее время получения из файла инфы ( time cat `slocate filename`) - 0,891(8)
3) Ожидаемое время полной индексации всего дерева 60(5) минут.
Машина - p4 2,8Ghz без ht, 256mb с очень галимыми таймингами. hdd - хрен знает какой, но выдает на hdparm -T ~ 42 Mb/s
Файловая система - reiserfs3.6.
Жесткий диск 1 - те свап тоже на нем же, во время индексации проц загружен процентов на 80, в основном из за интенсивного своппинга ( машина не моя - поэтому на не gnome, gdesklets и все такое, памяти не хватает савсем.). Во время поиска использования процессора замечено не было Говорят, можно не индексировать заново, а обновлять только новые файлы, при этом время индексации должно сильно сократиться (до пары минут) . Как это сделать я пока не рюхнул. Для уменьшения времени поиска базу надо засунуть в оперативку - пробовать не стал - прав не хватает. Уменьшить накладные затраты на disk i/o можно если юзать SCSI диски и\или Reiser4fs. Создание и чтение миллионов мелких файлов - ее конек - тут она в ~1.5 раза быстрее и во столько же раз менее требовательна к процу. (поищи бенчмарки в инете). Еще было замечено, что время поиска не слишком сильно зависит от размера db - при 240000 файлов - это 0.099 с , при 13000000 - 0.891 - типа прямая. В общем ищет быстро и не навязчиво, индексирует долго и навязчиво Хотя повторюсь нужно только обновлять базу а не строить заново - тогда все будет очень даже пучком. Такие дела Кстати файловая система не тормозит при прибавлении такого числа файлов - я каждый раз мерял время копирования папки с 1.5 млн файлов - оно оставалось постоянным - около 25 минут, или примерно 1000 файлов в секунду - врядли лориен столько файла в секунду сканирует.... Содержание файла - текст "file is the #XXXXX" - те что то около 20 символов). Отожрали все эти файлы где то ГБ на миллион файлов. все.
PS не все - ядро 2.6.9 nitro 4 - то есть чисто десктопное, в котором как раз io функции и прибиты маленько. Так что я думаю - покатит такая тема в плане скорости, если толково все сделать... .
Все кто сталкивался с такой ошибкой - убедительная просьба проверить снова, ищется ли сейчас и написать сюда (или мне в приват/мыло).
Оставить комментарий
helpall
Раньше поиск в лориене всегда выдавал результаты. А сейчас часть появляется ошибка вроде Error: Cannot found any index for you query., когда, как я понимаю, я использую в поиске слишком частоупотребимую последовательность символов. Или если её нет вообще.Нельзя ли всё вернуть на место? Очень неудобно получается, если, например, я пытаюсь искать что-то вроде "2004 \\ 01 mp3".