From c595e509ec4c4471f88ae828c3481e375048d332 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Tue, 5 Nov 2024 14:38:15 +0200 Subject: [PATCH] RED-10392 RED-10395 Improved component mapping query speed and performance for analysisRequired on FileStatus & Added Indexes --- .../ReanalysisRequiredStatusService.java | 18 ++++++---- .../db/changelog/db.changelog-tenant.yaml | 2 ++ .../150-add-component-mapping-indexes.yaml | 34 +++++++++++++++++++ 3 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/150-add-component-mapping-indexes.yaml diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java index 9a3233464..3022b84a8 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ReanalysisRequiredStatusService.java @@ -60,8 +60,9 @@ public class ReanalysisRequiredStatusService { Map> dossierTemplateVersionMap = new HashMap<>(); Map dossierVersionMap = new HashMap<>(); Map dossierMap = new HashMap<>(); + Map> componentMappingVersionMap = new HashMap<>(); fileModels.forEach(entry -> { - var analysisRequiredResult = computeAnalysisRequired(entry, ignoreProcessingStates, dossierTemplateVersionMap, dossierVersionMap, dossierMap); + var analysisRequiredResult = computeAnalysisRequired(entry, ignoreProcessingStates, dossierTemplateVersionMap, dossierVersionMap, dossierMap, componentMappingVersionMap); entry.setReanalysisRequired(analysisRequiredResult.isReanalysisRequired()); entry.setFullAnalysisRequired(analysisRequiredResult.isFullAnalysisRequired()); entry.setComponentReanalysisRequired(analysisRequiredResult.isComponentReanalysisRequired()); @@ -75,7 +76,8 @@ public class ReanalysisRequiredStatusService { boolean ignoreProcessingStates, Map> dossierTemplateVersionMap, Map dossierVersionMap, - Map dossierMap) { + Map dossierMap, + Map> componentMappingVersionMap) { // enhance with dossierTemplateId DossierEntity dossier; @@ -118,7 +120,7 @@ public class ReanalysisRequiredStatusService { if (fileStatus.getLastFileAttributeChange() != null && fileStatus.getLastProcessed().isBefore(fileStatus.getLastFileAttributeChange())) { return new AnalysisRequiredResult(true, false); } else { - return requiresReanalysisBasedOnVersionDifference(fileStatus, dossier, dossierTemplateVersionMap, dossierVersionMap); + return requiresReanalysisBasedOnVersionDifference(fileStatus, dossier, dossierTemplateVersionMap, dossierVersionMap,componentMappingVersionMap); } default: return new AnalysisRequiredResult(false, false); @@ -132,15 +134,17 @@ public class ReanalysisRequiredStatusService { private AnalysisRequiredResult requiresReanalysisBasedOnVersionDifference(FileModel fileStatus, DossierEntity dossier, Map> dossierTemplateVersionMap, - Map dossierVersionMap) { + Map dossierVersionMap, + Map> componentMappingVersionMap) { // get relevant versions Map dossierTemplateVersions = dossierTemplateVersionMap.computeIfAbsent(dossier.getDossierTemplateId(), k -> buildVersionData(dossier.getDossierTemplateId())); - Map componentMappingVersions = componentMappingService.getMetaDataByDossierTemplateId(dossier.getDossierTemplateId()) - .stream() - .collect(Collectors.toMap(ComponentMappingMetadata::getName, ComponentMappingMetadata::getVersion)); + Map componentMappingVersions = componentMappingVersionMap.computeIfAbsent(dossier.getDossierTemplateId(), + k -> componentMappingService.getMetaDataByDossierTemplateId(dossier.getDossierTemplateId()) + .stream() + .collect(Collectors.toMap(ComponentMappingMetadata::getName, ComponentMappingMetadata::getVersion))); Long dossierDictionaryVersion = dossierVersionMap.computeIfAbsent(fileStatus.getDossierId(), k -> getDossierVersionData(fileStatus.getDossierId())); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml index ae1a60634..4c8dc51a1 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml @@ -243,3 +243,5 @@ databaseChangeLog: file: db/changelog/tenant/149-remove-based-on-dict-annotation-id-columns.yaml - include: file: db/changelog/tenant/149-add-indexes-across-tables-for-performance.yaml + - include: + file: db/changelog/tenant/150-add-component-mapping-indexes.yaml diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/150-add-component-mapping-indexes.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/150-add-component-mapping-indexes.yaml new file mode 100644 index 000000000..aee3dd427 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/150-add-component-mapping-indexes.yaml @@ -0,0 +1,34 @@ +databaseChangeLog: + - changeSet: + id: create_index_if_not_exists_idx_component_mappings_dossier_template_id + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_component_mappings_dossier_template_id + tableName: component_mappings + changes: + - createIndex: + tableName: component_mappings + indexName: idx_component_mappings_dossier_template_id + columns: + - column: + name: dossier_template_id + + - changeSet: + id: create_index_if_not_exists_idx_component_mappings_dossier_template_id_name + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_component_mappings_dossier_template_id_name + tableName: component_mappings + changes: + - createIndex: + tableName: component_mappings + indexName: idx_component_mappings_dossier_template_id_name + columns: + - column: + name: dossier_template_id + - column: + name: name