我想用Jena Fuseki为某个本体文件构造一个SPARQL端点。 和我的 fuseki 配置如下:
@prefix fuseki: <http://jena.apache.org/fuseki#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
<#service1> rdf:type fuseki:Service ;
fuseki:name "ds" ; # http://host:port/ds
fuseki:serviceQuery "sparql" ; # SPARQL query service
fuseki:serviceQuery "query" ; # SPARQL query service (alt name)
fuseki:serviceUpdate "update" ; # SPARQL update service
fuseki:serviceUpload "upload" ; # Non-SPARQL upload service
fuseki:serviceReadWriteGraphStore "data" ; # SPARQL Graph store protocol (read and write)
# A separate read-only graph store endpoint:
fuseki:serviceReadGraphStore "get" ; # SPARQL Graph store protocol (read only)
fuseki:dataset <#dataset> ;
.
<#dataset> rdf:type ja:RDFDataset ;
ja:defaultGraph <#inf_model> ;
.
<#mv_data_model> a ja:MemoryModel;
ja:content[ja:externalContent <file://D:/Program%20Files/d2rq-0.8.1/movie.nt>] ;
ja:content[ja:externalContent <file://D:/Program%20Files/apache-jena-fuseki-3.13.1/run/ontology.ttl>]
.
<#inf_model> a ja:InfModel ;
ja:baseModel <#mv_data_model>;
ja:reasoner [ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>] ;
#ja:reasoner [
# ja:reasonerURL <http://jena.hpl.hp.com/2003/GenericRuleReasoner> ;
# ja:rulesFrom <file://D:/Program%20Files/apache-jena-fuseki-3.13.1/run/rule.ttl>; ]
.
我将 fuseki 作为独立服务器运行。当我关闭 OWL 推理器时,它运行良好。但是一旦启用了 OWL 推理器,服务器对查询也没有响应,即使是像
SELECT ?s ?p ?o
WHERE {
?s ?p ?o
}
limit 10
没有响应,然后抛出异常:java.lang.OutOfMemoryError。但是,RuleReasoner运行良好。 而我的ttl文件大约有1500000个三元组,数据规模太大,OWL推理器无法进行推理吗? 所有工作都在我的电脑上完成,任何朋友都可以为我提供帮助吗?谢谢
在 fuseki 中,当在太大的数据集上运行推理器时,推理将在查询执行时间内应用于所有图形。除此之外,所有推论都将在 Fuseki TDB 案例推理器中实现 应用前向推理.它会给系统带来负担,导致图形会很大,无法使用 RAM 内存进行推理。
我们已经撞毁了一台将 1 TD RAM 专用于 Fuseki 的机器。
一种可能的解决方案是将数据集拆分为独立的部分来优化查询。 有关更多信息,请查看Hadoop和AllegroGraph解决方案,以实现集群的高性能 https://allegrograph.com/hadoop-and-allegrograph-the-semantic-data-lake-for-analytics/
这取决于您的需求。在无限范围内,集群解决方案似乎是最好的,但也许在本地增加专用 RAM 内存到 JVM 可以解决您的问题。