Я использую Druid для отслеживания событий на моем сайте. Данные можно представить следующим образом:
event_id | country | user_id | event_type
================================================
1 | USA | id1 | visit
2 | USA | id2 | visit
1 | Canada | id3 | visit
3 | USA | id1 | click
1 | Canada | id4 | visit
3 | Canada | id3 | click
3 | USA | id2 | click
Я также определил агрегацию для подсчета событий. Я сделал запросы к Druid, чтобы представить данные для event_id = 3 следующим образом:
Обратите внимание, посещения не связаны с event_id.
country | visits | clicks
===============================
USA | 4 | 2
Canada | 3 | 2
В настоящее время я использую два запроса topNResults с двумя разными фильтрами:
- event_type = visit -> для подсчета посещений по стране независимо от идентификатора события.
- event_id = 3
Конечно, мои данные намного больше и содержат много стран. api topNResults должен иметь параметр threshold, который представляет максимальное количество результатов, которые я хочу получить в качестве ответа.
Проблема в том, что если мой порог меньше фактических результатов, эти два запроса могут иметь разные результаты по странам.
В настоящее время я объединяю перекрывающиеся результаты на моем сервере, но я теряю результаты для некоторых стран и показываю меньше, чем мой порог, хотя результатов больше.
Что я могу сделать, чтобы оптимизировать, чтобы у меня всегда были одни и те же страны для моего порога (без отправки списка стран, возвращенных из первого запроса, во второй фильтр - я пробовал, и это было очень медленно)?