Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 2 additions & 16 deletions jena-benchmarks/jena-benchmarks-jmh/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.

SPDX-License-Identifier: Apache-2.0
-->

Expand Down Expand Up @@ -92,21 +92,7 @@

<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>jena-benchmarks-shadedJena480</artifactId>
<version>6.1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>jena-benchmarks-shadedJena510</artifactId>
<version>6.1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>jena-benchmarks-shadedJena550</artifactId>
<artifactId>jena-benchmarks-shadedJena560</artifactId>
<version>6.1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

public enum JenaVersion {
CURRENT(JenaVersion.class.getPackage().getImplementationVersion()),
JENA_4_8_0("4.8.0");
JENA_5_6_0("5.6.0");

private final String version;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import org.apache.jena.atlas.lib.CacheFactory;
import org.apache.jena.graph.Graph;
import org.apache.jena.graph.Node;
import org.apache.jena.mem.graph.helper.JMHDefaultOptions;
import org.apache.jena.jmh.JmhDefaultOptions;
import org.apache.jena.riot.RDFDataMgr;
import org.apache.jena.sparql.graph.GraphFactory;
import org.junit.Assert;
Expand All @@ -51,39 +51,36 @@ public class TestCaches {
@Param({
"Caffeine",
"Simple",
"Jena510.Caffeine",
"Jena510.Simple"
"Jena560.Caffeine",
"Jena560.Simple"
})
public String param1_Cache;

private Graph graph;

private Cache<String, Node> cache;

private static int calculateRealCacheSize(int minCacheSize) {
private static int calculateRealCacheSize() {
// the cache size is a power of 2 --> that is a requirement for the CacheSimpleFast
// to start with fair conditions for the caches, we use the same size for all caches
var cacheSize = Integer.highestOneBit(minCacheSize);
if (cacheSize < minCacheSize) {
var cacheSize = Integer.highestOneBit(TestCaches.DEFAULT_CACHE_SIZE);
if (cacheSize < TestCaches.DEFAULT_CACHE_SIZE) {
cacheSize <<= 1;
}
return cacheSize;
}

private static Cache<String, Node> createCache(String cacheName) {
var cacheSize = calculateRealCacheSize(DEFAULT_CACHE_SIZE);
switch (cacheName) {
case "Caffeine":
return CacheFactory.createCache(cacheSize);
case "Simple":
return CacheFactory.createSimpleCache(cacheSize);
case "Jena510.Caffeine":
return new CacheFromJena510Wrapped<>(org.apache.shadedJena510.atlas.lib.CacheFactory.createCache(cacheSize));
case "Jena510.Simple":
return new CacheFromJena510Wrapped<>(org.apache.shadedJena510.atlas.lib.CacheFactory.createSimpleCache(cacheSize));
default:
throw new IllegalArgumentException("Unknown Cache: " + cacheName);
}
var cacheSize = calculateRealCacheSize();
return switch (cacheName) {
case "Caffeine" -> CacheFactory.createCache(cacheSize);
case "Simple" -> CacheFactory.createSimpleCache(cacheSize);
case "Jena560.Caffeine" ->
new CacheFromJena560Wrapped<>(org.apache.shadedJena560.atlas.lib.CacheFactory.createCache(cacheSize));
case "Jena560.Simple" ->
new CacheFromJena560Wrapped<>(org.apache.shadedJena560.atlas.lib.CacheFactory.createSimpleCache(cacheSize));
default -> throw new IllegalArgumentException("Unknown Cache: " + cacheName);
};
}

@Benchmark
Expand Down Expand Up @@ -175,63 +172,58 @@ private static void fillCacheByPut(Cache<String, Node> cacheToFill, Graph g) {
});
}

private static class CacheFromJena510Wrapped<K, V> implements Cache<K, V> {

private final org.apache.shadedJena510.atlas.lib.Cache<K, V> wrappedCache;

public CacheFromJena510Wrapped(org.apache.shadedJena510.atlas.lib.Cache<K, V> cacheFromJena510) {
this.wrappedCache = cacheFromJena510;
}
private record CacheFromJena560Wrapped<K, V>(
org.apache.shadedJena560.atlas.lib.Cache<K, V> wrappedCache) implements Cache<K, V> {


@Override
public boolean containsKey(K k) {
return wrappedCache.containsKey(k);
}
public boolean containsKey(K k) {
return wrappedCache.containsKey(k);
}

@Override
public V getIfPresent(K k) {
return wrappedCache.getIfPresent(k);
}
@Override
public V getIfPresent(K k) {
return wrappedCache.getIfPresent(k);
}

@Override
public V get(K k, Function<K, V> callable) {
return wrappedCache.get(k, callable);
}
@Override
public V get(K k, Function<K, V> callable) {
return wrappedCache.get(k, callable);
}

@Override
public void put(K k, V thing) {
wrappedCache.put(k, thing);
}
@Override
public void put(K k, V thing) {
wrappedCache.put(k, thing);
}

@Override
public void remove(K k) {
wrappedCache.remove(k);
}
@Override
public void remove(K k) {
wrappedCache.remove(k);
}

@Override
public Iterator<K> keys() {
return wrappedCache.keys();
}
@Override
public Iterator<K> keys() {
return wrappedCache.keys();
}

@Override
public boolean isEmpty() {
return wrappedCache.isEmpty();
}
@Override
public boolean isEmpty() {
return wrappedCache.isEmpty();
}

@Override
public void clear() {
wrappedCache.clear();
}
@Override
public void clear() {
wrappedCache.clear();
}

@Override
public long size() {
return wrappedCache.size();
@Override
public long size() {
return wrappedCache.size();
}
}
}

@Setup(Level.Trial)
public void setupTrial() throws Exception {
public void setupTrial() {
this.graph = GraphFactory.createGraphMem();
RDFDataMgr.read(this.graph, this.param0_GraphUri);
}
Expand All @@ -244,7 +236,7 @@ public void setupIteration() {

@Test
public void benchmark() throws Exception {
var opt = JMHDefaultOptions.getDefaults(this.getClass())
var opt = JmhDefaultOptions.getDefaults(this.getClass())
.build();
var results = new Runner(opt).run();
Assert.assertNotNull(results);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,7 @@
import org.locationtech.jts.geom.Envelope;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.util.AffineTransformation;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.Level;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.Param;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.TearDown;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.results.format.ResultFormatType;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
Expand All @@ -68,10 +61,10 @@
@State(Scope.Benchmark)
public class BenchmarkSpatialQueries {

private static Map<String, String> idToQuery = new LinkedHashMap<>();
private static final Map<String, String> idToQuery = new LinkedHashMap<>();

private Node featureNode = NodeFactory.createURI("urn:test:geosparql:feature1");
private Node geometryNode = NodeFactory.createURI("urn:test:geosparql:geometry1");
private final Node featureNode = NodeFactory.createURI("urn:test:geosparql:feature1");
private final Node geometryNode = NodeFactory.createURI("urn:test:geosparql:geometry1");

private static final String q1 = """
PREFIX geo: <http://www.opengis.net/ont/geosparql#>
Expand Down Expand Up @@ -126,23 +119,20 @@ public class BenchmarkSpatialQueries {

@Param({
"current",
"5.5.0"
"5.6.0"
})
public String p5_jenaVersion;

private SpatialQueryTask task;

@Benchmark
public void run() throws Exception {
public void run() {
long count = task.exec();
if (true) {
System.out.println("Counted: " + count);
}
System.out.println("Counted: " + count);
}

private static GeometryWrapper toWrapperWkt(Geometry geometry) {
GeometryWrapper result = new GeometryWrapper(geometry, Geo.WKT);
return result;
return new GeometryWrapper(geometry, Geo.WKT);
}

@Setup(Level.Trial)
Expand Down Expand Up @@ -186,12 +176,12 @@ public void setupTrial() throws Exception {
try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
RDFDataMgr.write(out, graph, fmt);
out.flush();
data = new String(out.toByteArray(), StandardCharsets.UTF_8);
data = out.toString(StandardCharsets.UTF_8);
}

task = switch (p5_jenaVersion) {
case "current" -> new SpatialQueryTaskCurrent();
case "5.5.0" -> new SpatialQueryTask550();
case "5.6.0" -> new SpatialQueryTask560();
default -> throw new RuntimeException("No task registered for this jena version:" + p5_jenaVersion);
};

Expand All @@ -211,10 +201,6 @@ public void setupTrial() throws Exception {
task.setQuery(queryString);
}

@TearDown(Level.Trial)
public void tearDownTrial() throws Exception {
}

public static ChainedOptionsBuilder getDefaults(Class<?> c) {
return new OptionsBuilder()
// Specify which benchmarks to run.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
package org.apache.jena.geosparql.query;

public interface SpatialQueryTask {
void setData(String trigString) throws Exception;
void setInferenceMode(boolean enableInferences, boolean materialize) throws Exception;
void setQuery(String queryString) throws Exception;
void setData(String trigString);
void setInferenceMode(boolean enableInferences, boolean materialize);
void setQuery(String queryString);
void setIndex(boolean isEnabled);
long exec();
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,35 +21,32 @@

package org.apache.jena.geosparql.query;

import java.util.stream.Stream;
import org.apache.jena.geosparql.configuration.GeoSPARQLOperations;
import org.apache.jena.geosparql.spatial.SpatialIndexException;
import org.apache.jena.geosparql.spatial.index.v2.SpatialIndexLib;
import org.apache.jena.graph.Graph;
import org.apache.jena.rdfs.RDFSFactory;
import org.apache.jena.riot.Lang;
import org.apache.jena.riot.RDFParser;
import org.apache.jena.sparql.core.DatasetGraph;
import org.apache.jena.sparql.core.DatasetGraphFactory;
import org.apache.jena.sparql.exec.QueryExec;
import org.apache.jena.sparql.exec.RowSetOps;

import org.apache.shadedJena550.geosparql.configuration.GeoSPARQLOperations;
import org.apache.shadedJena550.geosparql.spatial.SpatialIndexException;
import org.apache.shadedJena550.geosparql.spatial.index.v2.SpatialIndexLib;
import org.apache.shadedJena550.graph.Graph;
import org.apache.shadedJena550.rdfs.RDFSFactory;
import org.apache.shadedJena550.riot.Lang;
import org.apache.shadedJena550.riot.RDFParser;
import org.apache.shadedJena550.sparql.core.DatasetGraph;
import org.apache.shadedJena550.sparql.core.DatasetGraphFactory;
import org.apache.shadedJena550.sparql.core.Quad;
import org.apache.shadedJena550.sparql.exec.QueryExec;
import org.apache.shadedJena550.sparql.exec.RowSetOps;

public class SpatialQueryTask550
implements SpatialQueryTask
public class SpatialQueryTask560
implements SpatialQueryTask
{
private DatasetGraph baseDsg = null;
private DatasetGraph effectiveDsg = null;
private org.apache.jena.sparql.core.DatasetGraph baseDsg = null;
private org.apache.jena.sparql.core.DatasetGraph effectiveDsg = null;
private String query;

@Override
public void setData(String trigString) throws Exception {
baseDsg = RDFParser.create().fromString(trigString).lang(Lang.TRIG).toDatasetGraph();
public void setData(String ttlString) {
baseDsg = RDFParser.create().fromString(ttlString).lang(Lang.TRIG).toDatasetGraph();
}

@Override
public void setQuery(String queryString) throws Exception {
public void setQuery(String queryString) {
this.query = queryString;
}

Expand All @@ -60,21 +57,13 @@ public void setInferenceMode(boolean enableInferences, boolean materialize) {
DatasetGraph virtualDsg = RDFSFactory.datasetRDFS(baseDsg, vocab);
if (materialize) {
effectiveDsg = DatasetGraphFactory.create();

// Bugged in 5.5.0 because find() is not overridden to yield inferences:
// effectiveDsg.addAll(virtualDsg);

try (Stream<Quad> stream = virtualDsg.stream(null, null, null, null)) {
stream.forEach(effectiveDsg::add);
}
effectiveDsg.addAll(virtualDsg);
} else {
effectiveDsg = virtualDsg;
}
} else {
effectiveDsg = baseDsg;
}

// RDFDataMgr.write(System.err, effectiveDsg, RDFFormat.TRIG_PRETTY);
}

@Override
Expand All @@ -91,8 +80,7 @@ public void setIndex(boolean isEnabled) {
@Override
public long exec() {
try (QueryExec qe = QueryExec.dataset(effectiveDsg).query(query).build()) {
long count = RowSetOps.count(qe.select());
return count;
return RowSetOps.count(qe.select());
}
}
}
Loading