FatCat
29.09.2013 - 19:00
Цитата (NitroGenerate @ 27.09.2013 - 12:37) |
На работе делал поиск по бд с 500 тыс записями через лайк |
Делал похожее для вордстата яндекса: более 40 млн записей. По запросу ключа отдать его частотность.
Поиск пришлось делать в 3 этапа и генерировать 2 вспомогательные таблицы: таблица слов и таблица первых трех букв. Генерация вспомогательных таблиц занимает несколько часов. Но зато когда эти таблицы есть, 3 лёгких запроса с лайками:
1. Поиск первых трех букв запроса по базе трехбуквенных - получили список слов.
2. Поиск по списку слов первого слова запроса - получили список ключей вордстата, начинающихся на это слово.
3. Сам поиск ключа вордстата и получение его частотности.
Все 3 запроса занимают в среднем 0.001 сек.
_____________
Бесплатному сыру в дырки не заглядывают...
Invis1ble
30.09.2013 - 01:46
Весь день пытался оптимизировать код, химичил с конфигами, запилил распараллеливание и пр. В итоге решил подебажить код sphinxapi.php и выяснилось, что 99.9% времени занимает коннект к демону (fsockopen())
Надеюсь на линуксе он будет побыстрее, ибо на винде коннект=1 сек, запрос=0.01-0.001 сек

PS. Надо будет еще API из PECL потестить, в тырнетах ходят слухи о тормознутости php-шного fsockopen() на некоторых системах.
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Еще можно сделать свой аналог Sphinx, например, через стеммер Портера, конечно это не скоростной Sphinx на C++ и + доп загрузка PHP, но зато все таблицы под контролем.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Invis1ble
30.09.2013 - 23:19
Странно как-то, попробовал 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 |

PS. API из PECL тестить не стал, т.к. разработчик Sphinx пишет, что по его тестам по скорости выигрывает SphinxQL. Его и оставлю.
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Invis1ble
1.10.2013 - 02:53
Случайно нашел причину задержки при коннекте: в hosts не было прописано правило для localhost (который я указывал в коде).
При изменении в коде localhost на 127.0.0.1 или при добавлении localhost в hosts - коннект создается как положено, очень быстро
_____________
Профессиональная разработка на заказЯ на GitHub |
второй профиль
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.