From 5a31ca36b5f3cf219757d70884bb37d702709155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ha=CC=8Avard=20Ottestad?= Date: Wed, 24 Jan 2024 23:05:35 +0100 Subject: [PATCH] add benchmark --- .../sail/memory/benchmark/QueryBenchmark.java | 13 +++++++ .../resources/benchmarkFiles/sub-select.qr | 38 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 core/sail/memory/src/test/resources/benchmarkFiles/sub-select.qr diff --git a/core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/benchmark/QueryBenchmark.java b/core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/benchmark/QueryBenchmark.java index 39d0890ed12..1b4c00ff218 100644 --- a/core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/benchmark/QueryBenchmark.java +++ b/core/sail/memory/src/test/java/org/eclipse/rdf4j/sail/memory/benchmark/QueryBenchmark.java @@ -21,6 +21,7 @@ import org.eclipse.rdf4j.common.transaction.IsolationLevels; import org.eclipse.rdf4j.query.BindingSet; import org.eclipse.rdf4j.query.TupleQueryResult; +import org.eclipse.rdf4j.query.explanation.Explanation; import org.eclipse.rdf4j.repository.sail.SailRepository; import org.eclipse.rdf4j.repository.sail.SailRepositoryConnection; import org.eclipse.rdf4j.rio.RDFFormat; @@ -67,6 +68,7 @@ public class QueryBenchmark { private static final String query_distinct_predicates; private static final String simple_filter_not; private static final String wild_card_chain_with_common_ends; + private static final String sub_select; static { try { @@ -95,6 +97,8 @@ public class QueryBenchmark { StandardCharsets.UTF_8); wild_card_chain_with_common_ends = IOUtils.toString( getResourceAsStream("benchmarkFiles/wild-card-chain-with-common-ends.qr"), StandardCharsets.UTF_8); + sub_select = IOUtils.toString( + getResourceAsStream("benchmarkFiles/sub-select.qr"), StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException(e); @@ -363,6 +367,15 @@ public long simple_filter_not() { // } // } + @Benchmark + public long subSelect() { + try (SailRepositoryConnection connection = repository.getConnection()) { + return count(connection + .prepareTupleQuery(sub_select) + .evaluate()); + } + } + private static InputStream getResourceAsStream(String filename) { return QueryBenchmark.class.getClassLoader().getResourceAsStream(filename); } diff --git a/core/sail/memory/src/test/resources/benchmarkFiles/sub-select.qr b/core/sail/memory/src/test/resources/benchmarkFiles/sub-select.qr new file mode 100644 index 00000000000..81a2fbcd2b1 --- /dev/null +++ b/core/sail/memory/src/test/resources/benchmarkFiles/sub-select.qr @@ -0,0 +1,38 @@ +PREFIX ex: +PREFIX owl: +PREFIX rdf: +PREFIX rdfs: +PREFIX sh: +PREFIX xsd: +PREFIX dcat: +PREFIX dc: +PREFIX skos: +PREFIX foaf: +PREFIX dct: + +SELECT ?type1 ?type2 ?language2 ?mbox ?count ?identifier2 where { + + ?a a ?type2. + ?b a ?type1. + + ?b dcat:dataset ?a. + + ?a dcat:distribution ?mbox. + ?a dct:language ?language. + FILTER (?type1 != ?type2) + ?a dct:identifier ?identifier. + + BIND(?a as ?c) + + { + select distinct ?c (count(?dist) as ?count) ?language2 where { + ?c a ?type2. + ?c dcat:distribution ?dist. + ?c dct:language ?language2. + } group by ?c ?language2 having (?count > 2) + } + +} group by ?type1 ?type2 ?language2 ?mbox ?count ?identifier2 order by ?type1 ?type2 ?language2 ?mbox ?count ?identifier2 + + +