Skip to content

Commit bab1a5b

Browse files
committed
benchmarks
1 parent 25640d3 commit bab1a5b

12 files changed

Lines changed: 183 additions & 23 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2026 Eclipse RDF4J contributors.
3+
*
4+
* All rights reserved. This program and the accompanying materials
5+
* are made available under the terms of the Eclipse Distribution License v1.0
6+
* which accompanies this distribution, and is available at
7+
* http://www.eclipse.org/org/documents/edl-v10.php.
8+
*
9+
* SPDX-License-Identifier: BSD-3-Clause
10+
*******************************************************************************/
11+
// Some portions generated by Codex
12+
package org.eclipse.rdf4j.sail.lmdb;
13+
14+
import java.io.File;
15+
import java.io.IOException;
16+
17+
import org.eclipse.rdf4j.common.io.FileUtil;
18+
19+
public final class LmdbTestUtil {
20+
21+
private LmdbTestUtil() {
22+
}
23+
24+
public static void deleteDir(File dataDir) {
25+
if (dataDir == null || !dataDir.exists()) {
26+
return;
27+
}
28+
29+
try {
30+
FileUtil.deleteDir(dataDir);
31+
} catch (IOException e) {
32+
throw new RuntimeException("Failed to delete LMDB data dir " + dataDir, e);
33+
}
34+
35+
if (dataDir.exists()) {
36+
throw new AssertionError("Expected LMDB data dir to be deleted: " + dataDir);
37+
}
38+
}
39+
}

core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/RecordIteratorBenchmark.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import java.io.IOException;
1616
import java.util.concurrent.TimeUnit;
1717

18-
import org.apache.commons.io.FileUtils;
1918
import org.assertj.core.util.Files;
2019
import org.eclipse.rdf4j.sail.lmdb.config.LmdbStoreConfig;
2120
import org.openjdk.jmh.Main;
@@ -69,7 +68,7 @@ public void setup() throws IOException {
6968
@TearDown(Level.Trial)
7069
public void tearDown() throws IOException {
7170
tripleStore.close();
72-
FileUtils.deleteDirectory(dataDir);
71+
LmdbTestUtil.deleteDir(dataDir);
7372
}
7473

7574
@Benchmark

core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/BenchmarkBaseFoaf.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
import java.util.Locale;
1717
import java.util.Random;
1818

19-
import org.apache.commons.io.FileUtils;
2019
import org.assertj.core.util.Files;
2120
import org.eclipse.rdf4j.model.IRI;
2221
import org.eclipse.rdf4j.model.ValueFactory;
2322
import org.eclipse.rdf4j.repository.sail.SailRepository;
2423
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
2524
import org.eclipse.rdf4j.sail.lmdb.LmdbStore;
25+
import org.eclipse.rdf4j.sail.lmdb.LmdbTestUtil;
2626

2727
public class BenchmarkBaseFoaf {
2828

@@ -57,8 +57,11 @@ public void tearDown() throws IOException {
5757
connection.close();
5858
connection = null;
5959
}
60-
repository.shutDown();
61-
FileUtils.deleteDirectory(file);
60+
try {
61+
repository.shutDown();
62+
} finally {
63+
LmdbTestUtil.deleteDir(file);
64+
}
6265
}
6366

6467
void addPersonNameOnly() {

core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/DatagovLoadIsolationBenchmark.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,21 @@
1414
import java.io.File;
1515
import java.io.IOException;
1616
import java.io.InputStream;
17+
import java.util.Iterator;
1718
import java.util.Objects;
1819
import java.util.concurrent.TimeUnit;
1920

20-
import org.apache.commons.io.FileUtils;
2121
import org.assertj.core.util.Files;
2222
import org.eclipse.rdf4j.benchmark.common.BenchmarkResources;
2323
import org.eclipse.rdf4j.common.transaction.IsolationLevels;
2424
import org.eclipse.rdf4j.model.Model;
25+
import org.eclipse.rdf4j.model.Statement;
2526
import org.eclipse.rdf4j.repository.sail.SailRepository;
2627
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
2728
import org.eclipse.rdf4j.rio.RDFFormat;
2829
import org.eclipse.rdf4j.rio.Rio;
2930
import org.eclipse.rdf4j.sail.lmdb.LmdbStore;
31+
import org.eclipse.rdf4j.sail.lmdb.LmdbTestUtil;
3032
import org.openjdk.jmh.annotations.Benchmark;
3133
import org.openjdk.jmh.annotations.BenchmarkMode;
3234
import org.openjdk.jmh.annotations.Fork;
@@ -90,6 +92,36 @@ public boolean loadDatagovFileSingleTransaction() throws IOException {
9092
return loadOnce();
9193
}
9294

95+
@Benchmark
96+
public boolean loadDatagovFileInBatches() throws IOException {
97+
File temporaryFolder = Files.newTemporaryFolder();
98+
SailRepository sailRepository = null;
99+
try {
100+
sailRepository = new SailRepository(new LmdbStore(temporaryFolder, ConfigUtil.createConfig()));
101+
try (SailRepositoryConnection connection = sailRepository.getConnection()) {
102+
Iterator<Statement> iterator = data.iterator();
103+
while (iterator.hasNext()) {
104+
connection.begin(isolationLevel);
105+
for (int i = 0; i < 100000 && iterator.hasNext(); i++) {
106+
connection.add(iterator.next());
107+
}
108+
connection.commit();
109+
}
110+
111+
return connection.hasStatement(null, null, null, true);
112+
}
113+
} finally {
114+
try {
115+
if (sailRepository != null) {
116+
sailRepository.shutDown();
117+
}
118+
} finally {
119+
LmdbTestUtil.deleteDir(temporaryFolder);
120+
}
121+
}
122+
123+
}
124+
93125
boolean loadOnce() throws IOException {
94126
File temporaryFolder = Files.newTemporaryFolder();
95127
SailRepository sailRepository = null;
@@ -107,7 +139,7 @@ boolean loadOnce() throws IOException {
107139
sailRepository.shutDown();
108140
}
109141
} finally {
110-
FileUtils.deleteDirectory(temporaryFolder);
142+
LmdbTestUtil.deleteDir(temporaryFolder);
111143
}
112144
}
113145
}

