package com.waitingforcode; import org.openjdk.jmh.annotations.*; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @OutputTimeUnit(TimeUnit.MILLISECONDS) @BenchmarkMode(Mode.All) public class WriteMicroBenchmark { @State(Scope.Thread) public static class InitializationState { private CassandraSession cassandraSession = new CassandraSession(); private String colsToInsertInto80 = getColsToInertClause(cassandraSession.getWideRowTable80Columns()); private String valuesToInsertInto80 = getValuesToInsertClause(cassandraSession.getWideRowTable80Columns()); private String colsToInsertInto40 = getColsToInertClause(cassandraSession.getWideRowTable40Columns()); private String valuesToInsertInto40 = getValuesToInsertClause(cassandraSession.getWideRowTable40Columns()); private String colsToInsertInto20 = getColsToInertClause(cassandraSession.getWideRowTable20Columns()); private String valuesToInsertInto20 = getValuesToInsertClause(cassandraSession.getWideRowTable20Columns()); private static final int ROWS_TO_INSERT = 100; private static String getColsToInertClause(List columns) { return columns.stream().collect(Collectors.joining(",")); } private static String getValuesToInsertClause(List columns) { return columns.stream() .map(colName -> "'"+colName + " value'") .collect(Collectors.joining(",")); } @Setup(Level.Trial) public void doSetup() { cassandraSession.createTables(); } @TearDown(Level.Trial) public void doTearDown() { cassandraSession.closeSession(); } } @Benchmark public void write_wide_rows_to_80_cols_table(InitializationState initializationState) { for (int i = 0; i < initializationState.ROWS_TO_INSERT; i++) { initializationState.cassandraSession.execute("INSERT INTO wide_rows_test_80 (id, "+initializationState.colsToInsertInto80 +") VALUES (" + i+", "+initializationState.valuesToInsertInto80 +")"); } } @Benchmark public void write_wide_rows_to_40_cols_table(InitializationState initializationState) { for (int i = 0; i < initializationState.ROWS_TO_INSERT; i++) { initializationState.cassandraSession.execute("INSERT INTO wide_rows_test_40 (id, "+initializationState.colsToInsertInto40 +") VALUES (" + i+", "+initializationState.valuesToInsertInto40 +")"); } } @Benchmark public void write_wide_rows_to_20_cols_table(InitializationState initializationState) { for (int i = 0; i < initializationState.ROWS_TO_INSERT; i++) { initializationState.cassandraSession.execute("INSERT INTO wide_rows_test_20 (id, "+initializationState.colsToInsertInto20 +") VALUES (" + i+", "+initializationState.valuesToInsertInto20 +")"); } } @Benchmark public void write_skinny_rows(InitializationState initializationState) { for (int i = 0; i < initializationState.ROWS_TO_INSERT; i++) { for (int j = 0; j < initializationState.cassandraSession.getWideRowTable80Columns().size(); j++) { String key = initializationState.cassandraSession.getWideRowTable80Columns().get(j); initializationState.cassandraSession.execute("INSERT INTO skinny_row_test (col, value) VALUES ('"+key+"', 'value "+key+"')"); } } } }