2013-12-18 5 views
2

У меня есть контекст Camel, настроенный для выполнения некоторых манипуляций с входными данными, чтобы построить тройки RDF.Индексирование около 300 000 троек в кунжуте с помощью Camel

Существует окончательный маршрут с процессором, который с использованием Sesame Client API разговаривает с отдельным экземпляром Sesame (работает на Tomcat с 3 ГБ ОЗУ) и отправляет команды добавления (каждая команда содержит около 5 - 10 операторов).

Процессор работает как одноэлементный, а соответствующая «от» конечная точка имеет 10 параллельных вычислений (я пытался с 1, затем 5, затем 10 - безжизненное подобное поведение).

Я использую HttpRepository из своего процессора для отправки команд добавления, и во время работы я наблюдаю (быструю и) прогрессивную деградацию производительности при индексировании. В целом процесс начинает индексировать тройки очень быстро, но после небольшого количества зафиксированные заявления растут очень медленно.

На стороне кунжута я использовал как MemoryStore, так и NativeStore, но поведение (производительность) кажется не таким же.

Вопросы:

  • , какой вид магазина рода в случае рекомендован я хотел бы ускорить этап индексации?
  • Является ли Repository.getConnection выполнением каких-либо пулов соединений? Другими словами, можно ли открывать и закрывать соединение каждый раз, когда процессор «add» выполняет свою работу?
  • Сказав, что мне нужно сначала создать магазин, все эти тройки, предпочтительнее ли создать «местный» магазин парусных судов вместо того, чтобы управлять им с удаленного сервера Sesame (поэтому я не буду использовать HTTPRepository)?

ответ

2

Я предполагаю, что вы используете транзакции из 4 или 5 операторов по уважительной причине, но если у вас есть способ совершать большие транзакции, это значительно ускорит скорость. Идеальным (и самым быстрым) было бы просто отправить все 300 000 троек в магазин за одну транзакцию.

Ваши вопросы, в порядке:

  • Если вы храните только 300000 заявления выбор магазина не так важно, как и родной, и память может легко справиться с такой шкалой на хорошей скорости. Я ожидал бы, что память будет немного более высокой, особенно если вы настроили ее использовать ненулевую задержку синхронизации для сохранения, но у нее есть более низкий объем памяти и, конечно же, более надежный.

  • HTTPRepository.getConnection не объединяет фактическое репозиториальное соединение, но внутренне пул ресурсов (так что фактические HttpConnections, которые Sesame использует внутри, объединены). поэтому getConnection является относительно дешевым, и открытие и закрытие нескольких подключений - это хорошо - хотя вы можете подумать о повторном использовании одного и того же соединения для нескольких добавлений, чтобы вы могли выполнять несколько добавлений в одной транзакции.

  • Следует ли хранить локально или на удаленном сервере, действительно зависит от вас. Очевидно, что местный магазин будет быстрее, поскольку вы устраните сетевую задержку, а также стоимость сериализации (de), но недостатком является то, что локальное хранилище не легко доступно вне вашего собственного приложения.

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

  • Нет связанных вопросов^_^