diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java index 91702b310..36cddf5a6 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/performance/EntityPerformanceTest.java @@ -5,7 +5,9 @@ import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemp import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DictionaryEntryEntity; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.EntryRepository; +import com.iqser.red.service.persistence.management.v1.processor.utils.jdbc.JDBCWriteUtils; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.CloneDossierTemplateRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntryType; import lombok.extern.slf4j.Slf4j; @@ -14,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @@ -81,6 +84,42 @@ public class EntityPerformanceTest extends AbstractPersistenceServerServiceTest } + + @Autowired + private JDBCWriteUtils jdbcWriteUtils; + + @Test + public void testWritePerformance() { + var tenKEntries = generateEntries(10_000); + + var template = dossierTemplateTesterAndProvider.provideTestTemplate("test"); + var type1 = typeProvider.testAndProvideType(template, null, "t1"); + var type2 = typeProvider.testAndProvideType(template, null, "t2"); + + List type1Entries = + tenKEntries.stream().map(s -> new DictionaryEntryEntity(0, s, 1, false, type1.getTypeId())).collect(Collectors.toList()); + + List type2Entries = + tenKEntries.stream().map(s -> new DictionaryEntryEntity(0, s, 1, false, type2.getTypeId())).collect(Collectors.toList()); + + assertThat(entryRepository.count()).isEqualTo(0); + long t1 = System.currentTimeMillis(); + entryRepository.saveAll(type1Entries); + long jpaTime = System.currentTimeMillis() - t1; + assertThat(entryRepository.count()).isEqualTo(10_000); + + t1 = System.currentTimeMillis(); + jdbcWriteUtils.saveBatch(type2Entries); + long jdbcTime = System.currentTimeMillis() - t1; + + assertThat(entryRepository.count()).isEqualTo(20_000); + + assertThat(jpaTime).isGreaterThan(jdbcTime); + + System.out.println("JPA Time: " + jpaTime + "ms for 10k entries"); + System.out.println("JDBC Time: " + jdbcTime + "ms for 10k entries"); + } + private List generateEntries(int count) { List entries = new ArrayList<>(); for (var i = 1; i <= count; i++) {