如何加快删除已确定类型的所有RDF主题?

如何加快删除已确定类型的所有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

我正在与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);

但是,在具有5.342.213元组的数据库中执行此操作大约需要15分钟。如何更有效地执行此操作?

如@AndyS注释中所述,将容器从
ArrayList
更改为
LinkedList
使其在几秒钟内执行。但是,它要求Java堆空间变大。

您尝试过SPARQL版本吗?您使用的是什么存储?在记忆中?由于ArrayList内部增长缓慢(*1.5),因此将其放入ArrayList的成本可能会非常高。这还与垃圾收集器交互。预分配大型阵列的速度明显更快。
DELETE WHERE {
     ?x rdf:type loa:ItemDespesa
     ?x ?y ?z
}