core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/OverflowBenchmarkConcurrent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030

3131
import org.assertj.core.util.Files;
3232
import org.eclipse.rdf4j.benchmark.common.BenchmarkResources;
33-
import org.eclipse.rdf4j.common.io.FileUtil;
3433
import org.eclipse.rdf4j.model.IRI;
3534
import org.eclipse.rdf4j.model.Model;
3635
import org.eclipse.rdf4j.model.Statement;
@@ -48,6 +47,7 @@
4847
import org.eclipse.rdf4j.sail.helpers.NotifyingSailConnectionWrapper;
4948
import org.eclipse.rdf4j.sail.helpers.NotifyingSailWrapper;
5049
import org.eclipse.rdf4j.sail.lmdb.LmdbStore;
50+
import org.eclipse.rdf4j.sail.lmdb.LmdbTestUtil;
5151
import org.openjdk.jmh.annotations.Benchmark;
5252
import org.openjdk.jmh.annotations.BenchmarkMode;
5353
import org.openjdk.jmh.annotations.Fork;
@@ -208,7 +208,7 @@ public void manyConcurrentTransactions() throws IOException {
208208
try {
209209
sailRepository.shutDown();
210210
} finally {
211-
FileUtil.deleteDir(temporaryFolder);
211+
LmdbTestUtil.deleteDir(temporaryFolder);
212212
}
213213
}
214214
}

core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/OverflowBenchmarkReal.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@
1717
import java.io.InputStream;
1818
import java.util.concurrent.TimeUnit;
1919

20-
import org.apache.commons.io.FileUtils;
2120
import org.assertj.core.util.Files;
2221
import org.eclipse.rdf4j.benchmark.common.BenchmarkResources;
2322
import org.eclipse.rdf4j.common.transaction.IsolationLevels;
2423
import org.eclipse.rdf4j.repository.sail.SailRepository;
2524
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
2625
import org.eclipse.rdf4j.rio.RDFFormat;
2726
import org.eclipse.rdf4j.sail.lmdb.LmdbStore;
27+
import org.eclipse.rdf4j.sail.lmdb.LmdbTestUtil;
2828
import org.openjdk.jmh.annotations.Benchmark;
2929
import org.openjdk.jmh.annotations.BenchmarkMode;
3030
import org.openjdk.jmh.annotations.Fork;
@@ -95,7 +95,7 @@ public long loadLotsOfData() throws IOException {
9595
sailRepository.shutDown();
9696
}
9797
} finally {
98-
FileUtils.deleteDirectory(temporaryFolder);
98+
LmdbTestUtil.deleteDir(temporaryFolder);
9999
}
100100
}
101101

core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/OverflowBenchmarkSynthetic.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import java.util.stream.IntStream;
1919
import java.util.stream.Stream;
2020

21-
import org.apache.commons.io.FileUtils;
2221
import org.assertj.core.util.Files;
2322
import org.eclipse.rdf4j.common.transaction.IsolationLevels;
2423
import org.eclipse.rdf4j.model.ValueFactory;
@@ -27,6 +26,7 @@
2726
import org.eclipse.rdf4j.repository.sail.SailRepository;
2827
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
2928
import org.eclipse.rdf4j.sail.lmdb.LmdbStore;
29+
import org.eclipse.rdf4j.sail.lmdb.LmdbTestUtil;
3030
import org.openjdk.jmh.annotations.Benchmark;
3131
import org.openjdk.jmh.annotations.BenchmarkMode;
3232
import org.openjdk.jmh.annotations.Fork;
@@ -97,7 +97,7 @@ public long loadLotsOfDataEmptyStore() throws IOException {
9797
sailRepository.shutDown();
9898
}
9999
} finally {
100-
FileUtils.deleteDirectory(temporaryFolder);
100+
LmdbTestUtil.deleteDir(temporaryFolder);
101101
}
102102
}
103103

