2017-01-24 2 views
0

Ich habe einen großen RDF-Datensatz (Geonames-Datensatz: 18 GB) in PostgreSQL-Tabellen mit rdflib_sqlalchemy.SQLAlchemy geladen.Wie kann ich die SPARQL-Abfrage von Python RDFLib beschleunigen?

Ich habe folgende einfache Abfrage aus Python-Skript mit RDFLib-Unterstützung ausgeführt. Es hat mehr als zwei Stunden gedauert, um mir das Ergebnis zu geben. Gibt es eine Möglichkeit, es schneller zu machen, ohne RDF-Daten in einen Triple-Store (z. B. Virtuoso) zu injizieren?

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 

Ich arbeite auf einem Rechenknoten des Clusters. Ich habe versucht, meine Abfrage mit In-Memory-Daten wie folgt auszuführen. Trotzdem ist es langsam.

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 

Bitte lassen Sie mich Ihre Meinung wissen. Danke für Ihre Hilfe.

+0

Daten dieser Größe sind in einem RDF-Speicher besser geladen. –

+0

welche rdflib-version ist das? Bitte beachten Sie auch das Öffnen eines Bugreports unter https://github.com/RDFLib/rdflib-sqlalchemy/issues –

Antwort

0

Code Profil, sehr wahrscheinlich, was es langsam ist, ist das Laden von all diesen Daten, da die Abfrage sehr einfach ist und LIMIT 1.

Normalerweise Datensätze dieser Größe über einige richtigen triple Speicher verwaltet werden , wo Daten persistiert und oft auch indexiert werden können, was Abfragen beschleunigt.

Darüber hinaus unterstützen Systeme wie Virtuoso paralleles Laden. Die ursprüngliche Datendatei irgendwie aufzuteilen (hängt davon ab, was sie darstellen) und dann zwei oder mehr Teilmengen in mehreren Dreifachspeichern zu speichern, könnte ein anderer Ansatz sein (der auch dann ausgeführt werden könnte, wenn Sie beschließen, das Laden im Speicher aufrecht zu erhalten).

Mehrere Grafiken im selben Triple Store könnten ebenfalls helfen.

Verwandte Themen