如何创建不在内存中的 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 将您的数据集存储在磁盘上,但访问起来非常高效:与内存模型相比,您应该不会体验到任何真正的性能差异。
通常,如果我要处理大型模型或数据集,我会这样工作:
在命令行加载模型:
# /tmp/DB is where TDB will store the indexed model
$ tdbloader2 --loc /tmp/DB file.nt
(在 Windows 上使用 tdbloader
)
(可选)尝试查询:
$ tdbquery --loc /tmp/DB @query.sparql
像 java 中的任何旧模型一样访问:
Dataset dataset = TDBFactory.createDataset("/tmp/DB") ;
Model model = dataset.getDefaultModel() ;
... continue as before ...
我正在尝试在 jena 中创建一个 Model
,它不会将整个数据加载到内存中,而是从文件系统中读取。
我发现了很多可用的配置,但它们似乎都在内存中(例如 OntModelSpec
)。
您可以创建自己的 org.apache.jena.graph.Graph 实现,但它不能使用内存。 例如 d2rq,其中 de.fuberlin.wiwiss.d2rq.jena.GraphD2RQ 使用数据库。但它基于过时的jena。
使用 Apache Jena TDB - 参见 documentation here。
TDB 将您的数据集存储在磁盘上,但访问起来非常高效:与内存模型相比,您应该不会体验到任何真正的性能差异。
通常,如果我要处理大型模型或数据集,我会这样工作:
在命令行加载模型:
# /tmp/DB is where TDB will store the indexed model $ tdbloader2 --loc /tmp/DB file.nt
(在 Windows 上使用 tdbloader
)
(可选)尝试查询:
$ tdbquery --loc /tmp/DB @query.sparql
像 java 中的任何旧模型一样访问:
Dataset dataset = TDBFactory.createDataset("/tmp/DB") ; Model model = dataset.getDefaultModel() ; ... continue as before ...