Docker Container Example : RDF4J, GraphDB and JenaGeoSPARQL
against LUBM(1, 0) Workload

By Theofilos Ioannidis (tioannid [at] di [dot] uoa [dot] gr), created on , last updated on


Caution

Containers are not ideal for benchmarking purposes similar to the one GeoRDFBench Framework performs, because they do not allow clearing system caches. The reason for this is that:

Therefore, in the following example, although the user can verify that the experiments run properly and results are correctly calculated and reported, the COLD cache response times will not be accurate. However, for experiments that do not require COLD cache response time measurements, e.g., macro benchmark scenarios, response times should be accurate enough for drawing basic conclusions.

Key Features

This example, features:

Docker Image

For this example, we will use a Windows 10 host machine, with 16 GB of memory and Intel i7-9700 CPU and a 1TB HDD 2.5" SATA III 7200rpm for data disk.

Pull the image

The docker image is stored in the Github registry under tioannid/geordfbench/multistore/lubm_1_0:latest. We assume that the current directory is D:\TEMP. Then we issue the following commands, which pull the image from the registry, and verify its presence in the docker image list:

D:\TEMP>docker pull ghcr.io/tioannid/geordfbench/multistore/lubm_1_0:latest
latest: Pulling from tioannid/geordfbench/multistore/lubm_1_0
9b857f539cb1: Pull complete
05733e265c26: Pull complete
66ae1a70746c: Pull complete
e47284e39893: Pull complete
9cbc275733a0: Pull complete
c57ee0343b01: Pull complete
3681ca43e91c: Pull complete
5f77883099ba: Pull complete
2ca44b8f573e: Pull complete
Digest: sha256:0231808fabd3e30bb16a43c795e0bc207f97f9a67ebda50813538da1d04a6d2d
Status: Downloaded newer image for ghcr.io/tioannid/geordfbench/multistore/lubm_1_0:latest
ghcr.io/tioannid/geordfbench/multistore/lubm_1_0:latest

D:\TEMP>D:\TEMP>docker images
REPOSITORY                                         TAG       IMAGE ID       CREATED          SIZE
ghcr.io/tioannid/geordfbench/multistore/lubm_1_0   latest    1134b8da368d   18 minutes ago   3.15GB
Start a container

We start a container named lubm-1_0 from this image with the following command:

D:\TEMP>docker run -d -e POSTGRES_PASSWORD=postgres -p 5430:5432/tcp --hostname NUC8i7BEH --cpus="4" --memory="11g" --memory-swap="11g" \
--mount "type=bind,src=%cd%,target=/src" --name lubm-1_0 ghcr.io/tioannid/geordfbench/multistore/lubm_1_0
b058d87420fb150718ab8681e50fc50705274223d9f5f23c85c2f9b8005ae1a9

This command, launches the lubm-1_0 container, while defining:

Launch the experiments through a terminal

We start the experiments by connecting to the lubm-1_0 running container with a terminal and issue the command:

D:\TEMP>docker exec -it lubm-1_0 /bin/bash
root@NUC8i7BEH:/data# ./startUpScript.sh 
 * Starting PostgreSQL 14 database server                                                                                                                                                                                                                                [ OK ] 
...
CREATE DATABASE
ALTER DATABASE
You are now connected to database "geographica3" as user "postgres".
...
CREATE TABLE
ALTER TABLE
CREATE SEQUENCE
...
GRANT
GRANT
...
Using Lehigh University Benchmark (LUBM) Generator to generate LUBM(1, 0) dataset
> ...
Started...
/data/Geographica2_Datasets/LUBM/1_0//University0_0.owl generated
CLASS INSTANCE #: 1657, TOTAL SO FAR: 1657
PROPERTY INSTANCE #: 6896, TOTAL SO FAR: 6896
...
/data/Geographica2_Datasets/LUBM/1_0//University0_14.owl generated
CLASS INSTANCE #: 1147, TOTAL SO FAR: 20659
PROPERTY INSTANCE #: 4321, TOTAL SO FAR: 82415

Completed!

