use of de.invesdwin.util.concurrent.loop.LoopInterruptedCheck in project invesdwin-context-persistence by subes.
the class RecordLogDirectoryPerformanceTest method readIterator.
private void readIterator(final File file) throws IOException, InterruptedException {
final LoopInterruptedCheck loopCheck = new LoopInterruptedCheck();
final Instant readsStart = new Instant();
for (int reads = 1; reads <= READS; reads++) {
FDate prevValue = null;
int count = 0;
try (RecordLogDirectory<TimedDecimal> reader = new RecordLogDirectory.Builder<TimedDecimal>(file, IndeedSerializer.valueOf(TimedDecimalSerde.GET), new SnappyCodec()).build()) {
final RecordFile.Reader<TimedDecimal> iterator = reader.reader();
while (iterator.next()) {
final FDate value = iterator.get().getTime();
if (prevValue != null) {
Assertions.checkTrue(prevValue.isBefore(value));
}
prevValue = value;
count++;
}
Assertions.checkEquals(count, VALUES);
if (loopCheck.check()) {
printProgress("Reads", readsStart, VALUES * reads, VALUES * READS);
}
}
}
printProgress("ReadsFinished", readsStart, VALUES * READS, VALUES * READS);
}
use of de.invesdwin.util.concurrent.loop.LoopInterruptedCheck in project invesdwin-context-persistence by subes.
the class DuckDBPerformanceTest method testDuckDbPerformance.
@Test
public void testDuckDbPerformance() throws Exception {
final File directory = new File(ContextProperties.getCacheDirectory(), DuckDBPerformanceTest.class.getSimpleName());
Files.deleteNative(directory);
Files.forceMkdirParent(directory);
final Instant writesStart = new Instant();
int i = 0;
Class.forName("org.duckdb.DuckDBDriver");
final Connection conn = DriverManager.getConnection("jdbc:duckdb:" + directory.getAbsolutePath());
final Statement create = conn.createStatement();
create.execute("CREATE TABLE abc (key LONG, value LONG, PRIMARY KEY(key))");
create.execute("CREATE UNIQUE INDEX idx_abc on abc (key desc)");
create.close();
final LoopInterruptedCheck loopCheck = new LoopInterruptedCheck(Duration.ONE_SECOND);
final Statement insert = conn.createStatement();
insert.execute("BEGIN TRANSACTION");
final StringBuilder insertValues = new StringBuilder();
for (final FDate date : newValues()) {
final long value = date.longValue(FTimeUnit.MILLISECONDS);
if (insertValues.length() > 0) {
insertValues.append(",");
}
insertValues.append("(" + value + "," + value + ")");
i++;
if (i % FLUSH_INTERVAL == 0) {
insert.execute("INSERT INTO abc VALUES " + insertValues);
insertValues.setLength(0);
if (loopCheck.check()) {
printProgress("Writes", writesStart, i, VALUES);
}
}
}
if (insertValues.length() > 0) {
insert.execute("INSERT INTO abc VALUES " + insertValues);
insertValues.setLength(0);
}
insert.execute("COMMIT");
printProgress("WritesFinished", writesStart, VALUES, VALUES);
insert.close();
readIterator(conn);
readGet(conn);
readGetLatest(conn);
final Statement drop = conn.createStatement();
drop.execute("drop table abc");
drop.close();
Files.deleteNative(directory);
}
use of de.invesdwin.util.concurrent.loop.LoopInterruptedCheck in project invesdwin-context-persistence by subes.
the class H2PerformanceTest method readGetLatest.
private void readGetLatest(final Connection conn) throws Exception {
final LoopInterruptedCheck loopCheck = new LoopInterruptedCheck(Duration.ONE_SECOND);
final List<FDate> values = Lists.toList(newValues());
final Instant readsStart = new Instant();
for (int reads = 0; reads < READS; reads++) {
FDate prevValue = null;
int count = 0;
try (PreparedStatement select = conn.prepareStatement("SELECT v FROM abc WHERE k <=? ORDER BY k DESC LIMIT 1")) {
for (int i = 0; i < values.size(); i++) {
select.setLong(1, values.get(i).millisValue());
try (ResultSet results = select.executeQuery()) {
Assertions.checkTrue(results.next());
final FDate value = new FDate(results.getLong(1));
if (prevValue != null) {
Assertions.checkTrue(prevValue.isBefore(value));
}
prevValue = value;
count++;
if (loopCheck.check()) {
printProgress("GetLatests", readsStart, VALUES * reads + count, VALUES * READS);
}
}
}
}
Assertions.checkEquals(count, VALUES);
}
printProgress("GetLatestsFinished", readsStart, VALUES * READS, VALUES * READS);
}
use of de.invesdwin.util.concurrent.loop.LoopInterruptedCheck in project invesdwin-context-persistence by subes.
the class H2PerformanceTest method testH2Performance.
@Test
public void testH2Performance() throws Exception {
final File directory = new File(ContextProperties.getCacheDirectory(), H2PerformanceTest.class.getSimpleName());
Files.deleteNative(directory);
Files.forceMkdirParent(directory);
final Instant writesStart = new Instant();
int i = 0;
Class.forName("org.h2.Driver");
final Connection conn = DriverManager.getConnection("jdbc:h2:" + directory.getAbsolutePath(), "sa", "");
final Statement create = conn.createStatement();
create.execute("DROP TABLE abc IF EXISTS");
create.execute("CREATE TABLE abc (k LONG, v LONG, PRIMARY KEY(k))");
// asc vs desc index order matters a lot
create.execute("CREATE UNIQUE INDEX idx_abc on abc (k desc)");
create.close();
final LoopInterruptedCheck loopCheck = new LoopInterruptedCheck(Duration.ONE_SECOND);
final Statement tx = conn.createStatement();
tx.execute("BEGIN TRANSACTION");
final PreparedStatement insert = conn.prepareStatement("INSERT INTO abc VALUES (?,?)");
for (final FDate date : newValues()) {
final long value = date.longValue(FTimeUnit.MILLISECONDS);
insert.setLong(1, value);
insert.setLong(2, value);
insert.addBatch();
i++;
if (i % FLUSH_INTERVAL == 0) {
insert.executeBatch();
tx.execute("COMMIT");
tx.execute("BEGIN TRANSACTION");
if (loopCheck.check()) {
printProgress("Writes", writesStart, i, VALUES);
}
}
}
insert.executeBatch();
insert.close();
tx.execute("COMMIT");
printProgress("WritesFinished", writesStart, VALUES, VALUES);
tx.close();
readIterator(conn);
readGet(conn);
readGetLatest(conn);
final Statement drop = conn.createStatement();
drop.execute("drop table abc");
drop.close();
Files.deleteNative(directory);
}
use of de.invesdwin.util.concurrent.loop.LoopInterruptedCheck in project invesdwin-context-persistence by subes.
the class PersistentEzdbPerformanceTest method readGet.
private void readGet(final APersistentMap<FDate, FDate> table) throws InterruptedException {
final LoopInterruptedCheck loopCheck = new LoopInterruptedCheck(Duration.ONE_SECOND);
final List<FDate> values = Lists.toList(newValues());
final Instant readsStart = new Instant();
for (int reads = 1; reads <= READS; reads++) {
FDate prevValue = null;
for (int i = 0; i < values.size(); i++) {
try {
final FDate value = table.get(values.get(i));
if (prevValue != null) {
Assertions.checkTrue(prevValue.isBefore(value));
}
prevValue = value;
} catch (final NoSuchElementException e) {
break;
}
}
if (loopCheck.check()) {
printProgress("Gets", readsStart, VALUES * reads, VALUES * READS);
}
}
printProgress("GetsFinished", readsStart, VALUES * READS, VALUES * READS);
}
Aggregations