gpt4 book ai didi

postgresql - 如何将大型 nt/rdf 转储加载到 Jena/PostgreSQL 模型(TDB/RDB?)

转载 作者:行者123 更新时间:2023-11-29 12:14:43 24 4
gpt4 key购买 nike

我在我的项目中使用 DBpedia。到目前为止,我一直在使用 SPARQL 客户端,但性能远不能接受(更不用说端点的频繁停机)。

所以我想加载可用的大 NT 文件 http://wiki.dbpedia.org/Downloads36在本地 dbms 中(我有一台带有 PostgreSQL 的服务器)。

在我的应用程序(基于 Java 和 Groovy)中,我打开了一个与 Jena 持久图的连接:

def jenaConnection = new DBConnection( ... )
def maker = ModelFactory.createModelRDBMaker( jenaConnection )
def globalModel = maker.openModel( "my_big_fat_model" )

这对于几千个三元组来说没问题,但是当我尝试使用阅读器加载大型 NT 文件时

RDFReader r = m.getReader( "N-TRIPLE")
r.read( inputStreamFromBigFile ... )

表现令人震惊。它每分钟加载大约 2-3K 个三元组,这意味着整个 DBpedia 数据集(数百万个三元组)可能需要几天才能加载。其他使用 JENA 处理大型数据集的人似乎没有这个问题。

我读到我应该将 TDB 用于大型数据集 (http://jena.apache.org/documentation/tdb/),但我不明白我应该用它做什么。

是跟RDB接口(interface)类似的概念还是什么?我需要在 PostgreSQL 数据库中加载 NT 吗?

JENA 文档在这一点上似乎不是很清楚。

最佳答案

如果你想坚持使用 PostgresQL 作为后端,你应该使用 SDB .与旧的数据库驱动程序相比,它是 Jena 模型关系存储的最新包装器。还有quickstart documentation开始使用 SDB。

TDB 是一种持久性存储,提供了使用关系数据库作为后端三重存储的替代方法。 TDB 在磁盘上构建自己的 b 树索引,并为您管理缓存。在其他方面,它在程序员看来就像一个普通的 Jena Model。 TDB 具有有助于加载过程的命令行工具,尽管它们是 bash 脚本,因此需要 Linux 或 cygwin。要加载 dbpedia,这是我过去所做的:

$> tdbloader2 --loc ./tdb ./source/*.nt

./source 是我从 dpbedia 下载各种 .nt 文件的目录。在合理的机器上需要几个小时,但肯定不是几天。

./tdb 中有了 TDB 图像后,只需按照 documentation在您的 Java 程序中加载 Model:

String directory = "./tdb" ;
Model model = TDBFactory.createModel(directory) ;
...
model.close() ;

从那里开始,只需像通常使用任何 Jena 模型一样使用 model。有一个警告:TDB 不提供任何并发支持。如果您的应用需要并发访问商店(具体来说,任何写入与一次或多次读取并发),您将需要在应用级别处理锁定。

关于postgresql - 如何将大型 nt/rdf 转储加载到 Jena/PostgreSQL 模型(TDB/RDB?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6075292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com