Using RDF2RDF utility to convert RDF/XML *.owl files to a single N-Triples file
> ...
converting University0_0.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_1.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_10.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_11.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_12.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_13.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_14.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_2.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_3.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_4.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_5.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_6.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_7.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_8.owl to lubm-1_0.nt (RDF/XML to N-Triples)
converting University0_9.owl to lubm-1_0.nt (RDF/XML to N-Triples)

Generating the LUBM(1, 0) workload specification using GeoRDFBench Runtime
> ...
0    [main] INFO  LUBMWorkloadUtil  - {
  "classname" : "gr.uoa.di.rdf.Geographica3.runtime.workloadspecs.impl.SimpleGeospatialWL",
  "name" : "LUBM-1_0",
  "relativeBaseDir" : "",
  "geospatialDataset" : {
    "name" : "lubm-1_0",
    "relativeBaseDir" : "LUBM",
    "simpleGeospatialDataSetList" : [ {
      "name" : "lubm-1_0",
      "relativeBaseDir" : "1_0",
      "dataFile" : "lubm-1_0.nt",
      "rdfFormat" : "N-TRIPLES",
      "mapUsefulNamespacePrefixes" : {
        "geo" : "<http://www.opengis.net/ont/geosparql#>",
        "rdf" : "<http://www.w3.org/1999/02/22-rdf-syntax-ns#>",
        "owl" : "<http://www.w3.org/2002/07/owl#>",
        "geof" : "<http://www.opengis.net/def/function/geosparql/>",
        "xsd" : "<http://www.w3.org/2001/XMLSchema#>",
        "rdfs" : "<http://www.w3.org/2000/01/rdf-schema#>",
        "geo-sf" : "<http://www.opengis.net/ont/sf#>"
      }
    } ],
    "mapDataSetContexts" : {
      "lubm-1_0" : ""
    },
    "n" : 1
  },
  "geospatialQueryset" : {
    "classname" : "gr.uoa.di.rdf.Geographica3.runtime.querysets.partofworkload.impl.StaticTempParamQS",
    "name" : "lubm-1_0",
    "relativeBaseDir" : "",
    "hasPredicateQueriesAlso" : false,
    "mapQueries" : {
      "0" : {
        "label" : "Q1_GradStudents_Taken_GradCource0_At_Univ0",
        "text" : "SELECT ?x WHERE {\n ?x rdf:type ub:GraduateStudent .\n ?x ub:takesCourse  .\n} \n",
        "usePredicate" : false,
        "expectedResults" : 4
      },
      "1" : {
        "label" : "Q2_GradStudents_From_Any_Univ_Depart",
        "text" : "SELECT ?x ?y ?z WHERE {\n ?x rdf:type ub:GraduateStudent .\n ?y rdf:type ub:University .\n ?z rdf:type ub:Department .\n ?x ub:memberOf ?z .\n ?z ub:subOrganizationOf ?y .\n ?x ub:undergraduateDegreeFrom ?y .\n} \n",
        "usePredicate" : false,
        "expectedResults" : 0
      },
      "2" : {
        "label" : "Q3_Publications_Of_AssistProfessor0_In_Univ0_Depart0",
        "text" : "SELECT ?x WHERE { \n ?x rdf:type ub:Publication .\n ?x ub:publicationAuthor  .\n} \n",
        "usePredicate" : false,
        "expectedResults" : 6
      },
      "3" : {
        "label" : "Q4_Properties_Of_Professors_In_Univ0_Depart0",
        "text" : "SELECT ?x ?y1 ?y2 ?y3 WHERE {\n  ?x rdf:type ub:Professor .\n  ?x ub:worksFor  .\n  ?x ub:name ?y1 .\n  ?x ub:emailAddress ?y2 .\n  ?x ub:telephone ?y3 .\n} \n",
        "usePredicate" : false,
        "expectedResults" : 41
      },
     ...
     "13" : {
        "label" : "Q14_UndergradStudents_From_Any_Univ_Depart",
        "text" : "SELECT ?x WHERE {\n  ?x rdf:type ub:UndergraduateStudent .\n} \n",
        "usePredicate" : false,
        "expectedResults" : 5916
      }
    },
    "mapUsefulNamespacePrefixes" : {
      "ub" : "<https://swat.cse.lehigh.edu/onto/univ-bench.owl#>""
    },
    "executionSpec" : {
      "execTypeReps" : {
        "COLD" : 3,
        "WARM" : 3
      },
      "maxDurationSecsPerQueryRep" : 1800,
      "maxDurationSecs" : 3600,
      "action" : "RUN",
      "avgFunc" : "QUERY_MEDIAN",
      "onColdFailure" : "SKIP_REMAINING_ALL_QUERY_EXECUTIONS",
      "clearCacheDelaymSecs" : 5000
    },
    "mapTemplateParams" : { },
    "mapGraphPrefixes" : { }
  }
}
...

