optimize updating

This commit is contained in:
Mikhail Trofimov 2025-09-24 15:10:01 +03:00
parent 669236e696
commit f083716071
2 changed files with 15 additions and 2 deletions

View file

@ -165,6 +165,7 @@ public class SignalService {
public boolean updateFlags(Map<Integer, PhoneFidMap> fidsMap, Integer packageId) { public boolean updateFlags(Map<Integer, PhoneFidMap> fidsMap, Integer packageId) {
log.info("Start calculating flags for subjects batch. PackageId: {}", packageId); log.info("Start calculating flags for subjects batch. PackageId: {}", packageId);
Map<Integer, FlagsService.FlagsData> flagsDataMap = flagsService.findFlags(fidsMap.keySet().stream().toList()); Map<Integer, FlagsService.FlagsData> flagsDataMap = flagsService.findFlags(fidsMap.keySet().stream().toList());
List<PhoneFidMap> subjectToUpdate = new ArrayList<>();
for (Map.Entry<Integer, FlagsService.FlagsData> entry : flagsDataMap.entrySet()) { for (Map.Entry<Integer, FlagsService.FlagsData> entry : flagsDataMap.entrySet()) {
Integer fid = entry.getKey(); Integer fid = entry.getKey();
FlagsService.FlagsData flagsData = entry.getValue(); FlagsService.FlagsData flagsData = entry.getValue();
@ -175,8 +176,20 @@ public class SignalService {
phoneFidMap.setFlag90days(flagsData.getFlag90days()); phoneFidMap.setFlag90days(flagsData.getFlag90days());
phoneFidMap.setCalculatedAt(LocalDateTime.now()); 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()); log.info("Finish calculating flags for subjects. PackageId: {}. Batch size: {}", packageId, fidsMap.size());
return !fidsMap.isEmpty(); return !fidsMap.isEmpty();
} }

View file

@ -68,7 +68,7 @@
<appender-ref ref="FILE-JSON"/> <appender-ref ref="FILE-JSON"/>
</logger> </logger>
<logger name="ru.nbch.credit_tracker.service" level="DEBUG" additivity="false"> <logger name="ru.nbch.credit_tracker.service" level="TRACE" additivity="false">
<appender-ref ref="FILE"/> <appender-ref ref="FILE"/>
<appender-ref ref="FILE-JSON"/> <appender-ref ref="FILE-JSON"/>
<appender-ref ref="CONSOLE"/> <appender-ref ref="CONSOLE"/>