スケーラビリティにとって最適なデータ アクセス パラダイムは何ですか?

StackOverflow https://stackoverflow.com/questions/67831

質問

Microsoft からはデータ アクセス用に非常に多くのさまざまなオプションが提供されています。スケーラブルなアプリにはどれが最適ですか?

リンク

Linq を使用する必要がありますか?確かに簡単そうに見えますが、SQL がどのようなものかを知っていれば非常に役に立ちます。また、ASP.NET では Linq を使用して非同期クエリを実行できないとも聞きます。したがって、本当に拡張性があるのだろうか?Linq を使用している本当に大きなサイトはありますか (スタックオーバーフローを除く)。

エンティティフレームワーク

Entity Framework についての騒々しい話はあまり聞かれません。私がよく知っているオブジェクトモデルに近いようです。

アストリア/動的データ

データをサービスとして公開すべきでしょうか?

私はかなり混乱していますが、それは NHibernate などの他の ORM 製品に取り組む前に説明してください。どちらが良いかについてのアイデアや知恵はありますか?

役に立ちましたか?

解決

NHibernate または Entity Framework のいずれかを推奨します。大規模なサイトの場合は、ADO.NET Data Services を使用します。私は LINQ to SQL で大規模なことは何もしません。スタック オーバーフローでは、最終的には 3 層ではなく 2 層になるという興味深いスケールの問題が発生する可能性があり、データベースの物理的側面が変更され、その変更がコード全体に波及するため、リファクタリングにも問題が生じる可能性があります。ちょっとした考え。

他のヒント

ADO.Net Data Services (旧 Astoria) が果たすべき役割は大きいと思います。これは、Web の REST スタイル アーキテクチャによく適合します。

Web はスケーラブルなので、そのアーキテクチャに従うものはすべてスケーラブルだと思います。また、SQL Server Data Services にも注目してください。

リレーショナル データベースについて話しているのであれば、他のレイヤーからアクセスする方法に関係なく、すべてのデータ操作をストアド プロシージャにカプセル化することに私は一票を投じます。

ストアド プロシージャによる場合を除き、データベースへのすべての読み取り/書き込みアクセスを無効にすると、明確に定義されたコントラクトの背後にデータ モデルを隠すことができます。データ モデルは自由に変更できますが、ストアド プロシージャは引き続きその入力と出力を尊重します。

これにより、DBA はアプリケーションを完全に自由に調整して拡張できるようになります。SQL がデータベース外部のツールによって生成されている場合、これは非常に困難なタスクです。

ストアド プロシージャに固定するという考え方は、少なくとも私の現在の観察では、最近では薄れてきているようです。この考え方は ORM の世界に適しています。ORM は通常、テーブルに対して直接攻撃する方がより感情的になるからです。ただし、十分な価値のある ORM であれば、proc の使用も許可されます。場合によっては、選択の余地がない場合もあります。

EF については多くの意見があり、誰が何と言おうと、良くも悪くも、これは V1 製品であり、MS が正しく動作するまでに約 3 回転かかるという経験則を考慮すると、次のバージョンを待つのが賢明かもしれません。少しでも。

この分野で最大のプレーヤーは NHibernate のようで、コミュニティではこれに対するサポートが豊富にあります。言語機能である Linq が NHibernate スタックに導入されるのもそう遠くないはずです。

自分に合ったものを使ってください。これらはすべて、かなり正規化されたデータベース (つまり、主キーと外部キーが適切に定義されている) をすでに持っている場合にセットアップするのが最も簡単です。ただし、簡単に正規化できないデータがある場合、Entity Framework は LINQ to SQL よりも柔軟性がありますが、構成にはより多くの作業が必要になります。

私たちはクラスター環境で LINQ を実験してきましたが、個々のマシン上でもクラスター全体でもうまく拡張できているようです。あなたが提供した 3 つのオプションのうち、LINQ がより良い選択であると言えますが、各オプションには対象ユーザーが若干異なるため、アクセス パラダイムを決定する前に、データで何を行うかを定義する必要があります。

リンクをお勧めします。私たちのサイトではうまく拡張でき、使い方も簡単です。

LINQ でストアド プロシージャを使用します...ただし、sproc がデータ アクセス層にならないようにしてください。

この投稿は、クラウドが本格的に普及する前の 2008 年に投稿されたものです。回答を更新する必要があるようです。いくつかのリンクと概要だけを紹介します。このトピックに関しては、このサイトにさらに最新の投稿があると思います。見つけたら、ここにリンクを追加します。

データのスケーラビリティとトランザクション処理のスケーラビリティに関して言えば、2017 年にはクラウドとクラウド サービス プロバイダーについて話す必要があります。

最近のクラウド プロバイダーのトップ 3 は次のとおりだと思います。

料金

クラウド サービスを使用することの優れた点の 1 つは、初期費用や解約手数料がかからず、使用した分だけお支払いいただけることです。(アルバ氏の2016年の記事を引用)AWS、Google Cloud、Azure の比較")

私たち自身も AWS を使用しています。VM がインストールされ実行されている間のみ料金が発生するため、安価に開始できます。通常、サービスプロバイダーは分単位または時間単位で料金を請求しますが、その時間中ずっと利用できることが保証されています。

より安価な方法は、ベストエフォート型のスポット料金設定です。スポット価格は、単一のスポット リクエストが履行されることを保証するために入札する必要がある価格を表します。入札価格がスポット価格を上回ると、Amazon EC2 はスポット インスタンスを起動し、スポット価格が入札価格を上回ると、Amazon EC2 はスポット インスタンスを終了します。(恥ずかしながらAmazonのユーザーガイドを引用) ここ)

AWS、Google Cloud、Azure の比較 利用可能なこれら 3 つのサービス プロバイダーを並べて比較する良い記事です ここ.

クラウド サービスに関するより学術的な考察については、Yu、Wang、Ren、Lou による 2010 年の論文をお読みください。クラウド コンピューティングにおける安全でスケーラブルかつきめ細かいデータ アクセス制御の実現" INFOCOM 2010 Proceedings で入手可能 ここ, ただし、アクセスするには IEEE メンバーになる必要がある場合があります。やや時代遅れではありますが、優れており、出発点として使用できます。

クラウドでのスケーリングは爆発的に増加しており、最近までそのスケーリングは新しい仮想マシンを起動することで行われ、これには数秒かかりましたが、コンテナーを使用すると、新しいインスタンスを数ミリ秒で起動できます。詳細については、「Docker と Docker コンテナ」を参照してください。 ここ.

この回答が詳細情報へのリンクの単なる束であることをお詫びしますが、この質問に対する回答は更新されるべきだと思いました。これをきっかけに誰かがもっと直接の詳細を提供してくれることを願っています。すでに関連情報を投稿している場合は、自分の投稿へのリンクを提供することを検討してください。ありがとう!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top