Added JDBC performance test to compare to JPA

This commit is contained in:
Timo Bejan 2022-05-24 12:08:50 +03:00
parent e136be5bd4
commit 8746319ca8

View File

@ -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<DictionaryEntryEntity> type1Entries =
tenKEntries.stream().map(s -> new DictionaryEntryEntity(0, s, 1, false, type1.getTypeId())).collect(Collectors.toList());
List<DictionaryEntryEntity> 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<String> generateEntries(int count) {
List<String> entries = new ArrayList<>();
for (var i = 1; i <= count; i++) {