Загрузка данных Stardog и Йена
Я использую Stardog, чтобы хранить кучу троек, которые приходят из разных источников. Я использую Jena для сбора и объединения данных в один график Jena. Все эти тройки являются частью ABoxes.
Я не уверен, что Stardog потребует, чтобы TBox также был объединен с графиками ABox. Я предположил, что это так, потому что иначе я не могу понять, как Stardog будет рассуждать о данных. Я не видел никакой возможности хранить и использовать TBox отдельно, как в некоторых других тройных магазинах. Нужно ли включать TBox в граф Jena или есть способ сохранить TBox в другой базе данных Stardog, чтобы при запросе базы данных ABox это тоже учитывалось?
Я рассматриваю варианты загрузки графика Jena (варьируется от 1 до 7 миллионов троек) в Stardog:
- Один из вариантов, который мне не очень нравится, - записать график в файл и запустить клиент для загрузки его в Stardog. Если данные представлены в графике Йены, я бы предпочел прямое решение.
- Другой вариант - загружать тройки одну за другой ( пример запроса вставки stardog sparql в java), что мне не нравится из-за потенциальной неэффективности.
Есть ли какой-нибудь элегантный способ загрузить весь график из Йены?
РЕДАКТИРОВАТЬ
Попытка кода на основе примера в дистрибутиве:
Server aServer = Stardog.buildServer()
.bind(new InetSocketAddress("10.0.0.1", 5820))
.start();
AdminConnection aAdminConnection = AdminConnectionConfiguration.toServer("...").credentials("admin", "admin").connect();
if (aAdminConnection.list().contains("test")) {
aAdminConnection.drop("test");
}
Connection aConn = aAdminConnection.memory("test").create(file).connect();
Model aModel = SDJenaFactory.createModel(aConn);
РЕДАКТИРОВАТЬ 2: Исправлено несколько бит моего кода.
Дополнительная информация в документации Stardog
1 ответ
1) Неважно, где вы храните ваш TBox, пока он находится в Stardog. По умолчанию Stardog будет смотреть на график по умолчанию для вашего TBox и автоматически извлекать его. Но это можно настроить с помощью reasoning.schema.graphs
Вариант конфигурации, как указано в документации. Как правило, вы можете найти главу о том, как рассуждения реализованы в Stardog, полезным чтением.
2) Не загружайте тройки одну за другой, это не очень эффективно. Самый быстрый способ получить данные в Stardog - это загрузить их при создании базы данных; в этом случае можно использовать массовый загрузчик, который достигает оптимальной скорости записи. После создания базы данных вы можете использовать SNARL API, CLI или Jena API для загрузки файла, что является следующим самым быстрым способом получения данных в базу данных. Если вы используете Jena API, вы должны использовать их BulkUpdateHandler
напрямую или загрузить RDF/XML
, чей читатель, кажется, использует массовое обновление за кулисами.
РЕДАКТИРОВАТЬ:
Ваш код неверен. Вы связываете сервер с реальным сокетом и портом, а затем пытаетесь подключиться к встроенному серверу, который вы не используете. Вы должны либо изменить свой сервер, чтобы начать использовать встроенный сервер, как показано в примерах, либо изменить инициализацию вашего сервера. AdminConnectionConfiguration
указать URL сервера используя toServer
,
Далее, вместо использования удобного метода createMemory
ты можешь позвонить AdminConnection#memory
который вернет DatabaseBuilder
чья create
Метод принимает список файлов для массовой загрузки в новую базу данных.
Вам также следует рассмотреть возможность использования дисковой базы данных для хранения миллионов троек.