From f083716071129442dbbc8ccd0d14d6ae75b8594c Mon Sep 17 00:00:00 2001 From: Mikhail Trofimov Date: Wed, 24 Sep 2025 15:10:01 +0300 Subject: [PATCH] optimize updating --- .../credit_tracker/service/SignalService.java | 15 ++++++++++++++- src/main/resources/logback.xml | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java index 4306402..0f3ca72 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java @@ -165,6 +165,7 @@ public class SignalService { public boolean updateFlags(Map fidsMap, Integer packageId) { log.info("Start calculating flags for subjects batch. PackageId: {}", packageId); Map flagsDataMap = flagsService.findFlags(fidsMap.keySet().stream().toList()); + List subjectToUpdate = new ArrayList<>(); for (Map.Entry entry : flagsDataMap.entrySet()) { Integer fid = entry.getKey(); FlagsService.FlagsData flagsData = entry.getValue(); @@ -175,8 +176,20 @@ public class SignalService { phoneFidMap.setFlag90days(flagsData.getFlag90days()); phoneFidMap.setCalculatedAt(LocalDateTime.now()); - phoneFidMapMapper.updatePhoneFid(phoneFidMap); + subjectToUpdate.add(phoneFidMap); } + + log.debug("Start updating subject's batch"); + if (!subjectToUpdate.isEmpty()) { + int updateBatchSize = 7000; // 9 параметров на одну запись для обновления. Максимальное количество параметров ~65000 + for (int j = 0; j < subjectToUpdate.size(); j += updateBatchSize) { + int endIndex = Math.min(j + updateBatchSize, subjectToUpdate.size()); + phoneFidMapService.updatePhoneFidMaps(subjectToUpdate.subList(j, endIndex)); + log.trace("Updated fids and flags for subject's batch from: {} to: {}. Total count: {}. PackageId: {}", j, endIndex, subjectToUpdate.size(), packageId); + } + } + log.debug("Complete updating subject's batch"); + log.info("Finish calculating flags for subjects. PackageId: {}. Batch size: {}", packageId, fidsMap.size()); return !fidsMap.isEmpty(); } diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 5b9cf16..20aa7c4 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -68,7 +68,7 @@ - +