Как агрегировать данные по дням и по-прежнему соблюдать часовой пояс?
в настоящее время мы используем сводную таблицу, которая агрегирует информацию для наших пользователей на почасовой основе в UTC времени. Проблема в том, что эта таблица становится слишком большой и сильно замедляет нашу систему. Мы сделали все методы настройки, рекомендованные для PostgreSQL, и мы все еще испытываем медлительность.
наша идея состояла в том, чтобы начать агрегирование по дням, а не по часам, но проблема в том, что мы позволяем нашим клиентам изменять часовой пояс, который пересчитывает данные за этот день.
кто-нибудь знает способ хранения ежедневной сводки, но по-прежнему уважает цифры и итоги, когда они переключают часовые пояса?
3 ответов
суммировать данные в таблицах со столбцом timeoffset и полем "день" (дата), которое является днем для этой конкретной строки сводки. Индекс on (timeoffset, day, другие соответствующие поля), кластеризованный, если это возможно (предположительно, PostgresSQL имеет кластеризованные индексы?) и все должно быть хорошо.
Я предполагаю, что вы прошли через все соображения секционирования, такие как секционирование пользователем.
Я вижу несколько решений проблемы, в зависимости от схемы использования.
агрегированные данные в день, на выбор пользователя. В случае изменения часового пояса программно пересчитайте агрегат для этого партнера. Это правдоподобно, если изменения часового пояса происходят нечасто и если при изменении пользователя может быть введена определенная задержка в данных часовой пояс.
Если у вас относительно мало мер, вы можете поддерживать 24 столбца для каждой меры - каждый, описывающий ежедневную совокупность для меры в другом часовом поясе.
Если изменения часового пояса часты и существует множество мер, кажется, что 24 различные агрегированные таблицы будут способом пойти.
Я тоже столкнулся с этой проблемой. Я беру это решение: данные с типом даты используют локальный часовой пояс, другие данные с типом datetime используют часовой пояс UTC, потому что индекс статистики является локальным. Еще одна причина-теперь у нас есть только локальные данные.