Как ускорить удаление всех предметов 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.

Другие вопросы по тегам