Steve, so subsequent queries on the model should be much faster. +1 to Dave's comments, matrialization is the way to go here to speed up the process.
in addition for large datasets I would recommend generic rules or construct queries if you already know which data points you would like to process to generate the query model. On Sun, Feb 23, 2020 at 9:33 PM Dave Reynolds <dave.e.reyno...@gmail.com> wrote: > The issues is not performance of SPARQL but performance of the inference > engines. > > If you need some OWL inference then your best bet is OWLMicro. > > If that's tow slow to query directly then one option to try is to > materialize the entire inference closure and then query that. You can > that by simply copying the inference model to a plain model. > > If that's too slow then you'll need a higher performance third party > reasoner. > > Dave > > On 23/02/2020 18:57, Steve Vestal wrote: > > I'm looking for suggestions on a SPARQL performance issue. My test > > model has ~800 sentences, and processing of one select query takes about > > 25 minutes. The query is a basic graph pattern with 9 variables and 20 > > triples, plus a filter that forces distinct variables to have distinct > > solutions using pair-wise not-equals constraints. No option clause or > > anything else fancy. > > > > I am issuing the query against an inference model. Most of the asserted > > sentences are in imported models. If I iterate over all the statements > > in the OntModel, I get ~1500 almost instantly. I experimented with > > several of the reasoners. > > > > Below is the basic control flow. The thing I found curious is that the > > execSelect() method finishes almost instantly. It is the iteration over > > the ResultSet that is taking all the time, it seems in the call to > > selectResult.hasNext(). The result has 192 rows, 9 columns. The results > > are provided in bursts of 8 rows each, with ~1 minute between bursts. > > > > OntModel ontologyModel = getMyOntModel(); // Tried various > reasoners > > String selectQuery = getMySelectQuery(); > > QueryExecution selectExec = > > QueryExecutionFactory.create(selectQuery, ontologyModel); > > ResultSet selectResult = selectExec.execSelect(); > > while (selectResult.hasNext()) { // Time seems to be spent in > > hasNext > > QuerySolution selectSolution = selectResult.next(); > > for (String var : getMyVariablesOfInterest() { > > RDFNode varValue = selectSolution.get(var); > > // process varValue > > } > > } > > > > Any suggestions would be appreciated. > > > -- --- Marco Neumann KONA