среда, 11 августа 2010 г.

Оптимизация обработки поисковых запросов (часть 1)

Всем привет.
DC++ клиенты(с открытым кодом) под профайлером показывают в топе функцию Text::toLower



















DC++ в процессе работы получает запросы и ищет файлы в своей шаре вот этим методом



















Поиск выполняется без учета регистра в результате: Клиент получив запрос выполняет обход всей своей шары и имена каждого файла/каталога приводит к нижнему регистру (функция Text::toLower) при этом он это делает даже в том случае, если имя файла короче строки поиска.

Первая часть исправления: поменял местами несколько строк (подозрительно просто)
...может я что-то не учел?












Вторая часть: сделаю завтра.

5 комментариев:

L. комментирует...

Всё правильно, очень хороший патч

а теперь самое главное в Windows файлы регистро независимы :) предлагаю в базу сразу загонять всё в нижнем регистре и функции ToLower отовсюду что связано с шарой выкинуть

L. комментирует...

Правда потеряется совместимость с Unix


Всё что ещё пришло на ум требует создание индексов, а соответственно больших затрат на память

vsu комментирует...

Теоретически возможен случай, когда при переводе в нижний регистр размер текста в UTF-8 увеличивается: в Турции символ 'I' (1 байт в UTF-8) переводится в 'i без точки', занимающий 2 байта.

Pavel Pimenov комментирует...

В базу лить в нижнем регистре по-моему нельзя... портим оригинал.
Память немного потеряем(сумма букв в именах файлов и каталогов на всю шару + оверхед на STL)
но РАМ сейчас дешевле температуры которую клиент добавляет к системнику от лишней матиматики.
... особенно в условиях лета 2010
p.s.
у меня вчера чуть не помер монитор от перегрева :(
а телек сдох... смотрю новости в 14 дюймах на резервной SUPRA-е купленным для кухни.

Pavel Pimenov комментирует...

2vsu спасибо.
про Турцию не знал :(
p.s.
во второй части поправлю
там будет полностью совместимо с 2-байтовыми иностранцами
(но будет кушать больше памяти)