mysql - 如何使用 Jena SDB 插入/更新/删除个人以保持最佳性能?

标签 mysql performance sparql jena

最近我从 OWL API 切换到 Jena,希望能提高有关数据插入和查询的性能。

所以我开始使用 Jena SDB 将我的 OWL 本体加载到基于 MySQL 的三重存储中。所以我用了

model.read("owl-concepts.turtle")

Jena 在三元组存储(在 Mysql 表中)中创建了大约 1500 个节点。最初我对大量节点感到有点惊讶。但这似乎是合理的,因为 OWL 本体包含大约 80 个具有多个数据和对象属性的 OWL 类。

为了从本体中读取数据(个人),我利用了 Jena SDB 接口(interface)。我检索了一个模型并基于该模型创建了一个 ontModel。我使用那个 ontModel 来修改个人,例如:

ontModel.createIndividual(...);
ontModel.getIndividual(....);
individual.remove();

对于 ontModel 我使用了 OWL_MEM;根据文档,这应该意味着没有应用任何推理。

我意识到,基于所描述的方法,个人数据的修改并没有我预期的那么快。平均而言,插入一个简单的个体需要 2 到 30 秒。

所以我开始问:在 Jena 中使用模型接口(interface)是否是推荐的修改数据的方法,或者这种方法性能低,应该使用 SPARQL 来修改数据?我最初的计划是仅将 SPARQL 用于查询部分...

感谢每一位专家的意见或您在 Jena 的体验。

最佳答案

将持久性三重存储(尤其是 SDB)与推理器一起使用并不是一个好主意。 Reasoner 经常对数据库进行大量的随机访问,每次访问都有一点开销。一旦将它们加起来,事情就会变慢。

同样,使用 SPARQL 而不是模型或本体 API,因为您会再次生成大量小访问。

鉴于您的数据大小,这可能很适合内存,所以就这样做吧。您始终可以将数据从 SDB 存储中移出,也可以从 SDB 存储中移出以持久保存。

关于mysql - 如何使用 Jena SDB 插入/更新/删除个人以保持最佳性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18661063/

相关文章:

mysql - 如何删除gridview中数据的Datefield中的时间部分

php - 如何将出生日期转换为年龄并将其保存到表格中?

Mysql自内连接查询?

android - 布局类型之间的权衡

sparql - 使用 SPARQL 访问链接数据图

PHP MySQL 更新查询不适用于变量

php - 如何从 GROUP_CONCAT 中删除单个行?

java - JAXB 保留传递给 Marshaller 的对象

python - 使用 Django 的 ORM Extra() 包含重复表

SPARQL 子查询和 DELETE