[解決済み】ORMを使うか、プレーンなSQLを使うか?[クローズド]
質問
私が開発した(その後忘れてしまった)いくつかのアプリケーションでは、主にMySQLでプレーンなSQLを書いていました。 PythonでORMを使ったこともあります。 SQLAlchemy でも、長くは続かなかったんです。 通常、ドキュメントや複雑さ(私の視点)が私をためらわせるのです。
移植性のためにORMを使い、1種類のデータベースを使うだけならプレーンなSQLを使う、というように考えています。データベースのサポートが必要なアプリを開発するときに、ORMとSQLのどちらを使うべきかのアドバイスを本当に求めています。
考えてみると、データベースの不整合を処理するための軽量なラッパーを使用する方が、ORMを使用するよりもはるかに優れていますね。
どのように解決するのか?
ORMにはいい機能があります。データベースのカラムをオブジェクトのフィールドにコピーするような面倒な作業の多くをこなすことができるのです。通常、言語の日付や時刻の型を適切なデータベース型に変換してくれます。一対多の関係も、ネストしたオブジェクトをインスタンス化することで、かなりエレガントに処理することができます。ORMの長所と短所を考慮してデータベースを設計すれば、データベースへのデータの出し入れの手間を大幅に省くことができることがわかりました。(ポリモーフィズムや多対多のリレーションシップをマッピングする必要がある場合は、その処理方法を知っておくとよいでしょう。この2つの領域が、ORMを「コンピュータサイエンスのベトナム」と呼ばせる「インピーダンスミスマッチ」のほとんどを提供するのです)。
トランザクションを行うアプリケーション、つまりリクエストを行い、いくつかのオブジェクトを取得し、それらをトラバースしてデータを取得し、Webページでレンダリングする場合、パフォーマンスへの影響は小さく、多くの場合ORMは以前見たオブジェクトをキャッシュするのでより速くなります、そうしなければ何度もデータベースにクエリを発行することになります。
レポート作成が多いアプリケーションや、リクエストごとに大量のデータベース行を扱うアプリケーションでは、ORM の負担はより重くなり、キャッシュは大きな、無駄なメモリを消費する負担に変わります。その場合、シンプルなSQLマッピング(LinQやiBatis)や、薄いDALでハンドコーディングされたSQLクエリが望ましいでしょう。
大規模なアプリケーションでは、両方のアプローチを使うことになると思います。(単純なCRUDにはORM、レポーティングにはSQL/thin DAL)。
関連
-
[解決済み] SQLです。最初の出現箇所のみを返す
-
[解決済み] アクセスクエリーエラー(from句のシンタックスエラー)
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] ORM(Object-Relational Mapping)における「N+1 selects問題」とは?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み] SELECT DISTINCTを指定した場合、ORDER BY項目は必ず選択リストに表示されます。
-
[解決済み] "このSqlTransactionは完了しました。もう使用できません。"...設定エラー?
-
[解決済み] Oracle(LiveSQL)のSQL [重複]について
-
[解決済み] FROM のサブクエリにはエイリアスが必要です。
-
[解決済み] Presto の JSON_EXTRACT で ' ' 文字を含むキーに問題がある。
-
[解決済み] nvarchar 値 ... をデータ型 int に変換する際に、変換に失敗しました。
-
[解決済み] PLS-00428: この SELECT 文では INTO 句が必要です。
-
[解決済み] Entity Framework VS LINQ to SQL VS ADO.NETでストアドプロシージャを使う?[クローズド]
-
[解決済み】dynamic(C#4)とvarはどう違うの?