Как ускорить удаление всех предметов RDF определенного типа?
Я выполняю следующий фрагмент кода с 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
}
Тем не менее, это займет около 15 минут для выполнения в базе данных с 5.342.213 кортежей. Как сделать это более эффективно?
1 ответ
Решение
Как описано в комментарии @AndyS, изменение контейнера с ArrayList
в LinkedList
заставил его выполнить в считанные секунды. Однако, это требовало увеличения пространства кучи Java.