Назад | Перейти на главную страницу

индексирование базы данных размером ~ 3 ГБ в elasticsearch: как?

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

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

  1. Создайте новый индекс и настройте пару сопоставлений, которые я хочу
  2. Устанавливать refresh_interval к -1.
  3. Разбить все документы на пакеты по 300-500 документов каждый
  4. Отправить их bulk index api batch after batch (разумеется, ожидая возврата результатов перед отправкой следующего пакета). Я также пробовал делать это одновременно, по 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

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

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