Skip to content
This repository was archived by the owner on Aug 1, 2025. It is now read-only.

Commit 43c67e6

Browse files
authored
Merge pull request #11 from Breeding-Insight/bug/BI-1771
[BI-1771] - Germplasm read/write performance
2 parents 7f64183 + deb9572 commit 43c67e6

File tree

3 files changed

+31
-12
lines changed

3 files changed

+31
-12
lines changed

src/main/java/org/brapi/test/BrAPITestServer/service/germ/GermplasmService.java

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -198,17 +198,19 @@ public Germplasm updateGermplasm(String germplasmDbId, GermplasmNewRequest body)
198198
return convertFromEntity(savedEntity);
199199
}
200200

201+
// TODO: evaluate performance!
201202
public List<Germplasm> saveGermplasm(@Valid List<GermplasmNewRequest> body) throws BrAPIServerException {
202-
List<Germplasm> savedGermplasm = new ArrayList<>();
203-
203+
List<GermplasmEntity> toSave = new ArrayList<>();
204204
for (GermplasmNewRequest germplasm : body) {
205205
GermplasmEntity entity = new GermplasmEntity();
206-
updateEntity(entity, germplasm);
207-
GermplasmEntity savedEntity = germplasmRepository.saveAndFlush(entity);
208-
savedGermplasm.add(convertFromEntity(savedEntity));
209-
}
210-
211-
return savedGermplasm;
206+
updateEntity(entity, germplasm); // TODO: does updateEntity need to hit the database?
207+
toSave.add(entity);
208+
}
209+
// Save batch.
210+
return germplasmRepository.saveAllAndFlush(toSave)
211+
.stream()
212+
.map(this::convertFromEntity)
213+
.collect(Collectors.toList());
212214
}
213215

214216
private Germplasm convertFromEntity(GermplasmEntity entity) {
@@ -280,13 +282,17 @@ private void updateEntity(GermplasmEntity entity, GermplasmNewRequest request) t
280282
if (request.getBiologicalStatusOfAccessionCode() != null)
281283
entity.setBiologicalStatusOfAccessionCode(request.getBiologicalStatusOfAccessionCode());
282284
if (request.getBreedingMethodDbId() != null) {
283-
BreedingMethodEntity method = breedingMethodService
284-
.getBreedingMethodEntity(request.getBreedingMethodDbId());
285+
// TODO: the DbId is all we need to insert.
286+
BreedingMethodEntity method = new BreedingMethodEntity();
287+
method.setId(request.getBreedingMethodDbId());
288+
// breedingMethodService
289+
// .getBreedingMethodEntity(request.getBreedingMethodDbId());
285290
entity.setBreedingMethod(method);
286291
}
287292
if (request.getCollection() != null)
288293
entity.setCollection(request.getCollection());
289294
if (request.getCommonCropName() != null) {
295+
// TODO: can we drop or batch?
290296
CropEntity crop = cropService.findCropEntity(request.getCommonCropName());
291297
if (crop == null) {
292298
crop = cropService.saveCropEntity(request.getCommonCropName());

src/main/resources/application.properties.template

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ spring.datasource.password=EXAMPLE
77

88
spring.datasource.driver-class-name=org.postgresql.Driver
99

10-
spring.jpa.hibernate.ddl-auto=create-drop
10+
spring.jpa.hibernate.ddl-auto=create-only
1111
spring.jpa.show-sql=false
12-
spring.jpa.properties.hibernate.hbm2ddl.import_files=sql/crops.sql, sql/lists.sql, sql/locations.sql, sql/people.sql, sql/programs.sql, sql/trials.sql, sql/seasons.sql, sql/studies.sql, sql/breeding_methods.sql, sql/germplasm.sql, sql/attribute_defs.sql, sql/attribute_values.sql, sql/seed_lots.sql, sql/observation_units.sql, sql/crosses.sql, sql/pedigree.sql, sql/events.sql, sql/images.sql, sql/observation_variables.sql, sql/observations.sql, sql/samples.sql, sql/allele_calls.sql, sql/genome_maps.sql, sql/references.sql, sql/vendor.sql
12+
spring.jpa.properties.hibernate.hbm2ddl.import_files=sql/crops.sql, sql/lists.sql, sql/locations.sql, sql/people.sql, sql/programs.sql, sql/trials.sql, sql/seasons.sql, sql/studies.sql, sql/breeding_methods.sql, sql/germplasm.sql, sql/attribute_defs.sql, sql/attribute_values.sql, sql/seed_lots.sql, sql/observation_units.sql, sql/crosses.sql, sql/pedigree.sql, sql/events.sql, sql/images.sql, sql/observation_variables.sql, sql/observations.sql, sql/samples.sql, sql/allele_calls.sql, sql/genome_maps.sql, sql/references.sql, sql/vendor.sql, sql/create_indexes.sql
1313

1414
spring.mvc.dispatch-options-request=true
1515

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
-- Indexes to improve read performance of Germplasm operations.
2+
CREATE INDEX CONCURRENTLY IF NOT EXISTS "pedigree_edge_this_node_id" ON pedigree_edge (this_node_id);
3+
CREATE INDEX CONCURRENTLY IF NOT EXISTS "pedigree_edge_connected_node_id" ON pedigree_edge (connceted_node_id);
4+
CREATE INDEX CONCURRENTLY IF NOT EXISTS "pedigree_edge_edge_type" ON pedigree_edge (edge_type);
5+
CREATE INDEX CONCURRENTLY IF NOT EXISTS "program_external_references_program_entity_id" ON program_external_references (program_entity_id);
6+
CREATE INDEX CONCURRENTLY IF NOT EXISTS "external_reference_composite" ON external_reference (external_reference_source, external_reference_id);
7+
CREATE INDEX CONCURRENTLY IF NOT EXISTS "program_additional_info_composite" ON program_additional_info (additional_info_id, program_entity_id);
8+
CREATE INDEX CONCURRENTLY IF NOT EXISTS "list_list_name" ON list (list_name);
9+
CREATE INDEX CONCURRENTLY IF NOT EXISTS "pedigree_node_germplasm_id" ON pedigree_node (germplasm_id);
10+
CREATE INDEX CONCURRENTLY IF NOT EXISTS "germplasm_additional_info_germplasm_entity_id" ON germplasm_additional_info (germplasm_entity_id);
11+
CREATE INDEX CONCURRENTLY IF NOT EXISTS "germplasm_external_references_germplasm_entity_id" ON germplasm_external_references (germplasm_entity_id);
12+
CREATE INDEX CONCURRENTLY IF NOT EXISTS "germplasm_synonym_germplasm_id" ON germplasm_synonym (germplasm_id);
13+
CREATE INDEX CONCURRENTLY IF NOT EXISTS "germplasm_taxon_germplasm_id" ON germplasm_taxon (germplasm_id);

0 commit comments

Comments
 (0)