У меня есть таблица отправленных предупреждений, как показано ниже:
id | user_id | sent_at
1 | 123 | 01/01/2020 12:09:39
2 | 452 | 04/01/2020 02:39:50
3 | 264 | 11/01/2020 05:09:39
4 | 123 | 16/01/2020 11:09:39
5 | 452 | 22/01/2020 16:09:39
Оповещения редки, и у меня около 100 миллионов user_ids. Эта таблица содержит около 500 миллионов записей (за последние 2 месяца).
Я хочу запросить предупреждения для пользователя за последние X часов / дней / недель / месяцев для 10 миллионов users_ids (сохраненных в другой таблице). Я не могу использовать какую-либо внешнюю базу данных временных рядов, и это должно быть сделано только в postgres.
Я пытался хранить почасовые корзины для каждого пользователя. Но данные настолько скудны, что у меня слишком много строк (userIds * hours). Например, Получение оповещений для 10 миллионов пользователей за последние 10 часов занимает много времени из этой таблицы.
user_id | hour | count
123 | 01/01/2020 12:00:00 | 2
123 | 01/01/2020 10:00:00 | 1
234 | 11/01/2020 12:00:00 | 1