如何创建不在内存中的 jena 模型?

how to create a jena Model not in-memory?

我正在尝试在 jena 中创建一个 Model,它不会将整个数据加载到内存中,而是从文件系统中读取。

我发现了很多可用的配置,但它们似乎都在内存中(例如 OntModelSpec)。

您可以创建自己的 org.apache.jena.graph.Graph 实现,但它不能使用内存。 例如 d2rq,其中 de.fuberlin.wiwiss.d2rq.jena.GraphD2RQ 使用数据库。但它基于过时的jena。

使用 Apache Jena TDB - 参见 documentation here

TDB 将您的数据集存储在磁盘上,但访问起来非常高效:与内存模型相比,您应该不会体验到任何真正的性能差异。

通常,如果我要处理大型模型或数据集,我会这样工作:

  1. 在命令行加载模型:

    # /tmp/DB is where TDB will store the indexed model
    $ tdbloader2 --loc /tmp/DB file.nt
    

(在 Windows 上使用 tdbloader

  1. (可选)尝试查询:

    $ tdbquery --loc /tmp/DB @query.sparql
    
  2. 像 java 中的任何旧模型一样访问:

    Dataset dataset = TDBFactory.createDataset("/tmp/DB") ;
    Model model = dataset.getDefaultModel() ;
    ... continue as before ...