如何加快删除已确定类型的所有RDF主题?
我正在与Jena一起执行以下代码,以删除所有涉及类型为如何加快删除已确定类型的所有RDF主题?,rdf,sparql,jena,Rdf,Sparql,Jena,我正在与Jena一起执行以下代码,以删除所有涉及类型为ItemDespesa的主题的语句: StmtIterator it = m.listStatements(null, ResourceFactory.createProperty(RDF("type")), ResourceFactory.createResource(LOA("ItemDespesa"))); ArrayList l = new ArrayList<Statement>(); while
ItemDespesa
的主题的语句:
StmtIterator it = m.listStatements(null, ResourceFactory.createProperty(RDF("type")), ResourceFactory.createResource(LOA("ItemDespesa")));
ArrayList l = new ArrayList<Statement>();
while (it.hasNext()) {
Statement n = it.nextStatement();
StmtIterator it2 = m.listStatements(n.getSubject(), null, (RDFNode)null);
while (it2.hasNext()) l.add(it2.nextStatement());
}
m.remove(l);
但是,在具有5.342.213元组的数据库中执行此操作大约需要15分钟。如何更有效地执行此操作?如@AndyS注释中所述,将容器从
ArrayList
更改为LinkedList
使其在几秒钟内执行。但是,它要求Java堆空间变大。您尝试过SPARQL版本吗?您使用的是什么存储?在记忆中?由于ArrayList内部增长缓慢(*1.5),因此将其放入ArrayList的成本可能会非常高。这还与垃圾收集器交互。预分配大型阵列的速度明显更快。
DELETE WHERE {
?x rdf:type loa:ItemDespesa
?x ?y ?z
}