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 82db9efe7..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 @@ -241,3 +241,7 @@ databaseChangeLog: file: db/changelog/tenant/148-add-quotechar-to-component-mapping.yaml - include: 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/149-add-indexes-across-tables-for-performance.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/149-add-indexes-across-tables-for-performance.yaml new file mode 100644 index 000000000..40f8645d2 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/149-add-indexes-across-tables-for-performance.yaml @@ -0,0 +1,220 @@ +databaseChangeLog: + - changeSet: + id: create_index_if_not_exists_idx_file_last_updated + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_file_last_updated + tableName: file + changes: + - createIndex: + tableName: file + indexName: idx_file_last_updated + columns: + - column: + name: last_updated + + - changeSet: + id: create_index_if_not_exists_idx_file_deleted_hard_deleted_time + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_file_deleted_hard_deleted_time + tableName: file + changes: + - createIndex: + tableName: file + indexName: idx_file_deleted_hard_deleted_time + columns: + - column: + name: deleted + - column: + name: hard_deleted_time + + - changeSet: + id: create_index_if_not_exists_idx_file_dossier_id_deleted_hard_deleted_time + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_file_dossier_id_deleted_hard_deleted_time + tableName: file + changes: + - createIndex: + tableName: file + indexName: idx_file_dossier_id_deleted_hard_deleted_time + columns: + - column: + name: dossier_id + - column: + name: deleted + - column: + name: hard_deleted_time + + - changeSet: + id: create_index_if_not_exists_idx_dossier_last_updated + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_dossier_last_updated + tableName: dossier + changes: + - createIndex: + tableName: dossier + indexName: idx_dossier_last_updated + columns: + - column: + name: last_updated + + - changeSet: + id: create_index_if_not_exists_idx_dossier_soft_deleted_time_hard_deleted_time + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_dossier_soft_deleted_time_hard_deleted_time + tableName: dossier + changes: + - createIndex: + tableName: dossier + indexName: idx_dossier_soft_deleted_time_hard_deleted_time + columns: + - column: + name: soft_deleted_time + - column: + name: hard_deleted_time + + - changeSet: + id: create_index_if_not_exists_idx_dossier_id_soft_deleted_time_hard_deleted_time + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_dossier_id_soft_deleted_time_hard_deleted_time + tableName: dossier + changes: + - createIndex: + tableName: dossier + indexName: idx_dossier_id_soft_deleted_time_hard_deleted_time + columns: + - column: + name: id + - column: + name: soft_deleted_time + - column: + name: hard_deleted_time + + - changeSet: + id: create_index_if_not_exists_idx_dossier_soft_deleted_time_hard_deleted_time_archived_time + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_dossier_soft_deleted_time_hard_deleted_time_archived_time + tableName: dossier + changes: + - createIndex: + tableName: dossier + indexName: idx_dossier_soft_deleted_time_hard_deleted_time_archived_time + columns: + - column: + name: soft_deleted_time + - column: + name: hard_deleted_time + - column: + name: archived_time + + - changeSet: + id: create_index_if_not_exists_idx_dossier_dossier_template_id_soft_deleted_time_hard_deleted_time_archived_time + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_dossier_dossier_template_id_soft_deleted_time_hard_deleted_time_archived_time + tableName: dossier + changes: + - createIndex: + tableName: dossier + indexName: idx_dossier_dossier_template_id_soft_deleted_time_hard_deleted_time_archived_time + columns: + - column: + name: dossier_template_id + - column: + name: soft_deleted_time + - column: + name: hard_deleted_time + - column: + name: archived_time + + - changeSet: + id: create_index_if_not_exists_idx_notification_preference_user_id_in_app_notifications_enabled + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_notification_preference_user_id_in_app_notifications_enabled + tableName: notification_preference + changes: + - createIndex: + tableName: notification_preference + indexName: idx_notification_preference_user_id_in_app_notifications_enabled + columns: + - column: + name: user_id + - column: + name: in_app_notifications_enabled + + - changeSet: + id: create_index_if_not_exists_idx_notification_user_id_creation_date_soft_deleted + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_notification_user_id_creation_date_soft_deleted + tableName: notification + changes: + - createIndex: + tableName: notification + indexName: idx_notification_user_id_creation_date_soft_deleted + columns: + - column: + name: user_id + - column: + name: creation_date + - column: + name: soft_deleted + + - changeSet: + id: create_index_if_not_exists_idx_entity_dossier_template_id + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_entity_dossier_template_id + tableName: entity + changes: + - createIndex: + tableName: entity + indexName: idx_entity_dossier_template_id + columns: + - column: + name: dossier_template_id + + - changeSet: + id: create_index_if_not_exists_idx_entity_dossier_id + author: Timo + preConditions: + - not: + indexExists: + indexName: idx_entity_dossier_id + tableName: entity + changes: + - createIndex: + tableName: entity + indexName: idx_entity_dossier_id + columns: + - column: + name: dossier_id 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