Поиск по файлам: оптимизация

whirlwind

TDD infected, paranoid
Поиск по файлам: оптимизация

ГЫ. нет, всетаки без помощи аудитории не обойтись :)

Хочу поинтересоваться у опытных людей по поводу серченжинов. Задача собсно заключается в индексации файлов для локалки. Обращаюсь исключительно потому, что времени на разработку есть макс. два дня в неделю по выхам, протестить все варианты и найти оптимальный довольно затруднительно, а сделать хочется. Т.к. некоммерческое и все такое...

Имеецо: таблица вхождений->таблица файлов. Ищем вхождения, джойнясь на таблицу вхождений. Проблема в том, что при >4КК во вхождениях начинаются тормоза в зависимости от вводных.

Вопрос №1: Почему поиск по индексу длинной 8 байт со значением к примеру linuxsoft выполняется медленнее чем поиск по двум значениям linux и soft при том что по linuxsoft ничего нет? Если я правильно понимаю принцип работы индексов b-tree, то linuxsoft должен отработать быстрее, потому что linuxsof это 64 ветки, а linux soft это 64*2 (ну или по крайней мере переход на еще одно условие).

Вопрос №2: понятно, что длинные лексемы будут искаться быстрее коротких. И чем больше лексем, тем быстрее будет получен результат. Первое, что приходит на ум, это отсортировать лексемы по длине, и джойнить от более длинного к менее длиному. Как быть, если все лексемы короткие? На ум приходит остортировывать и собирать короткие лексемы в одну и таким же образом обрабатывать входные данные, но судя по в.№1 это не даст эффекта.

Вопрос №3: имеет ли смысл на 32 машинах разбивать на 32-разр. составляющие. Т.е. при требуемой точности в 8 символов закодировать лексемы как 2xINTEGER(32), построить по этим полям multicolumn индекс. Или положительного эффекта этим не добиться?

Пробовал на btree, сейчас строю hash, но сколько времени займет неизвестно :)))))
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: whirlwind
Пробовал на btree, сейчас строю hash, но сколько времени займет неизвестно :)))))
Цытируя доки:
Note: Testing has shown PostgreSQL's hash indexes to perform no better than B-tree indexes, and the index size and build time for hash indexes is much worse. Furthermore, hash index operations are not presently WAL-logged, so hash indexes may need to be rebuilt with REINDEX after a database crash. For these reasons, hash index use is presently discouraged.
выделение моё

-~{}~ 22.04.07 20:04:

Понял не весь поток сознания, но что мешает вместо лексем хранить, например, их crc32 и не заморачиваться по поводу длины?
 

whirlwind

TDD infected, paranoid
Ну, в принципе я и не особо надеялся, иначе сразу бы попробовал хэш. Просто в мозгу засела фраза из какой то доки что для строк лучше хэш. Видать старая дока :)

А по остальным вопросам что нить подскажешь? Я собсно ожидал ответа от тебя и от baev-а :)

UPD: ну вот я и спрашиваю, если я порежу слова по 4 байта и сделаю из них integer будет эффект для 32 разрядных систем, или не стоит париться?

-~{}~ 22.04.07 20:16:

> но что мешает вместо лексем хранить, например, их crc32
точность
 
Сверху