注目★★★★★Lobsters
ORMを越え、RubyのDB処理をSQLとStore APIへ
30秒で把握
- 1著者がActiveRecordの行オブジェクト中心設計をSQL直接操作へ批判
- 2ExtraliteでRETURNINGを使い削除と取得を1クエリに統合
- 3PostsStoreが有限数のSQLを専用APIとしてカプセル化
要約
著者はActiveRecordなどのORMがリレーショナルデータに適した抽象化ではなく、SQLを直接扱う設計へ移行すべきだと論じた。ORMはwindow functionsやCTE、RETURNINGに対応しにくく、行を個別オブジェクトへ変換することでメモリ・CPUのコストも生む。代案として、Extraliteを使い、有限数のSQLクエリをPostsStoreのような専用APIにまとめ、RubyのHashで結果を返す構成を提案した。RETURNINGにより削除と取得を1クエリで実行でき、N+1クエリや不要なエンティティ抽象化を避けられる。モデル層をDSLではなくデータ操作のインターフェースとして設計することが、実装の明示性と性能管理につながると主張した。
あなたへの影響
Ruby/RailsでActiveRecordを使うチームは、複雑なクエリや大量データ処理を対象にSQL直書きとStore APIの適用を小さく検証するとよい。
推奨:ORM依存を減らす設計は、クエリの明示化とN+1の抑制につながり得るため、SQLと実行計画を確認できる開発体制が必要になる。