[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: поиск LIKE
Страницы: 1, 2
FatCat
Цитата (NitroGenerate @ 27.09.2013 - 12:37)
На работе делал поиск по бд с 500 тыс записями через лайк

Делал похожее для вордстата яндекса: более 40 млн записей. По запросу ключа отдать его частотность.
Поиск пришлось делать в 3 этапа и генерировать 2 вспомогательные таблицы: таблица слов и таблица первых трех букв. Генерация вспомогательных таблиц занимает несколько часов. Но зато когда эти таблицы есть, 3 лёгких запроса с лайками:
1. Поиск первых трех букв запроса по базе трехбуквенных - получили список слов.
2. Поиск по списку слов первого слова запроса - получили список ключей вордстата, начинающихся на это слово.
3. Сам поиск ключа вордстата и получение его частотности.

Все 3 запроса занимают в среднем 0.001 сек.

_____________
Бесплатному сыру в дырки не заглядывают...
Invis1ble
Весь день пытался оптимизировать код, химичил с конфигами, запилил распараллеливание и пр. В итоге решил подебажить код sphinxapi.php и выяснилось, что 99.9% времени занимает коннект к демону (fsockopen()) laugh.gif
Надеюсь на линуксе он будет побыстрее, ибо на винде коннект=1 сек, запрос=0.01-0.001 сек smile.gif

PS. Надо будет еще API из PECL потестить, в тырнетах ходят слухи о тормознутости php-шного fsockopen() на некоторых системах.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

GET
Еще можно сделать свой аналог Sphinx, например, через стеммер Портера, конечно это не скоростной Sphinx на C++ и + доп загрузка PHP, но зато все таблицы под контролем.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Invis1ble
Странно как-то, попробовал SphinxQL - коннект занимает все те же ~1 сек, такое ощущение, что где-то прописан таймаут в 1 сек.
pconnect ожидаемо помог, однако все же интересно, в чем причина такой задержки.
Пойду мучать линукс, о результатах отпишусь.



Спустя 1 час, 32 минуты, 26 секунд Invis1ble написал(а):
результаты на линуксе (mysql_connect()):
Цитата
[ 30.09.2013 23:48:57 ] SphinxQL connect took: 0.00030 sec
[ 30.09.2013 23:48:57 ] Query: *test*
[ 30.09.2013 23:48:57 ] Query took: 0.00232 sec

smile.gif

PS. API из PECL тестить не стал, т.к. разработчик Sphinx пишет, что по его тестам по скорости выигрывает SphinxQL. Его и оставлю.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Invis1ble
Случайно нашел причину задержки при коннекте: в hosts не было прописано правило для localhost (который я указывал в коде).
При изменении в коде localhost на 127.0.0.1 или при добавлении localhost в hosts - коннект создается как положено, очень быстро smile.gif

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.