2017-01-24 1 views
0

rdflib_sqlalchemy.SQLAlchemy을 사용하여 PostgreSQL 테이블에 큰 RDF 데이터 세트 (Geonames 데이터 세트 : 18GB)를로드했습니다.Python RDFLib에서 SPARQL 쿼리의 속도를 높이려면 어떻게해야합니까?

다음은 RDFLib 지원이 포함 된 Python 스크립트에서 간단한 쿼리를 실행 한 것입니다. 나에게 결과를주기 위해 2 시간 이상 걸렸다. RDF 데이터를 triplestore (예 : Virtuoso)에 삽입하지 않고도 더 빠르게 만들 수있는 방법이 있습니까?

mystore = store.SQLAlchemy(configuration="postgresql://localhost:5873/postgres") 
g = Graph(mystore, identifier="test") 
results = g.query("""SELECT ?s ?p ?o WHERE {?s ?p ?o .} LIMIT 1""") 
for row in results: 
    print row 

내가 클러스터의 컴퓨팅 노드에서 일하고 있습니다. 다음과 같은 메모리 내 데이터로 내 쿼리를 실행하려고했습니다. 그러나 여전히 느립니다.

g = Graph() 
g.parse('geonames.nt', format='nt') 
results = g.query("""SELECT ?s ?p ?o WHERE {?s ?p ?o .} LIMIT 1""") 
for row in results: 
    print row 

귀하의 의견을 알려주십시오. 도와 줘서 고마워.

+0

이 크기의 데이터는 RDF 저장소에로드하는 것이 좋습니다. –

+0

rdflib 버전은 무엇입니까? 또한 https://github.com/RDFLib/rdflib-sqlalchemy/issues에서 버그 보고서를 열어보십시오. –

답변

0

쿼리가 LIMIT 1.

일반적으로 그 크기의 데이터 세트는 몇 가지 적절한 트리플 스토어를 통해 관리됩니다 매우 간단하고 가지고 있기 때문에, 가능성이 느린 것을 모든 데이터의 로딩은, 코드 프로필 데이터를 지속적으로 저장하고 색인을 생성 할 수 있으므로 쿼리 속도가 빨라집니다.

또한 Virtuoso와 같은 시스템은 병렬 로딩을 지원합니다. 초기 데이터 파일을 어떻게 든 나누는 것 (그들이 무엇을 나타내는가에 달려있다)과 둘 이상의 서브 세트를 여러 트리플 스토어에 저장하는 것은 또 다른 접근법 일 수 있습니다 (메모리 내로드를 유지하기로 결정한 경우에도 수행 할 수 있음).

동일한 트리플 스토어에있는 여러 그래프가 도움이 될 수도 있습니다.

관련 문제