@@ -129,7 +129,7 @@ public long loadLotsOfDataNonEmptyStore() throws IOException {
129129
sailRepository.shutDown();
130130
}
131131
} finally {
132-
FileUtils.deleteDirectory(temporaryFolder);
132+
LmdbTestUtil.deleteDir(temporaryFolder);
133133
}
134134
}
135135

core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/QueryBenchmark.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import java.util.concurrent.TimeUnit;
2020
import java.util.stream.Stream;
2121

22-
import org.apache.commons.io.FileUtils;
2322
import org.apache.commons.io.IOUtils;
2423
import org.assertj.core.util.Files;
2524
import org.eclipse.rdf4j.benchmark.common.BenchmarkResources;
@@ -30,6 +29,7 @@
3029
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
3130
import org.eclipse.rdf4j.rio.RDFFormat;
3231
import org.eclipse.rdf4j.sail.lmdb.LmdbStore;
32+
import org.eclipse.rdf4j.sail.lmdb.LmdbTestUtil;
3333
import org.openjdk.jmh.annotations.Benchmark;
3434
import org.openjdk.jmh.annotations.BenchmarkMode;
3535
import org.openjdk.jmh.annotations.Fork;
@@ -154,8 +154,11 @@ public void beforeClass() throws IOException {
154154

155155
@TearDown(Level.Trial)
156156
public void afterClass() throws IOException {
157-
repository.shutDown();
158-
FileUtils.deleteDirectory(file);
157+
try {
158+
repository.shutDown();
159+
} finally {
160+
LmdbTestUtil.deleteDir(file);
161+
}
159162
}
160163

161164
private static long count(TupleQueryResult evaluate) {

core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/QueryWriteBenchmark.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import java.util.List;
2020
import java.util.concurrent.TimeUnit;
2121

22-
import org.apache.commons.io.FileUtils;
2322
import org.apache.commons.io.IOUtils;
2423
import org.assertj.core.util.Files;
2524
import org.eclipse.rdf4j.benchmark.common.BenchmarkResources;
@@ -34,6 +33,7 @@
3433
import org.eclipse.rdf4j.rio.RDFFormat;
3534
import org.eclipse.rdf4j.rio.Rio;
3635
import org.eclipse.rdf4j.sail.lmdb.LmdbStore;
36+
import org.eclipse.rdf4j.sail.lmdb.LmdbTestUtil;
3737
import org.openjdk.jmh.annotations.Benchmark;
3838
import org.openjdk.jmh.annotations.BenchmarkMode;
3939
import org.openjdk.jmh.annotations.Fork;
@@ -119,8 +119,11 @@ public void beforeClass() {
119119

120120
@TearDown(Level.Invocation)
121121
public void afterClass() throws IOException {
122-
repository.shutDown();
123-
FileUtils.deleteDirectory(file);
122+
try {
123+
repository.shutDown();
124+
} finally {
125+
LmdbTestUtil.deleteDir(file);
126+
}
124127

125128
}
126129

core/sail/lmdb/src/test/java/org/eclipse/rdf4j/sail/lmdb/benchmark/TransactionsPerSecondBenchmark.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@
1818
import java.util.Random;
1919
import java.util.concurrent.TimeUnit;
2020

21-
import org.apache.commons.io.FileUtils;
2221
import org.assertj.core.util.Files;
2322
import org.eclipse.rdf4j.common.transaction.IsolationLevels;
2423
import org.eclipse.rdf4j.model.IRI;
2524
import org.eclipse.rdf4j.repository.sail.SailRepository;
2625
import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection;
2726
import org.eclipse.rdf4j.sail.lmdb.LmdbStore;
27+
import org.eclipse.rdf4j.sail.lmdb.LmdbTestUtil;
2828
import org.openjdk.jmh.annotations.Benchmark;
2929
import org.openjdk.jmh.annotations.BenchmarkMode;
3030
import org.openjdk.jmh.annotations.Fork;
@@ -112,8 +112,11 @@ public void afterClass() throws IOException {
112112
connection.close();
113113
connection = null;
114114
}
115-
repository.shutDown();
116-
FileUtils.deleteDirectory(file);
115+
try {
116+
repository.shutDown();
117+
} finally {
118+
LmdbTestUtil.deleteDir(file);
119+
}
117120

118121
}
119122

0 commit comments

Comments
 (0)