Запросы больших наборов данных RDF из памяти

Я хочу загрузить два или более набора данных на свой компьютер и иметь возможность запустить конечную точку SPARQL для каждого. Я попробовал Fuseki, который является частью проекта Jena. Тем не менее, он загружает весь набор данных в память, что не очень желательно, если я собираюсь запрашивать большие наборы данных, такие как DBpedia, учитывая, что я собираюсь делать другие вещи (запуск нескольких конечных точек SPARQL и использование над ними системы федеративных запросов).

Просто чтобы дать вам понять, я собираюсь связать несколько наборов данных с помощью SILK, запрашивая их с помощью федеративной системы запросов FEDX. Если вы порекомендуете какие-либо изменения в системах, которые я использую, или можете дать мне совет, это было бы здорово. Также будет полезно, если вы предложите набор данных, который может вписаться в этот проект.

2 ответа

Решение

Fuseki Йены может использовать TDB в качестве механизма хранения, а TDB хранит вещи на диске. В документации TDB по кешированию в 32- и 64-битных системах Java обсуждается способ отображения содержимого файла в память. Я не верю, что TDB/Fuseki загружает весь набор данных в память; это просто невозможно для больших наборов данных, но TDB может обрабатывать довольно большие наборы данных. Я думаю, что вы должны рассмотреть возможность использования tdbloader создать магазин TDB; тогда вы можете указать Fuseki на это.

В этом ответе есть пример настройки магазина TDB. Там, запрос выполняется с tdbquery, но в соответствии с разделом " Запуск сервера Fuseki " в документации, все, что вам нужно сделать, чтобы запустить Fuseki с тем же хранилищем TDB, - это использовать --loc=DIR опция:

  • --loc=DIR
    Использовать существующую базу данных TDB. Создайте пустой, если он не существует.

Как сказал Джошуа, Fuseki Йены использует TDB, поэтому он может хранить очень большие онтологии, не используя много ресурсов. Например, вы можете загрузить в него таксономию Yago2 и использовать только около 600 МБ оперативной памяти. Вам не нужно загружать Fuseki в ваш Java-проект, вы можете просто запустить его из командной строки и запросить его внутри вашего проекта.

Загрузите его в командной строке Windows следующим образом:

java -jar c:\your_ontology_directory\fuseki-server.jar \
  --file=your_ontology.rdf /your_namespace

Затем вы можете выполнить SPARQL-запрос к нему с помощью любого приложения GET/POST (даже в вашем браузере):

http://localhost:3030/your_namespace/sparql?query=SELECT * { ?s ?p ?o }

Результаты по умолчанию возвращаются в формате XML.

<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
  <head>
    <variable name="s"/>
    <variable name="p"/>
    <variable name="o"/>
  </head>
  <results>
    <result>
      <binding name="s">
        <uri>http://yago-knowledge/resource/wordnet_gulag_103467887</uri>
      </binding>
      <binding name="p">
        <uri>http://www.w3.org/2000/01/rdf-schema#subClassOf</uri>
      </binding>
      <binding name="o">
        <uri>http://yago-knowledge/resource/wordnet_prison_camp_104005912</uri>
      </binding>
    </result>
    …
Другие вопросы по тегам