2015-06-12 4 views
0

У меня есть запрос delete/insert, который я бы хотел оптимизировать, если это возможно. Запрос удаляет/вставляет до 50 объектов за раз. Мои тесты Jmeter показывают, что предложение DELETE занимает в 4 раза больше по сравнению с INSERT: delete занимает около 3300 мс, а вставка занимает около 860 мс. Я хотел бы улучшить предложение DELETE. Я думал об использовании FILTER, но мне сказали, что он не будет хорошо масштабироваться. Любые рекомендации очень ценятся. То, что я прямо сейчас:оптимизация запроса sparql

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

Не имея данных, или даже зная, что тройная магазин вы используете, мы не можем реально помочь многое в оптимизации. Это может быть только то, что удаление дороже, чем вставки. Тем не менее, одна вещь, которая может помощь в использовании значения, а не союза с в вашем где блок. То есть, вместо того, чтобы:

{ ?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 
+0

Спасибо для вас предложение - я попытался с помощью значения, но скорость для удаления остается неизменной. Однако это было сделано. – user2917629

+0

@ user2917629 У вас есть основания полагать, что удаление работает медленнее, чем «должно быть»? Ваш «delete where» требует запроса, а затем создает тройки на основе запроса. «Вставить данные» просто вставляет литеральные данные. Для меня имеет смысл, что «delete where» займет больше времени. –

+0

Да, вы правы, у удаления есть еще много дел. Я смог сократить 200 мс, добавив дополнительные ОПЦИИ в предложение WHERE, поэтому, я думаю, я оставлю это на этом. – user2917629

Смежные вопросы