Суть:
написал поисковую систему в локальной сети по шарам пользователей.
Т.е. программка шарится по всем открытым папочкам в сети и всё что найдёт записывает на mssql server.
Табличка выглядит так: Table: Files
CompName: nvarchar(50), Share: nvarchar(256), Path: nvarchar(601), Name: nvarchar(256), id: numeric(9)
Сеть насчитывает около 3000 компьютеров, потому сканнер сканирует примерно часов пять всю сеть, после чего ждёт 7-мь часов и запускается заново.
Сервер очень слабенький: Селер 400, 384 мб оперы.
Стоит связка w2kas+mssql2k+iis
На iis один срипт - запрос
На sql - одна табличка.
Табличка в среднем содержит около 2500000 записей - число варьируется.
Принцип работы сканера следующий:
В сетевом окружении ищет включенные компы, перед подключением пингует и если связь нормальная, на sql выполняет (delete from Files where (CompName = ‘\\DOMAIN\’)) - убивает все записи ранее найденных файлов на этом компе. Далее сканирует шары и записывает все, что нашёл заново.
Всё бы ничего, но искать, применяя LIKE не возможно, если в запросе есть знаки % - ‘kerio%’. Скрипт вываливается по таймауту.
При использовании full-text search (select * where contains(Name,’kerio’) order by CompName, Share, Path) ищет отлично, но тут тоже столкнулся с проблемами.
Индексировал два поля в табличке - Path: nvarchar(601), Name: nvarchar(256). Но полное индексирование происходит слишком долго – три дня, к тому же табличка индексируется при обязательном условии, что в ней имеются не повторяемые поля, пришлось воткнуть счётчик (id). Но пока табличка индексируется, поисковая программа перезаписывает почти всю табличку заново. Соответственно найти в базе ни чего не получается.
Посоветуйте пожалуйста какое-нибудь решение.
За ранее благодарен.