Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!01.12.2022
Cтворення великого контексту БД для тестів за допомогою пакетної вставки
🏭🚚🗄️ Сьогодні маленька порада для рубістів, а саме — як швидко створити багато записів в базі, особливо для тестів.
Якщо з локальною базою це може заощадити вам секунди, то з тестами на AWS Redshift - буквально хвилини. З Redshift доцільна така інтуїція: команда INSERT
працюватиме однаково швидко для одного рядку та для багатьох — або краще сказати, однаково повільно. Хоча й на звичайній базі можна прискорити якісь аналітичні тести з купою записів.
Всі мають знати метод insert_all, який виконує ту саму команду INSERT
для декількох рядків. Також варто знати, що, окрім того, він перевірятиме рядки на дублікати, а якщо цього робити не потрібно, то є метод “з наголошенням” insert_all!
.
Багато хто також знає метод FactoryBot.create_list. Але він нічого особливого не робить, просто створює декілька записів в циклі.
Тож як подружити insert_all
та FactoryBot
? Якось так: Product.insert_all(FactoryBot.build_list(:product, 100).map(&:attributes))
. Тобто, готуємо записи без зберігання, потім беремо від них атрибути й вставляємо однією командою.
Такий метод не створюватиме асоціацій, тому їх доведеться створювати окремою командою.