Как агрегировать данные по дням и по-прежнему соблюдать часовой пояс?

в настоящее время мы используем сводную таблицу, которая агрегирует информацию для наших пользователей на почасовой основе в UTC времени. Проблема в том, что эта таблица становится слишком большой и сильно замедляет нашу систему. Мы сделали все методы настройки, рекомендованные для PostgreSQL, и мы все еще испытываем медлительность.

наша идея состояла в том, чтобы начать агрегирование по дням, а не по часам, но проблема в том, что мы позволяем нашим клиентам изменять часовой пояс, который пересчитывает данные за этот день.

кто-нибудь знает способ хранения ежедневной сводки, но по-прежнему уважает цифры и итоги, когда они переключают часовые пояса?

3 ответов


суммировать данные в таблицах со столбцом timeoffset и полем "день" (дата), которое является днем для этой конкретной строки сводки. Индекс on (timeoffset, day, другие соответствующие поля), кластеризованный, если это возможно (предположительно, PostgresSQL имеет кластеризованные индексы?) и все должно быть хорошо.


Я предполагаю, что вы прошли через все соображения секционирования, такие как секционирование пользователем.

Я вижу несколько решений проблемы, в зависимости от схемы использования.

  1. агрегированные данные в день, на выбор пользователя. В случае изменения часового пояса программно пересчитайте агрегат для этого партнера. Это правдоподобно, если изменения часового пояса происходят нечасто и если при изменении пользователя может быть введена определенная задержка в данных часовой пояс.

  2. Если у вас относительно мало мер, вы можете поддерживать 24 столбца для каждой меры - каждый, описывающий ежедневную совокупность для меры в другом часовом поясе.

  3. Если изменения часового пояса часты и существует множество мер, кажется, что 24 различные агрегированные таблицы будут способом пойти.


Я тоже столкнулся с этой проблемой. Я беру это решение: данные с типом даты используют локальный часовой пояс, другие данные с типом datetime используют часовой пояс UTC, потому что индекс статистики является локальным. Еще одна причина-теперь у нас есть только локальные данные.