Индексирование базы данных ~3 ГБ в эластичный поиск: как?
У меня есть новая база данных, содержащая 2 миллиона записей (около 3 ГБ при выводе JSON) каждые несколько дней. Я хочу быстро поместить это в ElasticSearch.
Вот что я делаю прямо сейчас:
- Создайте новый индекс и настройте пару отображений, которые я хочу
- Задавать
refresh_interval
в-1
, - Разделите все документы на партии по 300-500 документов каждая
- Отправь их
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
В то время больше ничего не происходит на сервере.
Итак, что я могу делать не так? Я пытался найти один верный способ индексировать много документов, но не смог найти ни одного.