Как загрузить большой дамп nt / rdf в модель Jena / PostgreSQL (TDB / RDB?) - PullRequest
2 голосов
/ 20 мая 2011

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

Поэтому я хочу загрузить большие файлы NT, доступные в http://wiki.dbpedia.org/Downloads36 в локальной базе данных (у меня есть сервер с PostgreSQL).

В моем приложении (построенном на Java и Groovy) я открываю соединение с постоянным графом Jena с помощью:

def jenaConnection = new DBConnection( ... )
def maker = ModelFactory.createModelRDBMaker( jenaConnection )
def globalModel = maker.openModel( "my_big_fat_model" )

Это нормально для нескольких тысяч троек, но когда я пытаюсь загрузить большой NT-файл с помощью ридера

RDFReader r = m.getReader( "N-TRIPLE")
r.read( inputStreamFromBigFile ... ) 

Производительность ужасна.Он загружает примерно 2-3K триплетов в минуту, что означает, что весь набор данных DBpedia (миллионы триплетов) может занять несколько дней.Другие люди, использующие JENA с большими наборами данных, похоже, не имеют этой проблемы.

Я читал, что должен использовать TDB для больших наборов данных (http://jena.apache.org/documentation/tdb/), но я не понимаю, что я долженделать с этим.

Это похоже на интерфейс RDB или как? Нужно ли загружать NT в DB PostgreSQL?

Документация JENA, кажется, не оченьясно по этому вопросу.

1 Ответ

2 голосов
/ 20 мая 2011

Если вы хотите использовать PostgresQL в качестве серверной части, вы должны использовать SDB .Это более современная обертка для реляционных хранилищ для моделей Jena, чем старый драйвер db.Существует также документация по быстрому запуску для начала работы с SDB.

TDB - это постоянное хранилище, которое предоставляет альтернативу использованию реляционной базы данных в качестве внутреннего трехуровневого хранилища.TDB создает свои собственные индексы b-дерева на диске и управляет кэшированием для вас.Во всем остальном это кажется программисту как обычная Йена Model.В TDB есть инструменты командной строки, которые помогают в процессе загрузки, хотя, поскольку они являются скриптами bash, они требуют Linux или cygwin.Чтобы загрузить dbpedia, это то, что я делал в прошлом:

$> tdbloader2 --loc ./tdb ./source/*.nt

, где ./source - это каталог, куда я загружал различные файлы .nt из dpbedia.На разумной машине это займет несколько часов, но определенно не дни.

После того, как у вас есть образ TDB в ./tdb, просто следуйте документации , чтобы загрузить Model в вашПрограмма на Java:

String directory = "./tdb" ;
Model model = TDBFactory.createModel(directory) ;
...
model.close() ;

Оттуда, просто используйте model, как вы обычно используете любую модель Jena.Есть одно предупреждение: TDB не обеспечивает поддержку параллелизма.Если вашему приложению требуется одновременный доступ к хранилищу (в частности, любые записи одновременно с одной или несколькими операциями чтения), вам потребуется обработать блокировку на уровне приложения.

...