Lifeline
Новичок
Есть классическая банерная сеть.
Допустим 1М баннеров
100 кейвордов (со связями баннер - кейворды)
и 100 стран
у каждого баннера есть данные по ЦТР , кейводы и какие страны должны видеть этот баннер
При запросе баннера система проверяет кейворды и страны , получает список баннеров подходящих под эти кейворды и должна показать лучший из них, который данный пользователь еще не видел.
В лоб задача очень простая: условно
select ... from banners where keyword like ...
and country = ...
and banner not in (что пользователь уже видел)
order by banner_ctr
Проблема возникает при выносе этих данных в кеш (условно мемкеш, редис и тп - не важно).
1. В лоб - собрать 100 * 100 массивов с баннерами по крону - нереально.
2. Кешить выборки из базы - слишком низкая эффективность, те при редкой стране и кейворде оно фактически не будет кешится (между запросами будет большой промежутов и данные будут экспарится)
Чувствую есть какой-то вариант индексировать один или несколько наборов данных в памяти и искать в нужной их части, но не знаю в какую сторону смотреть.
Требуется помощь сообщества в этой логической задачки.
Заранее спасибо.
Допустим 1М баннеров
100 кейвордов (со связями баннер - кейворды)
и 100 стран
у каждого баннера есть данные по ЦТР , кейводы и какие страны должны видеть этот баннер
При запросе баннера система проверяет кейворды и страны , получает список баннеров подходящих под эти кейворды и должна показать лучший из них, который данный пользователь еще не видел.
В лоб задача очень простая: условно
select ... from banners where keyword like ...
and country = ...
and banner not in (что пользователь уже видел)
order by banner_ctr
Проблема возникает при выносе этих данных в кеш (условно мемкеш, редис и тп - не важно).
1. В лоб - собрать 100 * 100 массивов с баннерами по крону - нереально.
2. Кешить выборки из базы - слишком низкая эффективность, те при редкой стране и кейворде оно фактически не будет кешится (между запросами будет большой промежутов и данные будут экспарится)
Чувствую есть какой-то вариант индексировать один или несколько наборов данных в памяти и искать в нужной их части, но не знаю в какую сторону смотреть.
Требуется помощь сообщества в этой логической задачки.
Заранее спасибо.