2011-09-19 3 views
1

, 나는 SPARQL 데이터베이스가 예나의 SDB이며, 데이터베이스 서버가 DB2 인 사용. 하지만 SPARQL의 쿼리 성능이 매우 낮다는 것을 알게되었습니다.SDB의 SPARQL 쿼리 성능을 향상시키는 방법은 무엇입니까? 내 응용 프로그램에서

내가이 문제를 해결하는 데 도움이 될 수 있습니다 는? 어떻게 sparql 쿼리 성능을 향상시키기 위해 특별한 SDB의 쿼리 성능입니까? 쿼리 42 초 동안 쿼리 결과 트리플 카운트 (420) 있습니다

총 RDF 트리플 카운트 13294. 있습니다

테스트 케이스 : 아래

내 테스트 케이스 데이터와 SPARQL입니다 .

SPARQL은입니다 :

SDB 같은 SQL 백업 triplestore가에 SPARQL을 컴파일하기 때문에 SDB와 같은 어떤 Triplestore의 쿼리 성능이 항상 기본 triplestore보다 더 될 것입니다
SELECT DISTINCT ?s ?name ?ownerId ?status ?time 
    ?value ?startTime ?endTime ?description 
WHERE 
{ 
    ?s <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> "http://www.w3c.com/schemas/cp#Event" . 
    ?s <http://www.w3c.com/schemas/cp#time> ?time . 
    ?s <http://www.w3c.com/schemas/cp#ownerId> ?ownerId . 
    ?s <http://www.w3c.com/schemas/cp#name> ?name . 
    ?s <http://www.w3c.com/schemas/cp#value> ?value . 
    ?s <http://www.w3c.com/schemas/cp#_status> ?status . 
    ?s <http://www.w3c.com/schemas/cp#start_Time> ?startTime . 
    ?s <http://www.w3c.com/schemas/cp#end_Time> ?endTime . 
    ?s <http://www.w3c.com/schemas/cp#description> ?description . 
    FILTER(xsd:dateTime(?time) >= "2011-08-12T00:00:00"^^xsd:dateTime 
    && xsd:dateTime(?time) <= "2011-09-18T23:59:59"^^xsd:dateTime) 
} 

답변

3

SQL은 종종 끔찍하게 복잡한 SQL 쿼리를 생성합니다.

예를 들어 9 개의 트리플 패턴이 일치해야작업을 포함하는 SQL SELECT가 생성되므로 많은 시간이 걸릴 것입니다.

그런 다음 세 가지 패턴에 FILTER을 적용하고 있습니다. 필터식이 매우 단순하거나 SQL로 변환하기에 충분하지 않은 한 FILTER은 Java 코드에서 평가되어야합니다. 기억. 이것이 실제로 의미하는 것은 당신이 triplestore 우리의 모든 가능한 이벤트를 선택하고 항상 쿼리가 느리게 만들려고 자바를 사용하여 메모리 날짜 범위에 대한 필터링을하는 것입니다.

당신이 정말 예나의 기본 트리플 가게 TDB보고 좋을 것 SDB를 사용하려면 특별한 이유가없는 한. SPARQL에 필요한 조인하는 것이 훨씬 더 효율적으로 쿼리의 유형을 할 수 있도록 설계하고 데이터를 저장하는 방법은 훨씬 더 빠른 날짜 범위처럼 더 복잡한 필터를 수행 할 수있다.

+0

[email protected] 메일 링리스트 – RobV

+0

에 대한 도움을 요청할 가치가 항상 있음을 잊어 버린 점을 잊어 버렸습니다. 확실히 올바른 것입니다. 필터링하기 전에 반환되는 데이터의 적절한 비율을 얻고있을 것입니다. 시간대가 정규화되면 간단한 문자열 비교 ('str (? time)> = "2011-08-12T00 : 00 : 00"')를 시도 할 수 있습니다. – user205512

+0

use205512 좋은 아이디어 @하지만 그게 SDB가 나는 그것이 – RobV

관련 문제