After the database creation, the LUBM Generaton (UBA) is called through the /data/Geographica2_Datasets/LUBM/LUBM_DSGen.sh script and generates 15 *.owl files serialized as RDF/XML. These files are converted to a single N-Triples file using the rdf2rdf-1.0.1-2.3.1.jar utility. This N-Triples file, in turn, is used for the creation of the LUBM workload specification. The Maven POM project (GeoRDFBench Samples), amongst other things, contains a BASH script /data/geordfbench_samples/scripts/generateLUBM_1_0_specs.sh which allows the automatic generation of the compact and detailed LUBM(1, 0) specifications to a user-provided target directory which in this case is the GeoRDFBench JSON library location /data/geordfbench/json_defs. This application uses the JSON Spec Generator API of the GeoRDFBench runtime as a maven dependency. All Geographica2 workload and other specifications have been created with the same API, the only difference being that their generation code is included as part of the GeoRDFBench Framework application.

The default terminal will act as a log window and after some time all experiments (3 stores * 1 workloads = 3) will end with:

...
162667 [main163701 [main] INFO  JDBCRepSrc  - Deferred mode for JDBCRepSrc was enabled. 24 records were flushed
163701 [main] INFO  GenericExprerimentResultsCollector  - Export statistics in "/data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload"
163701 [main] INFO  GenericExprerimentResultsCollector  - Created non existing directory
163703 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/00-Q1_GradStudents_Taken_GradCource0_At_Univ0-cold
163703 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/00-Q1_GradStudents_Taken_GradCource0_At_Univ0-cold-long
163703 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/01-Q2_GradStudents_From_Any_Univ_Depart-cold
163703 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/01-Q2_GradStudents_From_Any_Univ_Depart-cold-long
163703 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/02-Q3_Publications_Of_AssistProfessor0_In_Univ0_Depart0-cold
163704 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/02-Q3_Publications_Of_AssistProfessor0_In_Univ0_Depart0-cold-long
163704 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/03-Q4_Properties_Of_Professors_In_Univ0_Depart0-cold
163704 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/03-Q4_Properties_Of_Professors_In_Univ0_Depart0-cold-long
163704 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/00-Q1_GradStudents_Taken_GradCource0_At_Univ0-warm
163705 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/00-Q1_GradStudents_Taken_GradCource0_At_Univ0-warm-long
163705 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/01-Q2_GradStudents_From_Any_Univ_Depart-warm
163705 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/01-Q2_GradStudents_From_Any_Univ_Depart-warm-long
163706 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/02-Q3_Publications_Of_AssistProfessor0_In_Univ0_Depart0-warm
163706 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/02-Q3_Publications_Of_AssistProfessor0_In_Univ0_Depart0-warm-long
163707 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/03-Q4_Properties_Of_Professors_In_Univ0_Depart0-warm
163707 [main] INFO  GenericExprerimentResultsCollector  - Statistiscs printed: /data/Results_Store/JenaGeoSPARQLSUT/2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0/LUBM/JenaGeoSPARQLSUT-ExperimentWorkload/03-Q4_Properties_Of_Professors_In_Univ0_Depart0-warm-long
163707 [main] INFO  GenericExprerimentResultsCollector  - Cache COLD
163707 [main] INFO  GenericExprerimentResultsCollector  -       Query 0
163707 [main] INFO  GenericExprerimentResultsCollector  -               Rep 0    30386300 + 74330800 = 104717100 nsecs, 4 results, 0 scan errors
163707 [main] INFO  GenericExprerimentResultsCollector  -               Rep 1    445700 + 2845200 = 3290900 nsecs, 4 results, 0 scan errors
163707 [main] INFO  GenericExprerimentResultsCollector  -               Rep 2    1157500 + 2887800 = 4045300 nsecs, 4 results, 0 scan errors
163707 [main] INFO  GenericExprerimentResultsCollector  -       Query 1
163707 [main] INFO  GenericExprerimentResultsCollector  -               Rep 0    882500 + 89430800 = 90313300 nsecs, 0 results, 0 scan errors
163707 [main] INFO  GenericExprerimentResultsCollector  -               Rep 1    998500 + 31890700 = 32889200 nsecs, 0 results, 0 scan errors
163707 [main] INFO  GenericExprerimentResultsCollector  -               Rep 2    561300 + 28650700 = 29212000 nsecs, 0 results, 0 scan errors
163707 [main] INFO  GenericExprerimentResultsCollector  -       Query 2
163707 [main] INFO  GenericExprerimentResultsCollector  -               Rep 0    600900 + 3260600 = 3861500 nsecs, 6 results, 0 scan errors
163707 [main] INFO  GenericExprerimentResultsCollector  -               Rep 1    378900 + 1988800 = 2367700 nsecs, 6 results, 0 scan errors
163707 [main] INFO  GenericExprerimentResultsCollector  -               Rep 2    607300 + 2851100 = 3458400 nsecs, 6 results, 0 scan errors
163707 [main] INFO  GenericExprerimentResultsCollector  -       Query 3
163707 [main] INFO  GenericExprerimentResultsCollector  -               Rep 0    437900 + 4506800 = 4944700 nsecs, 0 results, 0 scan errors
163707 [main] INFO  GenericExprerimentResultsCollector  -               Rep 1    989100 + 3649200 = 4638300 nsecs, 0 results, 0 scan errors
163707 [main] INFO  GenericExprerimentResultsCollector  -               Rep 2    605500 + 3237800 = 3843300 nsecs, 0 results, 0 scan errors
163708 [main] INFO  GenericExprerimentResultsCollector  - Cache WARM
163708 [main] INFO  GenericExprerimentResultsCollector  -       Query 0
163708 [main] INFO  GenericExprerimentResultsCollector  -               Rep 0    367300 + 1197700 = 1565000 nsecs, 4 results, 0 scan errors
163708 [main] INFO  GenericExprerimentResultsCollector  -               Rep 1    365500 + 714200 = 1079700 nsecs, 4 results, 0 scan errors
163708 [main] INFO  GenericExprerimentResultsCollector  -               Rep 2    395800 + 1433200 = 1829000 nsecs, 4 results, 0 scan errors
163708 [main] INFO  GenericExprerimentResultsCollector  -       Query 1
163708 [main] INFO  GenericExprerimentResultsCollector  -               Rep 0    1319000 + 22323900 = 23642900 nsecs, 0 results, 0 scan errors
163708 [main] INFO  GenericExprerimentResultsCollector  -               Rep 1    579000 + 23392700 = 23971700 nsecs, 0 results, 0 scan errors
163708 [main] INFO  GenericExprerimentResultsCollector  -               Rep 2    387300 + 20690100 = 21077400 nsecs, 0 results, 0 scan errors
163708 [main] INFO  GenericExprerimentResultsCollector  -       Query 2
163708 [main] INFO  GenericExprerimentResultsCollector  -               Rep 0    379300 + 1147500 = 1526800 nsecs, 6 results, 0 scan errors
163708 [main] INFO  GenericExprerimentResultsCollector  -               Rep 1    258200 + 864000 = 1122200 nsecs, 6 results, 0 scan errors
163708 [main] INFO  GenericExprerimentResultsCollector  -               Rep 2    286300 + 991600 = 1277900 nsecs, 6 results, 0 scan errors
163708 [main] INFO  GenericExprerimentResultsCollector  -       Query 3
163708 [main] INFO  GenericExprerimentResultsCollector  -               Rep 0    444100 + 1654000 = 2098100 nsecs, 0 results, 0 scan errors
163708 [main] INFO  GenericExprerimentResultsCollector  -               Rep 1    302400 + 1243800 = 1546200 nsecs, 0 results, 0 scan errors
163708 [main] INFO  GenericExprerimentResultsCollector  -               Rep 2    345900 + 1183300 = 1529200 nsecs, 0 results, 0 scan errors
163708 [main] INFO  RunJenaGeoSPARQLExperimentWorkload  - End LUBM-1_0
Start time = Thu Aug  8 07:31:33 UTC 2024
End time = Thu Aug  8 07:34:17 UTC 2024
Verify that the repositories have been created
root@NUC8i7BEH:/data# tree -L 1 RDF4J_3.7.7_Repos/server/repositories/
RDF4J_3.7.7_Repos/server/repositories/
`-- lubm-1_0

root@NUC8i7BEH:/data# tree -L 1 graphdb-free-9.11.1/data/repositories/
graphdb-free-9.11.1/data/repositories/
`-- lubm-1_0

root@NUC8i7BEH:/data# tree -L 1 JenaGeoSPARQL_3.17.0_Repos/
JenaGeoSPARQL_3.17.0_Repos/
`-- lubm-1_0
Verify that the repository creation logs have been generated
root@NUC8i7BEH:/data# ls -lsa geordfbench/RDF4JSUT/scripts/CreateRepos/*.log
4 -rw-r--r-- 1 root root 1730 Aug  8 07:24 geordfbench/RDF4JSUT/scripts/CreateRepos/logCreateRepos_LUBM_1_0_RDF4J.log
root@NUC8i7BEH:/data# ls -lsa geordfbench/GraphDBSUT/scripts/CreateRepos/*.log
12 -rw-r--r-- 1 root root 11364 Aug  8 07:28 geordfbench/GraphDBSUT/scripts/CreateRepos/logCreateRepo_LUBM_1_0_GraphDB.log
root@NUC8i7BEH:/data# ls -lsa geordfbench/JenaGeoSPARQLSUT/scripts/CreateRepos/*.log
4 -rw-r--r-- 1 root root 1340 Aug  8 07:31 geordfbench/JenaGeoSPARQLSUT/scripts/CreateRepos/logCreateRepo_LUBM_1_0_JenaGeoSPARQL.log
Verify that the experiment logs have been generated

Experiment run logs may be quite long, therefore the user can click the links below to view the details of the execution.

root@NUC8i7BEH:/data# ls -lsa geordfbench/RDF4JSUT/scripts/RunTests3/*.log
84 -rw-r--r-- 1 root root 78805 Aug  8 07:28 geordfbench/RDF4JSUT/scripts/RunTests3/RunWLRDF4JExp_LUBM_1_0.log
root@NUC8i7BEH:/data# ls -lsa geordfbench/GraphDBSUT/scripts/RunTests3/*.log
92 -rw-r--r-- 1 root root 87938 Aug  8 07:31 geordfbench/GraphDBSUT/scripts/RunTests3/RunWLGraphDBExp_LUBM_1_0.log
root@NUC8i7BEH:/data# ls -lsa geordfbench/JenaGeoSPARQLSUT/scripts/RunTests3/*.log
88 -rw-r--r-- 1 root root 82565 80869 Aug  8 07:34 geordfbench/JenaGeoSPARQLSUT/scripts/RunTests3/RunWLJenaGeoSPARQLExp_LUBM_1_0.log
Verify that the experiment results have been generated in the Default Location

Experiment results are stored by default in the file system. For this demonstration the base location for all results was /data/Results_Store. The output of the following command has been modified to fully expand the last entry only, with the result of tree -L 4 Results_Store/RDF4JSUT/2024-08-08_RDF4JSUT_RunWL_LUBM_1_0/ Results_Store/RDF4JSUT/2024-08-08_RDF4JSUT_RunWL_LUBM_1_0/ :

root@NUC8i7BEH:/data# tree -L 2 Results_Store/
Results_Store/
|-- GraphDBSUT
|   `-- 2024-08-08_GraphDBSUT_RunWL_LUBM_1_0
|-- JenaGeoSPARQLSUT
|   `-- 2024-08-08_JenaGeoSPARQL_RunWL_LUBM_1_0
`-- RDF4JSUT
    `-- 2024-08-08_RDF4JSUT_RunWL_LUBM_1_0
        `-- LUBM
            `-- RDF4JSUT-ExperimentWorkload
                |-- 00-Q1_GradStudents_Taken_GradCource0_At_Univ0-cold
                |-- 00-Q1_GradStudents_Taken_GradCource0_At_Univ0-cold-long
                |-- 00-Q1_GradStudents_Taken_GradCource0_At_Univ0-warm
                |-- 00-Q1_GradStudents_Taken_GradCource0_At_Univ0-warm-long
                |-- 01-Q2_GradStudents_From_Any_Univ_Depart-cold
                |-- 01-Q2_GradStudents_From_Any_Univ_Depart-cold-long
                |-- 01-Q2_GradStudents_From_Any_Univ_Depart-warm
                |-- 01-Q2_GradStudents_From_Any_Univ_Depart-warm-long
                |-- 02-Q3_Publications_Of_AssistProfessor0_In_Univ0_Depart0-cold
                |-- 02-Q3_Publications_Of_AssistProfessor0_In_Univ0_Depart0-cold-long
                |-- 02-Q3_Publications_Of_AssistProfessor0_In_Univ0_Depart0-warm
                |-- 02-Q3_Publications_Of_AssistProfessor0_In_Univ0_Depart0-warm-long
                |-- 03-Q4_Properties_Of_Professors_In_Univ0_Depart0-cold
                |-- 03-Q4_Properties_Of_Professors_In_Univ0_Depart0-cold-long
                |-- 03-Q4_Properties_Of_Professors_In_Univ0_Depart0-warm
                `-- 03-Q4_Properties_Of_Professors_In_Univ0_Depart0-warm-long

root@NUC8i7BEH:/data# more Results_Store/RDF4JSUT/2024-08-08_RDF4JSUT_RunWL_LUBM_1_0/LUBM/RDF4JSUT-ExperimentWorkload/00-Q1_GradStudents_Taken_GradCource0_At_Univ0-cold
4 4513700
root@NUC8i7BEH:/data# more Results_Store/RDF4JSUT/2024-08-08_RDF4JSUT_RunWL_LUBM_1_0/LUBM/RDF4JSUT-ExperimentWorkload/00-Q1_GradStudents_Taken_GradCource0_At_Univ0-cold-long
4 28760800 3875200 32636000
4 2674500 1839200 4513700
4 2315200 2049300 4364500

For each query and execution type (warm, cold) there are two files, a short and a long version. The long version has 4 columns (noOfResults, evaluationTime, scanTime, totalTime) and one row for each execution iteration performed. The short version has 2 columns (noOfResults, totalTime) and only one row which represents the average or median totalTime of the execution iterations from the long version. All times are in nano seconds.

Verify that the experiment results have been generated in the PostgreSQL database

Experiment results are also stored in a custom location, a PostgreSQL database. Each experiment details are recorded, with a unique ID, in a row of the EXPERIMENTS table. Each query execution iteration details are in a similar manner recorded in the QUERYEXECUTIONS table. A set of views can provide aggregation for the totalTime and calculation of the Average and Median value of totalTime for each query and execution type (warm, cold). All times are in milli seconds. In the figures below we can see the actual snapshots from the PgAdmin v4 interface with the experiment details on the left and the report results on the right side. The results database will be accessible to the host PgAdmin4 client at localhost:5430, due to the docker container port mapping.

Experiment Entries
Fig.1 - Experiment entries
Experiment report results
Fig.2 - Experiment report results

Explanation of what happened?

The more interested user, can look at the simple Bash script, /data/startUpScript.sh, which launched the experiments. The actions taken by this script are: