Непоследовательные подсчеты в Virtuoso 7.1 для больших графиков

У меня запущен экземпляр Virtuoso 7.1 и настроена DBpedia, как ясно разъяснено в этом блог. Теперь у меня есть очень простое требование найти некоторые значения счетчика. Однако меня смущают результаты моего запроса:

select count(?s) 
where {?s ?p ?o . 
FILTER(strstarts(str(?s),"http://dbpedia.org/resource")) }

С помощью этого запроса я хотел бы увидеть, сколько ресурсов присутствует в DBpedia с URI, начинающимся с "http://dbpedia.org/resource". По сути, я надеюсь найти ресурсы типа <http://dbpedia.org/resource/Hillary_Clinton> или <http://dbpedia.org/resource/Bill_Clinton> и так далее.

Меня смущает тот факт, что Virtuoso каждый раз возвращает разные результаты.

Теперь я попробовал это на двух разных машинах, на локальной машине и на нашем сервере. В обоих случаях я вижу совершенно разные результаты. Дико я просто хотел бы, чтобы вы попробовали размеры. Это 1101000, 36314, 328014, 292014.

Также о тайм-ауте выполнения. Я попытался изменить его на 5000 с 0 по умолчанию или на 8000. Это точно не увеличило результаты.

Я знаю, что DBpedia предоставляет статистику для своего дампа, но я хотел бы сделать это прямо в Virtuoso. Почему это аномалия?

Кроме того, я также видел это обсуждение, где они ссылаются на что-то, что может быть связано . Я просто хотел бы знать, как правильно подсчитать DBpedia в Virtuoso. Если не Virtuoso, есть ли какой-либо другой магазин графов, например, Jena, rdf4j, Fuseki, который будет делать это правильно?


person N00bsie    schedule 04.09.2016    source источник


Ответы (1)


Во-первых, Virtuoso 7.1 очень старый (выпущен 17 февраля 2014 г.). Я настоятельно рекомендую выполнить обновление до текущей сборки 7.2.4 (строка версии 07.20.3217) или более поздней версии, будь то Commercial или с открытым исходным кодом.

Теперь — выполняемый вами запрос должен проделать большую работу, чтобы получить результат. Он должен проверить каждый ?s вашей строки, а затем подсчитать количество. Для этого потребуется (относительно) очень много времени; точное время зависит от среды выполнения и общего размера базы данных, среди других важных факторов.

Заголовки HTML (в частности, X-SQL-Message) будут включать уведомление о таких тайм-аутах запроса, как показано здесь —

$ curl -LI "http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=SELECT+COUNT%28%3Fs%29+%0D%0AWHERE%0D%0A++%7B++%3Fs++%3Fp++%3Fo++.+%0D%0A+++++FILTER%28strstarts%28str%28%3Fs%29%2C%22http%3A%2F%2Fdbpedia.org%2Fresource%22%29%29+%0D%0A++%7D+&format=text%2Fhtml&CXML_redir_for_subjs=121&CXML_redir_for_hrefs=&timeout=3000000&debug=on"
HTTP/1.1 200 OK
Date: Tue, 06 Sep 2016 16:39:44 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 128
Connection: keep-alive
Server: Virtuoso/07.20.3217 (Linux) i686-generic-linux-glibc212-64  VDB
X-SPARQL-default-graph: http://dbpedia.org
X-SQL-State: S1TAT
X-SQL-Message: RC...: Returning incomplete results, query interrupted by result timeout.  Activity:  12.43M rnd  13.28M seq      0 same seg   8.023M same pg  3.369M same par      0 disk      0 spec disk      0B /      0 m
X-Exec-Milliseconds: 121040
X-Exec-DB-Activity: 12.43M rnd  13.28M seq      0 same seg   8.023M same pg  3.369M same par      0 disk      0 spec disk      0B /      0 messages      0 fork
Expires: Tue, 13 Sep 2016 16:39:44 GMT
Cache-Control: max-age=604800
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: HEAD, GET, POST, OPTIONS
Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Accept-Encoding
Accept-Ranges: bytes

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

person TallTed    schedule 06.09.2016
comment
Итак, если я установил бесконечные тайм-ауты? мой единственный вопрос/беспокойство заключается в том, что я все равно столкнусь с разными счетами. Я имею в виду, соответствует ли «наиболее полный» правильному результату? Это известная функция Virtuoso или вы сталкивались с ней? - person N00bsie; 08.09.2016
comment
Я работаю в компании OpenLink Software. Мы производим Virtuoso. Это функция AnyTime Query. Если вы установили бесконечные тайм-ауты, Virtuoso будет обрабатывать до тех пор, пока решение не будет завершено, и предоставит этот ответ. Если вы установили время ожидания короче, чем требуется для завершения запроса, вы получите частичный ответ, помеченный как описанный выше. - person TallTed; 08.09.2016
comment
Большое спасибо, что нашли время ответить на этот вопрос @TallTed. Я попробую это сейчас. - person N00bsie; 09.09.2016