Индексирование базы данных ~3 ГБ в эластичный поиск: как?

У меня есть новая база данных, содержащая 2 миллиона записей (около 3 ГБ при выводе JSON) каждые несколько дней. Я хочу быстро поместить это в ElasticSearch.

Вот что я делаю прямо сейчас:

  1. Создайте новый индекс и настройте пару отображений, которые я хочу
  2. Задавать refresh_interval в -1,
  3. Разделите все документы на партии по 300-500 документов каждая
  4. Отправь их bulk index api за партией (конечно, ожидая результатов, прежде чем отправить следующую партию). Я также попытался сделать это одновременно, 3-5 партий одновременно.

После обработки ~10% документов массовый API ElasticSearch начинает время от времени (время ожидания запроса составляет 30 секунд). Я добавил повторы, но ближе к 30-40% некоторые партии начинают терпеть неудачу примерно 10 раз подряд.

Я пытался манипулировать различными номерами. С меньшими партиями это просто слишком медленно. С большими партиями / параллелизмом это просто терпит неудачу быстрее.

Запросы отправляются с той же машины, где находится ElasticSearch. У меня много памяти:

$ free -g
             total       used       free     shared    buffers     cached
Mem:            31         24          6          0          0          8
-/+ buffers/cache:         15         15
Swap:           15          6          9

В то время больше ничего не происходит на сервере.

Итак, что я могу делать не так? Я пытался найти один верный способ индексировать много документов, но не смог найти ни одного.

0 ответов

Другие вопросы по тегам