2017-01-24 6 views
0

Я загрузил большой набор данных RDF (Geonames dataset: 18GB) в таблицы PostgreSQL, используя rdflib_sqlalchemy.SQLAlchemy.Как ускорить запрос SPARQL из Python RDFLib?

Я выполнил следующий простой запрос из сценария Python с поддержкой RDFLib. Мне потребовалось больше двух часов, чтобы дать мне результат. Есть ли способ сделать это быстрее, не вводя данные RDF в трипестор (например, 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

Профиль код, очень вероятно, что это медленно является загрузка всех этих данных, так как запрос очень прост и имеет предел 1.

Обычно наборы данных такого размера управляются с помощью некоторого собственного тройным магазина , где данные могут сохраняться и часто индексироваться, что ускоряет запросы.

Кроме того, системы, такие как Virtuoso поддерживают параллельную загрузку. Разделение файла исходных данных каким-то образом (в зависимости от того, что они представляют), а затем сохранение двух или более подмножеств в несколько тройных магазинов может быть другим подходом (что можно было бы сделать, даже если вы решили сохранить загрузку в памяти).

Несколько графов в одном и том же магазине могут помочь.

Смежные вопросы