滅せよJPA系

滅せよJPA系

RailsのActiveRecordなんですが・・・。
「has_one」とか「has_many」とか出てきた時点で嫌な予感がしてたんです。
うん、これってJavaで言う所のJPA系と似たヤツですかね。
そっかぁ。

テーブル構造を先に定義しておいて、例えば親テーブル読み込んだ後で子テーブルを取得したいコードを書くじゃないですか。
そうするとフレームワークが勝手にSQL発行するヤツです。超苦手。

何が苦手かって知らないうちにSQLを大量に発行してくれてパフォーマンスに多大な影響が出たりチューニングに苦労するみたいな。
頼むからSQLベタ書きさせてくれと懇願したくなるのがJPA。JPAをちゃんと理解してないという話もあるかも知れないけど、正直あんまり思い出したくない。
これがあってO/RマッパはJavaならDBFlute、.NET系ならDapper一択になりました。
JPAで苦労した後DBFluteが神に見えた思い出。今でも神です。作ってくれた人ありがとうマジで。

それはいいとしてActiveRecordはJPA系なんですよねぇ。怖っ。
小規模・小データなら一見便利なところが曲者。複雑なリレーションを持ったDBでJOINとサブクエリ使いまくりに大量データとかになると洒落になりません。結合試験とか統合試験とかプロジェクト後半で問題がドカっと出てくるのが恐怖。
N+1問題とか、うわぁ二度と聞きたくなかった。
ヤードポンド法並みに死滅しろと日々願ってます。

これほんとに現場で有効に活用できてるのかなぁ、いやほんとに。
でもちょこっと検索してみるとJPAはともかくActiveRecordは肯定的に書かれてる記事も結構ある。JPAや他のO/Rマッパと比較した上でActiveRecordを評価してる人も・・・もうちょっと使い込んでみないとわかんないかな。

でもJPAのプロジェクトでパフォーマンスチューニングだけぶん投げられた時の辛い記憶がフラッシュバックする。
数千から数万回SQLが発行されてて、実行計画とかインデックスとかそんなチャチなもんじゃどうしようもねぇ、もっと恐ろしいものの片鱗を味わったぜ。(みんなログ見ようよ)

コメント

このブログの人気の投稿

AmazonSAMでnode20.xを使う

ボタンとタイマー

モーターを動作させてみる