Coverage Summary for Class: TestLargeSchemaPerformance (org.umlg.sqlg.test.topology)
Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
TestLargeSchemaPerformance |
100%
(1/1)
|
80%
(4/5)
|
72.2%
(13/18)
|
92.6%
(50/54)
|
package org.umlg.sqlg.test.topology;
import org.apache.commons.collections4.set.ListOrderedSet;
import org.apache.commons.lang3.time.StopWatch;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.umlg.sqlg.structure.PropertyDefinition;
import org.umlg.sqlg.structure.PropertyType;
import org.umlg.sqlg.structure.SqlgGraph;
import org.umlg.sqlg.structure.topology.PartitionType;
import org.umlg.sqlg.structure.topology.Schema;
import org.umlg.sqlg.structure.topology.VertexLabel;
import org.umlg.sqlg.test.BaseTest;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* @author Pieter Martin
* Date: 2021/03/14
*/
public class TestLargeSchemaPerformance extends BaseTest {
private static final Logger LOGGER = LoggerFactory.getLogger(TestLargeSchemaPerformance.class);
private final static int NUMBER_OF_SCHEMAS = 10;
private final static int NUMBER_OF_TABLES = 100;
private final static int NUMBER_OF_PARTITIONS = 10;
private final static int NUMBER_OF_COLUMNS = 100;
// @Before
// public void before() throws Exception {
// System.out.println("before");
// }
//
// @Test
// public void load() {
// StopWatch stopWatch = StopWatch.createStarted();
// this.sqlgGraph = SqlgGraph.open(configuration);
// stopWatch.stop();
// LOGGER.info("time taken: {}", stopWatch);
// }
@Test
public void testPerformance() {
Assume.assumeTrue(this.sqlgGraph.getSqlDialect().supportsPartitioning());
StopWatch stopWatch = StopWatch.createStarted();
for (int i = 1; i <= NUMBER_OF_SCHEMAS; i++) {
this.sqlgGraph.getTopology().ensureSchemaExist("R_" + i);
}
this.sqlgGraph.tx().commit();
stopWatch.stop();
LOGGER.info("create schema {}", stopWatch);
stopWatch = StopWatch.createStarted();
StopWatch stopWatch2 = StopWatch.createStarted();
int count = 1;
for (int i = 1; i <= NUMBER_OF_SCHEMAS; i++) {
Optional<Schema> schemaOptional = this.sqlgGraph.getTopology().getSchema("R_" + i);
Assert.assertTrue(schemaOptional.isPresent());
Schema schema = schemaOptional.get();
for (int j = 1; j <= NUMBER_OF_TABLES; j++) {
if (count % NUMBER_OF_TABLES == 0) {
this.sqlgGraph.tx().commit();
stopWatch2.stop();
LOGGER.info("created {} for far in {}", count, stopWatch2);
stopWatch2.reset();
stopWatch2.start();
}
VertexLabel vertexLabel = schema.ensurePartitionedVertexLabelExist(
"T" + j,
columns(),
ListOrderedSet.listOrderedSet(List.of("column1")),
PartitionType.LIST,
"column1"
);
for (int k = 0; k < NUMBER_OF_PARTITIONS; k++) {
vertexLabel.ensureListPartitionExists(
"test" + j + k,
"'test" + j + k + "'"
);
}
count++;
}
this.sqlgGraph.tx().commit();
}
this.sqlgGraph.tx().commit();
stopWatch.stop();
LOGGER.info("create table {}", stopWatch);
Assert.assertEquals(NUMBER_OF_SCHEMAS + 1, sqlgGraph.getTopology().getSchemas().size());
Assert.assertEquals(NUMBER_OF_TABLES, sqlgGraph.getTopology().getSchema("R_1").orElseThrow().getVertexLabels().size());
Assert.assertEquals(NUMBER_OF_TABLES, sqlgGraph.getTopology().getSchema("R_2").orElseThrow().getVertexLabels().size());
Assert.assertEquals(NUMBER_OF_COLUMNS, sqlgGraph.getTopology().getSchema("R_1").orElseThrow().getVertexLabel("T1").orElseThrow().getProperties().size());
Assert.assertEquals(NUMBER_OF_COLUMNS, sqlgGraph.getTopology().getSchema("R_1").orElseThrow().getVertexLabel("T100").orElseThrow().getProperties().size());
// Assert.assertEquals(NUMBER_OF_COLUMNS, sqlgGraph.getTopology().getSchema("R_1").orElseThrow().getVertexLabel("T1000").orElseThrow().getProperties().size());
this.sqlgGraph.close();
try (SqlgGraph sqlgGraph1 = SqlgGraph.open(configuration)) {
Assert.assertEquals(NUMBER_OF_SCHEMAS + 1, sqlgGraph1.getTopology().getSchemas().size());
Assert.assertEquals(NUMBER_OF_TABLES, sqlgGraph1.getTopology().getSchema("R_1").orElseThrow().getVertexLabels().size());
Assert.assertEquals(NUMBER_OF_TABLES, sqlgGraph1.getTopology().getSchema("R_2").orElseThrow().getVertexLabels().size());
Assert.assertEquals(NUMBER_OF_COLUMNS, sqlgGraph1.getTopology().getSchema("R_1").orElseThrow().getVertexLabel("T1").orElseThrow().getProperties().size());
Assert.assertEquals(NUMBER_OF_COLUMNS, sqlgGraph1.getTopology().getSchema("R_1").orElseThrow().getVertexLabel("T100").orElseThrow().getProperties().size());
// Assert.assertEquals(NUMBER_OF_COLUMNS, sqlgGraph1.getTopology().getSchema("R_1").orElseThrow().getVertexLabel("T1000").orElseThrow().getProperties().size());
}
}
private Map<String, PropertyDefinition> columns() {
Map<String, PropertyDefinition> result = new LinkedHashMap<>();
for (int i = 1; i <= NUMBER_OF_COLUMNS; i++) {
result.put("column" + i, PropertyDefinition.of(PropertyType.STRING));
}
return result;
}
private LinkedHashMap<String, Object> values() {
LinkedHashMap<String, Object> result = new LinkedHashMap<>();
for (int i = 1; i <= 100; i++) {
result.put("column" + i, "value_" + i);
}
return result;
}
}