Избегайте запросов к БД с помощью 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 с объединением. Увы, он все еще просматривал каждый объект в БД, как и раньше.

Может быть, я что-то упускаю, но я хотел бы избежать как можно большего количества запросов к БД при индексации, чтобы сократить время, любая помощь будет высоко ценится!

0 ответов

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