powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Организация нормальной скорости чтения/запись огромных таблиц
2 сообщений из 2, страница 1 из 1
Организация нормальной скорости чтения/запись огромных таблиц
    #40138155
Лёнька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, форумчане.

Прошу помощи в деликатном вопросе: как организовать хранение данных. Есть процедура на Java, которая должна очень быстро выбирать данные, выполнять расчёт и сохранять обновления в эти же таблицы. Заранее прошу прощения, если мой вопрос кажется глупым.
Ниже будут 2 раздела. Один раздел - краткое описание. Другой раздел - подробное описание.

Краткое описание
Имеем таблицу движений (поступлений и трат), сгруппированных по распределению (в одном распределении от 1 до нескольких трат и поступлений).
Screenshot_1.png
Также имеем таблицу состояния счетов на момент окончания распределения. В этой таблице хранятся 2 типа записей: стандартные (insert) и пересчитанные (update)
Screenshot_2.png
Задача следующая:
Периодически поступают заявки по номеру счёта пересчитать бенефиты распределения и бенефиты счетов, участвовавших в транзакциях, на момент после распределения.
1. То есть в начале выполнения заявки имеем номер счёта.
2. Далее по номеру счёта необходимо найти все траты с него и все поступления на него (хранятся в таблице fund_movements). Получили. Также
3. берём все все траты и поступления в найденных распределениях.
4. Собрав целиком распределения, мы для каждого счёта-участника берём по previous_movement_number состояние счёта из таблицы account_properties.
Таким образом, мы по начальному условию "счёт" получили все распределения и состояния счетов на момент ДО распределения.

5. Затем мы по неким формулам всё пересчитываем и получаем новые значения для fund_movements.movement_benefit и для account_properties.participation_benefit_1, account_properties.participation_benefit_2, account_properties.participation_benefit_3.
6. Расчёт окончен. Теперь надо сохранить: обновляем fund_movements.movement_benefit и вставляем записи с новым состоянием счетов в account_properties. Если уже есть записи с типом "update" для этих счетов по этим распределениям в account_properties, то не вставляем, а обновляем их.
7. Но это ещё не всё. Теперь по всем счетам, по которым были поступления в наших распределениях, требуется запустить весь цикл заново. И так ещё 2 раза. То есть получается что-то типа распространения пересчёта по цепочке на глубину в 4 уровня.

Вся ситуация осложняется тем, что кол-во записей в fund_movements - около 2 млрд записей (1.5 ТБ), а в account_properties около 9 млрд записей (не помню сколько ГБ).

Подробное описание
в процессе

Итог
Задача стоит пересчитывать максимально быстро на возможностях постгреса. Постгрес PostgreSQL 13.6.

Почему вместо DDL-скриптов скриншоты ексельника? Потому что задача промышленная, не могу светить реальные структуры данных и переименовал. Если требуется, то сгенерю скрипты создания таблиц и приложу - только скажите.
Заранее всем спасибо за советы/рекомендации.
...
Изменено: 18.10.2023, 18:45 - Лёнька
Рейтинг: 0 / 0
Организация нормальной скорости чтения/запись огромных таблиц
    #40138468
ZiBnv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лёнька [игнорируется] 

Почитайте про индексы в PostgreSQL, это именно то что вам нужно
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Организация нормальной скорости чтения/запись огромных таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (6): Анонимы (4), Bing Bot 2 мин., Yandex Bot 2 мин.
x
x
Закрыть


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