Virtuoso 42000 Error Расчетное время выполнения - PullRequest
0 голосов
/ 28 апреля 2019

Используя конечную точку SPedQL DBpedia-Live http://dbpedia -live.openlinksw.com / sparql , я пытаюсь подсчитать общее количество троек, связанных с экземплярами типа owl:Thing. Поскольку количество действительно велико, создается исключение «Ошибка Virtuoso 42000 Расчетное время выполнения». Чтобы избавиться от этого, я попытался использовать в запросе подвыбор, limit и offset. Однако, когда offset больше, чем равно limit, решение не работает и снова выдается то же исключение (ошибка Virtuoso 42000), может кто-нибудь определить проблему с моим запросом? Или предложить обходной путь? Предоставлен запрос, который я пытался:

select count(?s) as ?count
where
{
?s ?p ?o
  {
      select ?s
      where
      {
          ?s rdf:type owl:Thing.
      }
    limit 10000
    offset 10000
  }
}

1 Ответ

2 голосов
/ 29 апреля 2019

Ваше решение начинается с терпения. Виртуальный запрос * в Virtuoso возвращает некоторые результаты, когда истекает время ожидания, и продолжает выполнять запрос в фоновом режиме - поэтому, если вы вернетесь позже, вы, как правило, получите больше решений, вплоть док полному набору результатов.

Мне нужно было угадать исходный запрос , поскольку вы разместили только тот фрагмент, который пытались использовать -

select ( count(?s) as ?count )
where
{
          ?s rdf:type owl:Thing.
}

Я получил 3,923,114 в течение нескольких секунд, без перерыва.Я установил в форме тайм-аут 3000000 миллисекунд (= 3000 секунд = 50 минут) - в отличие от времени ожидания конечной точки по умолчанию, равного 30000 миллисекунд (= 30 секунд), - но явно не достиг ни этих значений, ни конечной точки настроенное на стороне сервера время ожидания .

Я думаю, что вы уже поняли это, но, пожалуйста, обратите внимание, что этот счетчик является движущейся целью и будет регулярно меняться, так как контент DBpedia-Live продолжает обновляться спожарный шланг из Википедии.


В ваших усилиях «разделяй и властвуй» есть существенная проблема.Обратите внимание, что без предложения ORDER BY в сочетании с вашими предложениями LIMIT / OFFSET вы можете обнаружить, что некоторые решения (в данном случае некоторые значения ?s) повторяются и / или некоторые решения никогда не появляются в окончательном варианте.агрегация, которая объединяет все эти частичные результаты.

Кроме того, поскольку вы пытаетесь сосчитать троек , вам, вероятно, следует сделать count(*) вместо count (?s).Если это ничто иное, это поможет читателям запроса понять, что вы делаете.


Чтобы иметь возможность регулировать такие ограничения времени выполнения, когда ваш запрос выполняется - самый простой способ - создать экземпляр вашегособственное зеркало через DBpedia-Live AMI ;к сожалению, в настоящее время это недоступно для новых клиентов по ряду причин.(Существующие клиенты могут продолжать использовать свои AMI.) Мы, вероятно, восстановим это в какой-то момент, но сроки не определены;Вы можете открыть «Службу поддержки» , чтобы зарегистрировать свой интерес, и получить уведомление, когда AMI станет доступным для новых пользователей.


На пути к окончательному решению ... Может быть, лучшеспособы достижения вашей конечной цели, чем те, над которыми вы сейчас работаете.Вы можете задать вопрос в Списке рассылки DBpedia или OpenLink Community Forum .

...