Rails: N+1クエリを「バッチング」で解決するBatchLoader gem(翻訳)

こんにちは、hachi8833です。N+1問題の検出といえばbullet gemですが、BatchLoaderはより積極的かつ一般性の高い方法でN+1を解決するgemです。 概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Batching – A powerful way to solve N+1 queries every Rubyist should know 公開日: 2017/08/17 著者: exAspArk ブログサイト: Universe Engineering: Universeは2011年にカナダのトロントで創業され、ジャンルを超えたイベントや行事を検索できるプラットフォームを開発しています。 訳注: バッチング(batching)という語はここでは主に「(小分けにされたものを)1つにする」操作を指しています。 Unityなど3Dゲーム制作方面では、バッチングは「個別の物体のレンダリングを1つにまとめる」ことを指すようです。 Rails: N+1クエリを「バッチング」で解決するBatchLoader gem(翻訳) 本記事では、バッチングと呼ばれる技法でN+1クエリを回避する方法、HaskelのHaxlやJavaScriptのDataLoaderでのバッチング、およびRubyプログラムでできるアプローチについて解説します。 N+1クエリとは何か 最初に、N+1クエリとその呼び名の由来について説明します。usersとpostsという2つのSQLテーブルがあるとすると、ActiveRecordモデルを使って次のように書くことができます。 posts = Post.where(id: [1, 2, 3]) # SELECT * FROM posts WHERE id IN (1, 2, 3) users = posts.map … Continue reading Rails: N+1クエリを「バッチング」で解決するBatchLoader gem(翻訳)