powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Агрегация данных по дате
6 сообщений из 6, страница 1 из 1
Агрегация данных по дате
    #34838928
TheUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Система - биллинг. Необходимо каждое действие со счетом отражать в таблице или приходом (запись со знаком +) или расходом (с минусом :-) ). Актуальное состояние счета на конкретную дату планируется получать суммированием.

Безусловно, суммировать всю историю изменения счета глупо. Поэтому целесообразно применить агрегацию, т.е. расчеты по состоянию на какую-то дату. В результате получение состояния счета сведется к суммированию изменений с даты последней агрегации, меньшей требуемой даты, по требуемую дату.
Возникла резонная мысль: а не делает ли это СУБД самостоятельно, неявно? И насколько оправдан такой подход расчета?
Информация: изменений счета за сутки может быть до десятков миллионов раз. СУБД Postgresql
...
Рейтинг: 0 / 0
Агрегация данных по дате
    #34839147
msa@n-e.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TheUserСистема - биллинг. Необходимо каждое действие со счетом отражать в таблице или приходом (запись со знаком +) или расходом (с минусом :-) ). Актуальное состояние счета на конкретную дату планируется получать суммированием.

Безусловно, суммировать всю историю изменения счета глупо. Поэтому целесообразно применить агрегацию, т.е. расчеты по состоянию на какую-то дату. В результате получение состояния счета сведется к суммированию изменений с даты последней агрегации, меньшей требуемой даты, по требуемую дату.
Возникла резонная мысль: а не делает ли это СУБД самостоятельно, неявно? И насколько оправдан такой подход расчета?
Информация: изменений счета за сутки может быть до десятков миллионов раз. СУБД Postgresql

Обычно в подобных (биллинговых) системах сохраняется состояние счета на каждый день
...
Рейтинг: 0 / 0
Агрегация данных по дате
    #34839336
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TheUser
Возникла резонная мысль: а не делает ли это СУБД самостоятельно, неявно?

Не слыхал! Если кто-то делает, вы и с нами поделитесь инфой !!!
...
Рейтинг: 0 / 0
Агрегация данных по дате
    #34839921
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Postgresql насколько я знаю не имеет materialized view + query rewriting.
Но даже там, где оно есть, фича не настолько продвинута, чтобы решать алгебраические уравнения.
Добиться результата наверно можно, однако нужно будет в своем запросе практически открытым текстом упомянуть запрос того materialized view, которое хотим использовать.
Какой от этого прок - не видно. Проще руками.
...
Рейтинг: 0 / 0
Агрегация данных по дате
    #34840145
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TheUserВозникла резонная мысль: а не делает ли это СУБД самостоятельно, неявно? И насколько оправдан такой подход расчета?
Информация: изменений счета за сутки может быть до десятков миллионов раз. СУБД Postgresql
Подход типичный - остатки на конкретную дату = аггрегированные остатки на начало периода (регистры остатков) + обороты за период.
Период аггрегации выбирается в соответствии с нарузкой на систему.
Регистры остатков могут быть многоуровневыми (1-час/2-день/3-месяц...)
помимо материализованных вью (oracle) и индексированных вью (mssql), часто для подобной задачи применяют OLAP (ROLAP).
Однако, в биллинге материализованные и индексированные вью не самое лучшее решение, т.к. любая операция по изменению данных вызывает перестройку этого вью.
Чаще все так и регистры создаются по заданию при закрытии периода, к тому же с объемами данных в биллинге гораздо важнее оптимизировать таблицы оперативных данных (таблицы движений), например, секционированием (partitioned view, partitioned table).
А секционирование + индексированные вью на одних и тех же таблицах - очень сомнительное мероприятие...
...
Рейтинг: 0 / 0
Агрегация данных по дате
    #34851744
NoGuest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TheUserИнформация: изменений счета за сутки может быть до десятков миллионов раз. СУБД PostgresqlВ системах биллинга есть два хороших решения. Первое - разделение таблицы базы данных на три. В одной хранятся сырые данные за сегодня, во второй - за всю остальную историю, в третьей - агрегированные данные. Ночью, часа в три-четыре, данные за вчерашний день переносятся из первой таблицы во вторую.

Второй подход связан с помещением агрегированных данных о текущем состоянии счётов в память и прибавлении-вычитании сумм реальном времени плюс ведении plain-text логов о транзакциях. Например, счётчики для аккаунтов всей Москвы уместятся в 4*10 млн.*2 = 80 Мб, всей России в 4*150 млн.*2 = 1,2 Гб. Это с учётом 2 аккаунтов на человека и хранения значений типа int32. Нагрузка будет держаться до 50 тыс. записей в секунду, самая медленная подсистема - жёсткий диск.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Агрегация данных по дате
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]