如何加快删除确定类型的所有RDF主题?
How to speed up deletion of all RDF subjects of a determined type?
我正在使用 Jena 执行以下代码,以删除涉及类型为 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);
...我猜这相当于以下 SPARQL:
DELETE WHERE {
?x rdf:type loa:ItemDespesa
?x ?y ?z
}
但是,在具有 5.342.213 个元组的数据库中执行此操作大约需要 15 分钟。如何更有效地解决这个问题?
如@AndyS 的评论所述,将容器从 ArrayList
更改为 LinkedList
使其在几秒钟内执行。但是,它需要 Java 堆 space 变大。
我正在使用 Jena 执行以下代码,以删除涉及类型为 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);
...我猜这相当于以下 SPARQL:
DELETE WHERE {
?x rdf:type loa:ItemDespesa
?x ?y ?z
}
但是,在具有 5.342.213 个元组的数据库中执行此操作大约需要 15 分钟。如何更有效地解决这个问题?
如@AndyS 的评论所述,将容器从 ArrayList
更改为 LinkedList
使其在几秒钟内执行。但是,它需要 Java 堆 space 变大。