From 719e5d25e373bc40109581cb99e64925eca8b7e5 Mon Sep 17 00:00:00 2001 From: Karthik Date: Mon, 10 Jul 2023 12:25:04 -0400 Subject: [PATCH] Improve treatment data api performance --- db-scripts/src/main/resources/cgds.sql | 2 +- db-scripts/src/main/resources/migration.sql | 6 +++++ .../persistence/TreatmentRepository.java | 4 ++-- .../persistence/mybatis/TreatmentMapper.java | 4 ++-- .../mybatis/TreatmentMyBatisRepository.java | 8 +++---- .../persistence/mybatis/TreatmentMapper.xml | 24 ++++++++++--------- .../TreatmentMyBatisRepositoryTest.java | 12 ++++------ pom.xml | 2 +- .../service/impl/TreatmentServiceImpl.java | 23 +++++++++--------- 9 files changed, 45 insertions(+), 40 deletions(-) diff --git a/db-scripts/src/main/resources/cgds.sql b/db-scripts/src/main/resources/cgds.sql index c0b20e8b6cd..2971b3d1be6 100644 --- a/db-scripts/src/main/resources/cgds.sql +++ b/db-scripts/src/main/resources/cgds.sql @@ -755,5 +755,5 @@ CREATE TABLE `resource_study` ( ); -- THIS MUST BE KEPT IN SYNC WITH db.version PROPERTY IN pom.xml -INSERT INTO info VALUES ('2.13.0', NULL); +INSERT INTO info VALUES ('2.13.1', NULL); diff --git a/db-scripts/src/main/resources/migration.sql b/db-scripts/src/main/resources/migration.sql index dfec6a97381..eb649e95a17 100644 --- a/db-scripts/src/main/resources/migration.sql +++ b/db-scripts/src/main/resources/migration.sql @@ -1021,3 +1021,9 @@ ALTER TABLE `mutation_event` CHANGE COLUMN `ONCOTATOR_PROTEIN_POS_START` `PROTEI ALTER TABLE `mutation_event` CHANGE COLUMN `ONCOTATOR_PROTEIN_POS_END` `PROTEIN_POS_END` int(11); UPDATE `info` SET `DB_SCHEMA_VERSION`="2.13.0"; + +##version: 2.13.1 +ALTER TABLE `clinical_event_data` MODIFY COLUMN `VALUE` varchar(3000) NOT NULL; +CREATE INDEX idx_clinical_event_key ON clinical_event_data (`KEY`); +CREATE INDEX idx_clinical_event_value ON clinical_event_data (`VALUE`); +UPDATE `info` SET `DB_SCHEMA_VERSION`="2.13.1"; \ No newline at end of file diff --git a/persistence/persistence-api/src/main/java/org/cbioportal/persistence/TreatmentRepository.java b/persistence/persistence-api/src/main/java/org/cbioportal/persistence/TreatmentRepository.java index 83fb9e1fedb..99011ef74c8 100644 --- a/persistence/persistence-api/src/main/java/org/cbioportal/persistence/TreatmentRepository.java +++ b/persistence/persistence-api/src/main/java/org/cbioportal/persistence/TreatmentRepository.java @@ -23,10 +23,10 @@ public interface TreatmentRepository { public Set getAllUniqueTreatments(List sampleIds, List studyIds, ClinicalEventKeyCode key); @Cacheable(cacheResolver = "generalRepositoryCacheResolver", condition = "@cacheEnabledConfig.getEnabled()") - public Integer getTreatmentCount(List studies, String key); + public Boolean hasTreatmentData(List studies, String key); @Cacheable(cacheResolver = "generalRepositoryCacheResolver", condition = "@cacheEnabledConfig.getEnabled()") - public Integer getSampleCount(List studies); + public Boolean hasSampleTimelineData(List studies); @Cacheable(cacheResolver = "generalRepositoryCacheResolver", condition = "@cacheEnabledConfig.getEnabled()") public Boolean studyIdHasTreatments(String studyId, ClinicalEventKeyCode key); diff --git a/persistence/persistence-mybatis/src/main/java/org/cbioportal/persistence/mybatis/TreatmentMapper.java b/persistence/persistence-mybatis/src/main/java/org/cbioportal/persistence/mybatis/TreatmentMapper.java index 6d748341dbd..b92b086e21e 100644 --- a/persistence/persistence-mybatis/src/main/java/org/cbioportal/persistence/mybatis/TreatmentMapper.java +++ b/persistence/persistence-mybatis/src/main/java/org/cbioportal/persistence/mybatis/TreatmentMapper.java @@ -15,9 +15,9 @@ public interface TreatmentMapper { Set getAllUniqueTreatments(List sampleIds, List studyIds, String key); - Integer getTreatmentCount(List sampleIds, List studyIds, String key); + Boolean hasTreatmentData(List sampleIds, List studyIds, String key); - Integer getSampleCount(List sampleIds, List studyIds); + Boolean hasSampleTimelineData(List sampleIds, List studyIds); Boolean studyIdHasTreatments(String studyId, String key); } diff --git a/persistence/persistence-mybatis/src/main/java/org/cbioportal/persistence/mybatis/TreatmentMyBatisRepository.java b/persistence/persistence-mybatis/src/main/java/org/cbioportal/persistence/mybatis/TreatmentMyBatisRepository.java index efa6efb27a9..768d3a0b7d1 100644 --- a/persistence/persistence-mybatis/src/main/java/org/cbioportal/persistence/mybatis/TreatmentMyBatisRepository.java +++ b/persistence/persistence-mybatis/src/main/java/org/cbioportal/persistence/mybatis/TreatmentMyBatisRepository.java @@ -75,13 +75,13 @@ public Set getAllUniqueTreatments(List sampleIds, List s } @Override - public Integer getTreatmentCount(List studies, String key) { - return treatmentMapper.getTreatmentCount(null, studies, key); + public Boolean hasTreatmentData(List studies, String key) { + return treatmentMapper.hasTreatmentData(null, studies, key); } @Override - public Integer getSampleCount(List studies) { - return treatmentMapper.getSampleCount(null, studies); + public Boolean hasSampleTimelineData(List studies) { + return treatmentMapper.hasSampleTimelineData(null, studies); } @Override diff --git a/persistence/persistence-mybatis/src/main/resources/org/cbioportal/persistence/mybatis/TreatmentMapper.xml b/persistence/persistence-mybatis/src/main/resources/org/cbioportal/persistence/mybatis/TreatmentMapper.xml index a9976f44d3a..3a4aa1a6ad9 100644 --- a/persistence/persistence-mybatis/src/main/resources/org/cbioportal/persistence/mybatis/TreatmentMapper.xml +++ b/persistence/persistence-mybatis/src/main/resources/org/cbioportal/persistence/mybatis/TreatmentMapper.xml @@ -61,9 +61,9 @@ AND clinical_event_data.KEY = #{key} - + SELECT EXISTS(SELECT + * FROM clinical_event INNER JOIN clinical_event_data ON clinical_event.CLINICAL_EVENT_ID = clinical_event_data.CLINICAL_EVENT_ID @@ -71,12 +71,13 @@ INNER JOIN sample ON patient.INTERNAL_ID = sample.PATIENT_ID INNER JOIN cancer_study ON patient.CANCER_STUDY_ID = cancer_study.CANCER_STUDY_ID - AND clinical_event_data.KEY = #{key} + AND clinical_event_data.KEY = #{key} LIMIT 1 + ) - + SELECT EXISTS(SELECT + * FROM clinical_event INNER JOIN clinical_event_data ON clinical_event.CLINICAL_EVENT_ID = clinical_event_data.CLINICAL_EVENT_ID @@ -85,12 +86,13 @@ INNER JOIN cancer_study ON patient.CANCER_STUDY_ID = cancer_study.CANCER_STUDY_ID AND clinical_event_data.KEY = 'SAMPLE_ID' - AND (clinical_event.EVENT_TYPE LIKE 'Sample Acquisition' OR clinical_event.EVENT_TYPE LIKE 'SPECIMEN') + AND (clinical_event.EVENT_TYPE LIKE 'Sample Acquisition' OR clinical_event.EVENT_TYPE LIKE 'SPECIMEN') LIMIT 1) + diff --git a/persistence/persistence-mybatis/src/test/java/org/cbioportal/persistence/mybatis/TreatmentMyBatisRepositoryTest.java b/persistence/persistence-mybatis/src/test/java/org/cbioportal/persistence/mybatis/TreatmentMyBatisRepositoryTest.java index 0ebf28a7405..5f4e0bcd1b0 100644 --- a/persistence/persistence-mybatis/src/test/java/org/cbioportal/persistence/mybatis/TreatmentMyBatisRepositoryTest.java +++ b/persistence/persistence-mybatis/src/test/java/org/cbioportal/persistence/mybatis/TreatmentMyBatisRepositoryTest.java @@ -147,19 +147,17 @@ public void getAllUniqueTreatments() { } @Test - public void getTreatmentCount() { - Integer expected = 1; - Integer actual = treatmentRepository.getTreatmentCount(Collections.singletonList("study_tcga_pub"), ClinicalEventKeyCode.Agent.getKey()); + public void hasTreatmentData() { + Boolean actual = treatmentRepository.hasTreatmentData(Collections.singletonList("study_tcga_pub"), ClinicalEventKeyCode.Agent.getKey()); - Assert.assertEquals(actual, expected); + Assert.assertEquals(actual, true); } @Test public void getSampleCount() { - Integer expected = 2; - Integer actual = treatmentRepository.getSampleCount(Collections.singletonList("study_tcga_pub")); + Boolean actual = treatmentRepository.hasSampleTimelineData(Collections.singletonList("study_tcga_pub")); - Assert.assertEquals(actual, expected); + Assert.assertEquals(actual, true); } } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 56c2b78fed7..ce9685c8f5f 100644 --- a/pom.xml +++ b/pom.xml @@ -314,7 +314,7 @@ 720 - 2.13.0 + 2.13.1 diff --git a/service/src/main/java/org/cbioportal/service/impl/TreatmentServiceImpl.java b/service/src/main/java/org/cbioportal/service/impl/TreatmentServiceImpl.java index 439f94ce20c..0409fac2e52 100644 --- a/service/src/main/java/org/cbioportal/service/impl/TreatmentServiceImpl.java +++ b/service/src/main/java/org/cbioportal/service/impl/TreatmentServiceImpl.java @@ -12,7 +12,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.*; @Service public class TreatmentServiceImpl implements TreatmentService { @@ -40,16 +40,16 @@ private Pair, List> filterIds(List sampleIds, List< } return new ImmutablePair<>(filteredSampleIds, filteredStudyIds); } - + @Override public List getAllSampleTreatmentRows(List sampleIds, List studyIds, ClinicalEventKeyCode key) { Pair, List> filteredIds = filterIds(sampleIds, studyIds, key); sampleIds = filteredIds.getLeft(); studyIds = filteredIds.getRight(); - Map> samplesByPatient = + Map> samplesByPatient = treatmentRepository.getSamplesByPatientId(sampleIds, studyIds); - Map> treatmentsByPatient = + Map> treatmentsByPatient = treatmentRepository.getTreatmentsByPatientId(sampleIds, studyIds, key); Stream rows = samplesByPatient.keySet().stream() @@ -150,7 +150,6 @@ Stream toRows() { ); } } - @Override public List getAllPatientTreatmentRows( List sampleIds, List studyIds, ClinicalEventKeyCode key @@ -158,8 +157,8 @@ public List getAllPatientTreatmentRows( Pair, List> filteredIds = filterIds(sampleIds, studyIds, key); sampleIds = filteredIds.getLeft(); studyIds = filteredIds.getRight(); - - Map> treatmentsByPatient = + + Map> treatmentsByPatient = treatmentRepository.getTreatmentsByPatientId(sampleIds, studyIds, key); Map> samplesByPatient = treatmentRepository .getShallowSamplesByPatientId(sampleIds, studyIds) @@ -204,7 +203,7 @@ private List>> matchingPatients( @Override public Boolean containsTreatmentData(List studies, ClinicalEventKeyCode key) { - return treatmentRepository.getTreatmentCount(studies, key.getKey()) > 0; + return treatmentRepository.hasTreatmentData(studies, key.getKey()); } @Override @@ -212,9 +211,9 @@ public Boolean containsSampleTreatmentData(List studyIds, ClinicalEventK studyIds = studyIds.stream() .filter(studyId -> treatmentRepository.studyIdHasTreatments(studyId, key)) .collect(Collectors.toList()); - Integer sampleCount = treatmentRepository.getSampleCount(studyIds); - Integer treatmentCount = treatmentRepository.getTreatmentCount(studyIds, key.getKey()); - - return sampleCount * treatmentCount > 0; + if(studyIds.size() > 0 && treatmentRepository.hasSampleTimelineData(studyIds)) { + return treatmentRepository.hasTreatmentData(studyIds, key.getKey()); + } + return false; } }