Сложный запрос SPARQL - виртуозные подсказки производительности?

У меня довольно сложный SPARQL-запрос, который выполняется тысячи раз в параллельных потоках (400 потоков). Здесь запрос несколько упрощен (пространства имен, свойства и переменные уменьшены) для удобства чтения, но сложность осталась без изменений (объединения, число графиков и т. Д.). Запрос выполняется для 4 графиков, самый большой из которых содержит 5561181 тройки.

PREFIX graphA: <GraphABaseURI:>

ASK
FROM NAMED <GraphBURI>
FROM NAMED <GraphCURI>
FROM NAMED <GraphABaseURI>
FROM NAMED <GraphDBaseURI>
WHERE{
   {  
      GRAPH <GraphABaseURI>{
         ?variableA a graphA:ClassA .
         ?variableA graphA:propertyA ?variableB .
         ?variableB dcterms:title ?variableC .
         ?variableA graphA:propertyB ?variableD .
         ?variableL<GraphABaseURI:propertyB> ?variableD .
         ?variableD <propertyBURI> ?variableE
      }
      .
      GRAPH <GraphBURI>{
        ?variableF <propertyCURI>/<propertyDURI> ?variableG .
        ?variableF <propertyEURI> ?variableH
      }
      .
      GRAPH <GraphCURI>{
        ?variableI <http://www.w3.org/2004/02/skos/core#notation> ?variableJ .
        ?variableI <http://www.w3.org/2004/02/skos/core#prefLabel> ?variableK .
        FILTER (isLiteral(?variableK) && REGEX(?variableK, "literalA", "i"))
      }
      . 
      FILTER (isLiteral(?variableJ) && ?variableG = ?variableJ) .
      FILTER (?variableE = ?variableH)
   }
   UNION
   {
       GRAPH <GraphABaseURI>{
          ?variableA a graphA:ClassA .
          ?variableA graphA:propertyA ?variableB .
          ?variableB dcterms:title ?variableC .
          ?variableA graphA:propertyB ?variableD .
          ?variableL<propertyBURI> ?variableE .
          ?variableL <propertyFURI> ?variableD .
       }
       .
       GRAPH <GraphDBaseURI>{
          ?variableM <propertyGURI> ?variableN .
          ?variableM <propertyHURI> ?variableO .
          FILTER (isLiteral(?variableO) && REGEX(?variableO, "literalA", "i"))
       }
       .
       FILTER (?variableE = ?variableN) .

   }
   UNION
   {
       GRAPH <GraphABaseURI>{
          ?variableA a graphA:ClassA .
          ?variableA graphA:propertyA ?variableB .
          ?variableB dcterms:title ?variableC .
          ?variableA graphA:propertyB ?variableD .
          ?variableL<propertyBURI> ?variableE .
          ?variableL <propertyIURI> ?variableD .
       }
       .
       GRAPH <GraphDBaseURI>{
          ?variableM <propertyGURI> ?variableN .
          ?variableM <propertyHURI> ?variableO .
          FILTER (isLiteral(?variableO) && REGEX(?variableO, "literalA", "i"))
       }
       .
       FILTER (?variableE = ?variableN) .
   }
   . FILTER (isLiteral(?variableC) && REGEX(?variableC, "literalB", "i")) .  
}

Я не ожидал бы, что кто-то преобразует вышеуказанный запрос (конечно ...). Я публикую запрос только для демонстрации сложности и всех используемых структур SPARQL.

Мои вопросы:

Получу ли я выигрыш в производительности, если бы все мои тройки были на одном графике? Таким образом, я бы избежал профсоюзов и упростил бы мой запрос, однако выиграет ли это также с точки зрения производительности?Есть ли какие-либо индексы, которые я мог бы построить, и они могли бы помочь с вышеуказанным запросом? Я не очень уверен в индексации данных, однако чтение враздел «Схема индекса RDF» в настройке производительности RDFИнтересно, подходит ли схема индексации по умолчанию в Virtuoso 7 для подобных запросов? Хотя предикаты определены в тройном шаблоне SPARQL вышеупомянутого запроса, существует много тройных шаблонов, в которых не определен субъект или предикат. Может ли это быть серьезной проблемой в отношении производительности?Возможно, есть синтаксическая структура SPARQL, о которой я не знаю, и она может оказать большую помощь в приведенном выше запросе. Не могли бы вы предложить что-нибудь? Например, я уже улучшил производительность, удаливSTR() бросает и используяisLiteral() функция. Не могли бы вы предложить что-нибудь еще?Возможно, вы могли бы предложить злоупотреблять сложной структурой синтаксиса SPARQL?

Обратите внимание, что я использую Virtuoso Open source edition, построенную на Ubuntu, Версия: 07.20.3214, Сборка: 14 октября 2015.

С уважением, Пантелис Нациавас

Ответы на вопрос(1)

Ваш ответ на вопрос