Избегайте запросов к БД с помощью Chewy
Я использую библиотеку Elasticsearch для Rails, Chewy. Я пытаюсь найти способ эффективного массового импорта ~2 миллионов записей. Это документы Elasticsearch, которые являются денормализованной версией нескольких разных моделей БД, которые у меня есть.
Я делю работу на партии размером 1000 и выгружаю их в рабочую очередь с помощью Sidekiq. Проблема в том, когда импорт! делается вызов, есть множество дополнительных запросов к БД, чтобы разрешить поля, и я не знаю, как от них избавиться.
Наивный подход, который я сделал, был ModelIndex::Type.import [<list of ids>]
, Это, очевидно, ищет каждый документ из БД, а затем сериализует / десериализует его. Что, очевидно, неэффективно, поэтому вместо этого я попытался сделать это
ModelIndex::Type.import Type.includes(:secondary_field, :other_field).all
попытаться использовать готовую загрузку в мою пользу и сделать один запрос БД вместо 1000 с объединением. Увы, он все еще просматривал каждый объект в БД, как и раньше.
Может быть, я что-то упускаю, но я хотел бы избежать как можно большего количества запросов к БД при индексации, чтобы сократить время, любая помощь будет высоко ценится!