我有一个查询删除/插入,我希望尽可能优化。查询一次最多可删除/插入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....
}
答案 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