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

Commit c23c0a9

Browse files
committed
[BI-1771] - performance experiments
some initial performance experiments including indexing and batching database operations
1 parent 7f64183 commit c23c0a9

File tree

3 files changed

+29
-23
lines changed

3 files changed

+29
-23
lines changed

src/main/java/org/brapi/test/BrAPITestServer/model/entity/germ/PedigreeEdgeEntity.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
package org.brapi.test.BrAPITestServer.model.entity.germ;
22

3-
import javax.persistence.Column;
4-
import javax.persistence.Entity;
5-
import javax.persistence.ManyToOne;
6-
import javax.persistence.Table;
3+
import javax.persistence.*;
74

85
import org.brapi.test.BrAPITestServer.model.entity.BrAPIPrimaryEntity;
96

107
import io.swagger.model.germ.ParentType;
118

129
@Entity
13-
@Table(name="pedigree_edge")
10+
@Table(name="pedigree_edge",
11+
indexes = {
12+
@Index(name = "pedigree_edge_connceted_node_id", columnList = "connceted_node_id"),
13+
@Index(name = "pedigree_edge_this_node_id", columnList = "this_node_id"),
14+
}
15+
)
1416
public class PedigreeEdgeEntity extends BrAPIPrimaryEntity{
1517
@ManyToOne
1618
private PedigreeNodeEntity thisNode;

src/main/java/org/brapi/test/BrAPITestServer/model/entity/germ/PedigreeNodeEntity.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,19 @@
55
import java.util.Objects;
66
import java.util.stream.Collectors;
77

8-
import javax.persistence.CascadeType;
9-
import javax.persistence.Column;
10-
import javax.persistence.Entity;
11-
import javax.persistence.ManyToOne;
12-
import javax.persistence.OneToMany;
13-
import javax.persistence.OneToOne;
14-
import javax.persistence.Table;
8+
import javax.persistence.*;
159

1610
import org.brapi.test.BrAPITestServer.model.entity.BrAPIPrimaryEntity;
1711
import org.brapi.test.BrAPITestServer.model.entity.germ.PedigreeEdgeEntity.EdgeType;
1812

1913
import io.swagger.model.germ.ParentType;
2014

2115
@Entity
22-
@Table(name = "pedigree_node")
16+
@Table(name = "pedigree_node",
17+
indexes = {
18+
@Index(name = "pedigree_node_germplasm_id", columnList = "germplasm_id"),
19+
}
20+
)
2321
public class PedigreeNodeEntity extends BrAPIPrimaryEntity {
2422
@ManyToOne
2523
private CrossingProjectEntity crossingProject;

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());

0 commit comments

Comments
 (0)