sparql删除查询优化

时间:2015-06-12 16:20:36

标签: insert sparql

我有一个查询删除/插入,我希望尽可能优化。查询一次最多可删除/插入50个对象。我的Jmeter测试表明,与INSERT相比,DELETE子句需要4倍的时间:删除大约需要3300毫秒,插入大约需要860毫秒。我想改进DELETE子句。我在考虑使用FILTER,但被告知它不能很好地扩展。任何建议都非常感谢。 我现在拥有的是:

DELETE { 
?s ?p ?o.
?collection dc:identifier  ?cid;
    rdf:type  ?ct;
    rdf:li  ?list.
?list   rdf:first ?first; 
    rdf:rest  ?rest.
} 
WHERE
{
    { ?s dc:identifier "11111"^^xsd:int; ?p ?o. } 
    UNION { ?s dc:identifier "22222"^^xsd:int; ?p ?o.} 
    UNION {?s dc:identifier "33333"^^xsd:int; ?p ?o.} 
    UNION{} UNION{}.......

    OPTIONAL{
        ?s  dc:hasPart ?collection.
        ?collection dc:identifier  ?cid;
            rdf:type    ?ct;
            rdf:li  ?list.
        ?list   rdf:first ?first;
           rdf:rest  ?rest.
}
INSERT DATA 
{
    GRAPH <http://test.org/>
    {.....}
    GRAPH <http://test.org/>
    {.....}
    GRAPH....
}

1 个答案:

答案 0 :(得分:1)

如果没有您的数据,或者甚至不知道您使用的是哪家三重商店,我们在优化方面也无法提供太多帮助。可能只是删除比插入更昂贵。也就是说,可能帮助的一件事是在 where 块中使用而不是 union 。也就是说,而不是:

{ ?s dc:identifier "11111"^^xsd:int; ?p ?o. } 
UNION { ?s dc:identifier "22222"^^xsd:int; ?p ?o.} 
UNION {?s dc:identifier "33333"^^xsd:int; ?p ?o.} 
UNION{} UNION{}.......

做的:

values ?identifier { "11111"^^xsd:int "22222"^^xsd:int "33333"^^xsd:int "44444"^^xsd:int }
?s dc:identifier ?identifier ; ?p ? o