2017-01-24 10 views
0

rdflib_sqlalchemy.SQLAlchemyを使用して、大きなRDFデータセット(Geonamesデータセット:18GB)をPostgreSQLのテーブルにロードしました。Python RDFLibからSPARQLクエリを高速化するにはどうすればよいですか?

私は、RDFLibをサポートするPythonスクリプトから以下の簡単なクエリを実行しました。私に結果を与えるのに2時間以上かかりました。 トリプルストア(例:Virtuoso)にRDFデータを注入することなく高速化する方法はありますか?

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のようなシステムはパラレルローディングをサポートしています。最初のデータファイルを何らかの形で分割し、複数のトリプルストアに2つ以上のサブセットを格納する別のアプローチがあります(これは、メモリ内のロードを維持することを決める場合でも可能です)。

同じトリプルストアの複数のグラフも役立ちます。

関連する問題