SOLR - как частично проиндексировать базу данных? - PullRequest
0 голосов
/ 28 октября 2009

У меня есть база данных postgresql. В таблице, которую мне нужно проиндексировать, у меня около 20 миллионов строк. Когда я хочу проиндексировать их все в одной попытке (что-то вроде «select * from table_name»), у меня появляется ошибка Java OutOfMemory, даже если я дам JVM больше памяти.

Есть ли в SOLR возможность индексировать часть таблицы по частям (например, выполнить sql для первых 1000000 строк, затем проиндексировать, а затем выполнить sql для второго миллиона)?

Теперь я использую SQL-запрос с LIMIT. Но каждый раз, когда solr индексирует его, мне нужно вручную запускать его снова.

ОБНОВЛЕНИЕ: Хорошо, сейчас 1.4. Нет исключений OutOfMemory, кажется, Apache проделал очень большую работу над DIH. Кроме того, теперь мы можем передавать параметры через запрос и использовать их в наших SQL-выборках. Ничего себе!

Ответы [ 3 ]

1 голос
/ 29 октября 2009

Посмотрите немного о "курсорах" здесь, это может помочь.

http://jdbc.postgresql.org/documentation/83/query.html

0 голосов
/ 29 октября 2009

Вы смотрели на использование SolrJ в качестве клиента? Несмотря на то, что DIH великолепен, тесная связь между Solr и вашей базой данных означает, что вам может быть сложно манипулировать вашими данными и обходить проблемы.

С клиентом SolrJ вы могли бы затем выполнять итерации в пакетах, которые вы управляете своей базой данных, а затем обрабатывать и выгружать их непосредственно в Solr. Кроме того, использование нового двоичного формата потока Java SolrJ вместо XML означает, что индексация ваших 20 миллионов строк должна выполняться довольно быстро.

DIH - это здорово, пока вы не столкнетесь с такими проблемами!

0 голосов
/ 28 октября 2009

У вас есть autoCommit, batchSize настроен? Если вы это сделаете, это может быть эта ошибка , попробуйте обновить до trunk.

...