It might be helpful to mention that the memory usage I measure is after running the following query:

SELECT * WHERE { ?s ?p ?o } LIMIT 1

which will materialise (most?) the blank nodes.

After working on this some more, I manage to keep memory usage down using hybrid rules, but I'm afraid that will only work for so long.


On 2020/11/11 16:37:29, Laurent Repond <[email protected]> wrote:
> Hi,>
>
> I would like to use Fuseki to handle SPARQL queries over an inferred > > graph, but am running into some memory issues. At the moment, I start >
> up a Fuseki service using a config file that contains:>
>
> <#dataset> rdf:type ja:RDFDataset ;>
>         rdfs:label "ds" ;>
>         ja:defaultGraph <#inferenceModel> .>
>
> <#inferenceModel> rdf:type      ja:InfModel;>
>   ja:baseModel <#baseModel>;>
>   ja:content [ja:externalContent >
> <<<file:///data/solo/databases/test_facts.ttl>>> ] ;>
>   ja:reasoner [ja:reasonerURL >
> <<<http://jena.hpl.hp.com/2003/GenericRuleReasoner>>> ;>
>   ja:rulesFrom <<<file:///data/solo/databases/test.rules>>> ;>
>   ];>
>   .>
> <#baseModel> rdf:type tdb2:GraphTDB2;>
>   tdb2:location "/data/solo/databases/" ;>
>      .>
>
>
> This makes an inference model using the GenericRuleReasoner from the >
> files test.rules and test_facts.ttl.>
>
> However, it ends up using a lot of memory and I am having difficulty > > understanding why. As a test, I only included the following facts in >
> test_facts.ttl:>
>
> @prefix rdf: <<<http://www.w3.org/1999/02/22-rdf-syntax-ns#>>> .>
> @prefix rdfs: <<<http://www.w3.org/2000/01/rdf-schema#>>> .>
> @prefix owl: <<<http://www.w3.org/2002/07/owl#>>> .>
> @prefix skos: <<<http://www.w3.org/2004/02/skos/core#>>> .>
> @prefix : <<<http://example.org/>>> .>
>
> :testBNode rdfs:type owl:Class .>
>
> :FirstTestBNode a :testBNode;>
>     :testNumber 1 .>
>
>
> And the following (single) rule in test.rules:>
>
> [lotsOfBlankNodes:>
>         (?testBNode rdf:type :testBNode)>
>         (?testBNode hx:testNumber ?num)>
>         lessThan(?num, 1000000)>
>         addOne(?num, ?next_num)>
>         makeSkolem(?next_testBNode, ?next_num)>
>         ->>
>         (?next_testBNode rdf:type :testBNode)>
>         (?next_testBNode :testNumber ?next_num)>
>         ]>
>
>
>
> When I start Fuseki, this uses forward-chaining to materialise about 2 > > million triples. When I look at my system monitor, it creates a java >
> process that takes 6.3 GB of memory. A quick back of the napkin >
> calculation means that, for each triple, about 3.2 kB is needed. >
> Comparing that to the actual information stored in each triple (which >
> is on the order of bytes), this seems at least 1000 times too large.>
>
> Is there something wrong in the way that Fuseki is configured that is >
> causing it to use such large amounts of memory?>
>
> Thank you in advance for your help->
>
> Kindest regards,>
>
> Laurent>
>
>
>



--
*LAURENT REPOND*

Software Engineer



*Home Experience LLC*

[email protected] <mailto:[email protected]>


Reply via email to