0

我想使用 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 Reasoner无法推断?所有的工作都是在我的电脑上完成的,有没有朋友可以帮帮我?谢谢

4

1 回答 1

0

在 fuseki 中,当在太大的 DataSet 上运行 Reasoner 时,推理将在查询执行时应用于 All Graph。除此之外,所有推理都将在 Fuseki TDB 案例推理器应用前向推理中实现。它将给系统带来负担,导致图形使用 RAM 内存来实现和推理。

我们已经让一台为 Fuseki 专用 1 TD RAM 的机器崩溃了。

一种可能的解决方案是将数据集拆分为独立的部分以调整查询。有关更多信息,请查看使用集群实现高性能的 hadoop 和 AllegroGraph 解决方案 https://allegrograph.com/hadoop-and-allegrograph-the-semantic-data-lake-for-analytics/

这取决于您的需求。在无限规模中,集群解决方案似乎是最好的,但也许在本地增加专用 RAM 内存给 JVM 可以解决您的问题。

于 2020-02-17T17:10:17.903 回答