Я использую GraphDB Free 7.1, и я создал репозиторий с настройками по умолчанию. Я загрузил файл ttl с 2,7 миллионами триплетов. Я пытаюсь создать запрос (не очень сложный, но довольно сложный), который должен вернуть 200k ответы и Workbench отображает только 1k ответы и журнал GraphDB отображает исключениеОценка запроса заняла слишком много времени
10:52:19.580 [repositories/PaaSport] INFO c.o.f.sesame.RepositoryController - POST query -1325396809
10:52:29.594 [repositories/PaaSport] ERROR o.o.h.s.r.TupleQueryResultView - Query interrupted
org.openrdf.query.QueryInterruptedException: Query evaluation took too long
...
10:52:29.594 [repositories/PaaSport] INFO o.o.h.s.r.TupleQueryResultView - Request for query -1325396809 is finished
Запрос я использую:
SELECT DISTINCT ?offering ?Value
WHERE {
?offering a paasport:Offering ;
DUL:satisfies ?groundDescription .
?groundDescription paasport:offers ?characteristic .
?characteristic a paasport:Storage ;
DUL:hasParameter ?par .
?par a paasport:StorageCapacity ;
DUL:hasParameterDataValue ?Value ;
DUL:parametrizes ?qualityValue .
?qualityValue uomvocab:measuredIn ?Units .
?Units a ?AppParMeasureUnitType .
ucum:GB a ?AppParMeasureUnitType .
?Units a uomvocab:SimpleDerivedUnit .
ucum:GB a uomvocab:SimpleDerivedUnit .
ucum:GB uomvocab:derivesFrom ?BasicUnit .
?Units uomvocab:derivesFrom ?BasicUnit .
ucum:GB uomvocab:modifierPrefix ?prefix1 .
?Units uomvocab:modifierPrefix ?prefix2 .
?prefix1 uomvocab:factor ?Factor1 .
?prefix2 uomvocab:factor ?Factor2 .
FILTER(xsd:double(?Factor2)*?Value = xsd:double(?Factor1)*4)
}
Поскольку ожидания запроса установлен в 0, я не уверен, что вызывает исключение прерывания запроса; скорее всего, проблемы памяти? Очень простые запросы (например, возврат всех экземпляров определенного класса) работают нормально.
Есть подсказки? Любая помощь будет оценена по достоинству. Я могу предоставить более подробную информацию, если это необходимо.
Бест, Ник
Похоже, что запрос слишком сложен. Вы можете поделиться запросом? Вы пытались изменить порядок некоторых частей запроса? Иногда это может помочь оптимизатору плана запросов выбрать более эффективный план выполнения. Кроме того, могут быть некоторые параметры конфигурации GraphDB, но я не эксперт в этом трехместном магазине. – AKSW
'SELECT DISTINCT? Предложение? Значение WHERE { ? Предложение rdf: type paasport: Предложение. \t? Предлагая DUL: удовлетворяет? GroundDescription. \t? Ground pasasport: предлагает? Характеристика. \t? Характеристика rdf: Тип paasport: Хранение. \t? Характеристики DUL: естьParameter? Par. \t? Par rdf: type paasport: StorageCapacity. \t? Par DUL: hasParameterDataValue? Значение. \t? Par DUL: параметризирует? QualityValue. \t?qualityValue uomvocab: measuredIn? Units .' –
'? Units rdf: type? AppParMeasureUnitType. \t ucum: GB rdf: type? AppParMeasureUnitType. \t? Единицы измерения rdf: Тип uomvocab: SimpleDerivedUnit. \t ucum: GB rdf: type uomvocab: SimpleDerivedUnit. \t ucum: GB uomvocab: происходит из? BasicUnit. \t? Единицы uomvocab: происходит из? BasicUnit. \t ucum: GB uomvocab: modifierPrefix? Prefix1. \t? Единицы uomvocab: modifierPrefix? Prefix2. \t? Prefix1 uomvocab: factor? Factor1. \t? Prefix2 uomvocab: factor? Factor2. \t FILTER (xsd: double (? Factor2) *? Value = xsd: double (? Factor1) * 4) } ' –