2

私がこれを尋ねる理由は、ソーシャル ネットワーキング サイトに ORM を使用しないことがまったく意味があるかどうかを知る必要があるからです。

なぜ ORM がソーシャル ネットワーキング サイトに適合しないのかという私の主張は次のとおりです。

  • ソーシャル ネットワーキング サイトは製品ではないため、複数のデータベースをサポートする必要はありません。どのデータベースを使用するかはわかっていて、ほとんどの場合、それを時々変更することはありません。
  • ソーシャル ネットワーキング サイトでは、ユーザー間に多対多の関係が必要です。最終的には、これらの関係を取得するためにプレーンな SQL を記述する必要がある場合があります。したがって、ORM の値は再び減少します。
  • 前のポイントに関連して、ORM はバックエンドで複数のクエリを実行してレコードをフェッチすることがありますが、これは非効率的であり、データベースでボトルネックを引き起こす可能性があります。最後に、プレーンな SQL クエリを書き留める必要があります。いずれにせよ単純な SQL を作成することがわかっている場合、ORM を使用する意味は何ですか?

これは、私の限られた経験に基づく私の限られた理解です。ソーシャル ネットワーキング サイトの構築に関してどのような経験がありますか? 私のポイントは有効ですか?ORM の使用を気にせずに生の SQL を使用するのは不自由ですか? ORM がソーシャル ネットワーキング サイトの構築に役立つポイントは何ですか?

4

6 に答える 6

17

ORM を使用することの価値は、クエリ結果をオブジェクト フィールドに割り当てるという面倒な作業を自動化し、オブジェクト フィールドへの変更を追跡してデータベースに保存できるようにすることで、開発のスピードアップに役立つことです。そのため、オブジェクト リレーショナル マッピングという用語が使われています。

ORM は、デプロイ先の 1 つのデータベースしか使用しないため、データベースの移植性に関してほとんど価値がありません。

ORM のランタイム パフォーマンスの側面は、単純な SQL を自分で書くよりも優れているわけではなく、通常ははるかに劣っています。あなたが言及したように、クエリ生成の一般的な方法はしばしば単純な間違いを犯し、冗長なクエリをもたらします。繰り返しになりますが、利点は実行時の効率ではなく、開発時間にあります。

ORM を使用する場合と使用しない場合では、スケーラビリティに大きな違いはないようです。スケーラビリティのためのより価値のある他の手法には、次のものがあります。

  • RDBMS でのインデックスの管理。O(n) から O(log 2 n)にできるだけ多くのアルゴリズムを改善します。
  • インテリジェント キャッシング アーキテクチャ。
  • データベースのパーティショニング/シャーディングによる水平スケーリング。
  • データベースの負荷分散と複製。可能な場合はスレーブ データベースから読み取り、単一のマスター データベースに書き込みます。スレーブとマスターに異なるインデックスを付けます。
  • Sphinx Search などの補完的なテクノロジで RDBMS を補完します。
  • ハードウェアを問題に投入することによる垂直方向のスケーリング。Jeff Atwood は StackOverflow ポッドキャストでこれについてコメントしています。

一部の人々は、クラウド コンピューティングまたは分散非リレーショナル データベースを使用して、データ管理を分散アーキテクチャに移行することを提唱しています。これは、非常に多くのユーザーを獲得するまで、おそらく必要ありません。ある程度の大きさになると、すべてのルールが変わり、RDBMS を使用できなくなる可能性があります。しかし、あなたが Yahoo、Facebook、LinkedIn のデータ アーキテクトでない限り、心配する必要はありません。クラウド コンピューティングは誇張されすぎています。

データベースは常に Web アプリのボトルネックであるという共通認識がありますが、フロントエンドの効率を改善することが少なくとも同じくらい重要である場合もあります。参照。スティーブ・サウダーズの本。


Julia Lerman in Programming Entity Framework (2009), p.503 は、DataReader を直接使用する場合と Microsoft の LINQ to Entities を使用する場合で、クエリの実行コストが 220% 増加することを示しています。

また、Jeff Atwood のAll Abstractions are Failed Abstractionsに関する投稿も参照してください。LINQ を使用すると、単純な方法であってもプレーン SQL を使用する場合の少なくとも 2 倍のコストがかかることが示されています。

于 2010-01-26T03:52:34.253 に答える
3

あなたの指摘に対する私の回答は次のとおりです。

  • ORM は効果を発揮するために複数のデータベースを必要としません。実際、ORM の使用のほとんどのケースは、異なるデータベースに適応する能力によるものではありません。
  • 最新の ORM フレームワークのほとんどは、マップされたクラスの「軽量」バリアントをフェッチするのに十分な柔軟性を備えています。それは、実装方法に大きく依存します。
  • 本当に必要な場合は、ORM フレームワーク内でネイティブ SQL クエリを作成できます。キャッシングとパフォーマンス関連のアルゴリズムは、多くの場合、これらのフレームワークの一部であることに注意してください。
于 2010-01-26T03:18:43.180 に答える
1

IMO、ORM は、よりクリーンで明確なコードを作成するのに役立ちます。使い方が下手だと余計なクエリが発生することがありますが、決してルールではありません。私があなただったら、ORM とフレームワークのベスト プラクティスを使い始め、ORM が提供しない機能が必要な場合にのみ SQL に移行します。

于 2010-01-26T03:19:17.777 に答える
0

また、Web アプリケーションでは、多くの人が SQL データベースから離れていることに注意してください。ORM は、非リレーショナル データベースへの移行に役立つ場合があります (アプリケーション コードに SQL がないためです)。Google の App Engine での JDO と JPA の使用を見てください。

于 2010-01-26T03:24:49.470 に答える
0

私見では。ORMが必要です。

  1. 複数のデータベースであるかどうかに関係なく、OOP の方法でデータベースにアクセスできます。

    1. よりクリーンなコード。テーブル クラス ファイル内の特定のテーブルに関連するすべてのメソッドを定義できます。生の SQL 結合クエリが必要な場合は、問題なく、そこで定義できます。DRYとKISSに続きます。同様の生のSQLクエリを何度も書くよりもはるかに優れています。
于 2010-01-26T03:26:08.437 に答える
-1

あなたのサイトが十分に大きく、スケーリングが問題になる可能性は非常に小さいのに、ORM ではなく未加工の SQL ですべてを実行することで、時期尚早に最適化する必要はありません。データベースとアプリケーションの設計が適切であると仮定すると、データベースに優れたハードウェアを投入することで、かなりのことを成し遂げることができます。フレンド グラフの作成などには未加工の SQL を記述する必要があるかもしれませんが、誰かがメールを変更したり、プライベート メッセージを送信したり、写真をアップロードしたりしたときにデータベースを更新するなどのささいなことについてはどうでしょうか。ORM を使用すると、実行する必要があるすべての単純なデータベース タスクを簡素化しながら、絶対に必要な場所にコードを渡すことができます。

于 2010-01-26T04:02:31.210 に答える