C недавнего времени на Avito.ru появилась контекстная реклама. Миллионы объявлений, из которых нужно в режиме реального времени отобрать несколько релевантных для каждого отдельного пользователя.
Я расскажу о том, как и зачем мы используем миллионы коэффициентов при обработке каждого запроса, почему мы выбрали Sphinx и какие хитрости мы применили, чтобы уложиться в 100 миллисекунд.
Report
Share
Report
Share
1 of 24
Download to read offline
More Related Content
"Успеть за 100 миллисекунд: контекстная реклама на Sphinx" Дмитрий Хасанов (Avito)
1. Успеть за 100 миллисекунд:
контекстная реклама на Sphinx
Дмитрий Хасанов
Avito
16. Хитрости: распределённый индекс
index adverts_distr
{
type = distributed
agent = server1:9312:adverts
agent = server2:9312:adverts
}
update adverts_distr set bid=100 where id=1;
17. Хитрости: подзапросы
select myudf() as sort_slow
from adverts
order by sort_fast desc, sort_slow desc
limit 100
select * from (
select myudf() as sort_slow
from adverts
order by sort_fast desc
limit 100
) order by sort_slow desc
18. Хитрости: мультизапросы
select myudf() from adverts where foo=bar order by sort_1 asc limit 100;
select myudf() from adverts where foo=bar order by sort_2 asc limit 100;
19. Хитрости: индекс для атрибутов
Медленно:
select * from adverts where category_id=109;
Быстро:
select * from adverts where match('cat_109');