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]>