2013-09-09 4 views
3

Я работаю с набором данных RDF, сгенерированным как часть нашего сбора данных, который состоит из около 1,6 М небольших файлов общим объемом 6.5 Гб (ntriples) и около 20 М троек. Моя проблема связана с временем, которое требуется для загрузки этих данных в трехместный магазин Sesame под управлением Tomcat.Как ускорить загрузку большого количества небольших файлов RDF в Sesame?

В настоящее время я загружаю его из скрипта Python через HTTP api (на том же компьютере), используя простые POST-запросы по одному файлу за раз, и для заполнения нагрузки требуется около пяти дней. Глядя на опубликованные тесты, это кажется очень медленным, и мне интересно, какой метод я могу использовать для быстрой загрузки данных.

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

Если бы я должен был написать код Java для подключения к репозиторию HTTP, делает ли библиотека Sesame специальную магию, которая бы ускорила загрузку данных?

Может ли сгруппировать файлы в более крупные куски? Это приведет к сокращению накладных расходов HTTP для отправки файлов. Какой размер куска будет хорош? This blog post предлагает 100 000 строк на кусок (он сокращает больший файл, но идея будет такой же).

Спасибо,

Стив

ответ

2

Если вы способны работать в Java вместо Python я рекомендовал бы использовать транзакционной поддержку Repository API Сезам в свою пользу - начать транзакцию, добавить несколько файлов, то совершить; rinse & повторите, пока вы не отправите все файлы.

Если это не вариант, то в самом деле передача данных в более крупные файлы (или более крупные органы запроса POST - вы, разумеется, не обязательно должны физически изменять ваши файлы). Хороший размер куска, вероятно, составит около 500 000 троек в вашем случае - это немного догадка, если честно, но я думаю, что это даст вам хорошие результаты.

Вы также можете сократить накладные расходы, используя сжатие gzip в теле запроса POST (если вы этого не сделаете уже).

+1

Я модифицировал свой скрипт Python для пакетной обработки запросов и увидел значительное увеличение пропускной способности. На небольшом тестовом наборе, который загружал 83s для отдельных файлов, я получил время 1,5 с размером партии 500 файлов. Теперь я запускаю большие загрузки с размером партии 1000 файлов с временем загрузки минут, а не примерно за день. –