[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 я понимаю, что это наполовину новый поисковик получится, но все же



Да, я ща кстати на работе - на тутошней машинке 4 диска по 160 Гб почти полностью забиты, но тем не менее - всего ~ 600000 файлов и есть... Правда довольно много больших файлов, но все равно... А slocate ищет тоже ~ 0.01 s real time-a...

Интересно, скока файлов пошарено в сетке? На лориене в статистике че то не нашел...

взять тот же slocate - у него база 6 мегов. а тут база 540 мегов, в 90 раз больше.
создать на диске 13 миллионов файлов - тоже гиблое занятие. На каждый файл ведь хранится куча информации, типа владелец, дата, inode итп. Когда 13 миллионов файлов каждые дополнительные 4 байта оборачиваются 52 мегабайтами. Я думаю, файловая система загнется (или будет работать очень медленно).
grep/sed/awk - в топку, потому что grep-ать 540 мегабайт - это долго, при таких размерах просто необходимо использовать индексы.
Единственное, что представляет интерес - это glimpse. Он решает в некотором роде подобную задачу, и масштабы данных у него тоже большие. Я не знаю как он работает. Почитаю на досуге его сырцы. Думаю, там должны быть нетривиальные вещи.
Слушай, а ты можешь расшарить какой-нибудь дамп всех файлов сетки? Просто построчный. Хочу попробовать состыковать все это дело с уже существующими поисковиками.






Конечно, можно создать 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 и все такое, памяти не хватает савсем.). Во время поиска использования процессора замечено не было




PS не все - ядро 2.6.9 nitro 4 - то есть чисто десктопное, в котором как раз io функции и прибиты маленько. Так что я думаю - покатит такая тема в плане скорости, если толково все сделать...

Все кто сталкивался с такой ошибкой - убедительная просьба проверить снова, ищется ли сейчас и написать сюда (или мне в приват/мыло).
Оставить комментарий
helpall
Раньше поиск в лориене всегда выдавал результаты. А сейчас часть появляется ошибка вроде Error: Cannot found any index for you query., когда, как я понимаю, я использую в поиске слишком частоупотребимую последовательность символов. Или если её нет вообще.Нельзя ли всё вернуть на место? Очень неудобно получается, если, например, я пытаюсь искать что-то вроде "2004 \\ 01 mp3".