Лучший способ индексировать данные таблицы базы данных в Solr? - PullRequest
5 голосов
/ 06 февраля 2012

В данный момент у меня есть таблица с примерно 100 000 строк.Я хочу проиндексировать данные в этой таблице в индексе Solr.

Таким образом, наивный метод будет:

  • Получить все строки
  • Для каждой строки: преобразовать в SolrDocument и добавить каждый документ в запрос
  • После того, как все строки будут преобразованы, отправьте запрос

Некоторые проблемы с этим подходом, о которых я могу думать:

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

Однако, некоторые преимущества:

  • Только один запрос к базе данных
  • Только один запрос POST к Solr

Подход не масштабируемый, я вижу, что с ростом таблицы память будет растиТребования и размер запроса POST.Возможно, мне нужно взять n количество строк, обработать их, затем взять следующие n?

Интересно, есть ли у кого-нибудь какие-либо советы о том, как лучше всего реализовать это?

(ps. Я выполнил поиск по сайту, но не нашел вопросов, похожих на этот.)

Спасибо.

Ответы [ 3 ]

2 голосов
/ 06 февраля 2012

Если вы хотите балансировать между отправкой всех документов одновременно и выполнением одного POST для каждого документа, вы можете использовать очередь для сбора документов и запустить отдельный поток, который отправляет документы, как только вы соберете достаточно. Таким образом, вы можете управлять проблемой памяти и времени запроса.

1 голос
/ 28 февраля 2012

Я использовал предложение от nikhil500:

DIH поддерживает много трансформаторов. Вы также можете написать собственные трансформеры. Я рекомендую использовать DIH, если это возможно - я думаю, что это потребует наименьшего количества кода и будет быстрее, чем размещение документов - nikhil500 6 февраля в 17: 42

0 голосов
/ 06 февраля 2012

Однажды мне пришлось загрузить ~ 3000 строк (каждое из 5 полей) из БД в Solr.Я запускал загрузку каждого документа отдельно и делал один коммит.Вся операция заняла всего несколько секунд, но некоторые загрузки (8 из 3000) завершились неудачно.

То, что отлично работало, это загрузка партиями по 50 перед фиксацией.50, возможно, был очень низким.Есть рекомендуемые ограничения на количество документов, которые вы можете загрузить перед выполнением фиксацииЭто зависит от размера документов.


Но тогда это разовая операция, которую можно контролировать с помощью взломанного скрипта.Будет ли последующая операция заставить вас индексировать 100 000 строк одновременно?Или вы можете избежать индексации только нескольких сотен обновленных документов на одну операцию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...