3

リレーショナルデータベース(SQL Server 2008)を使用するプロジェクトに取り組んでいます。ローカル(オンプレミス)アプリケーションは、データベースの読み取りと書き込みの両方を行います。同じデータを読み取り専用で使用する、Azureの別のフロントエンド(MVC2 Webロール)に取り組んでいます。従来のWebアプリを展開する場合は、SQL Expressを使用してローカルデータベースとして機能し、アプリケーションの更新(データの変更が非常に遅い)または同期システムを介して変更を展開します。

Azureの場合、画像は少し曇っています(申し訳ありませんが、私はそうしなければなりませんでした)。SQL ExpressがWebロール内で機能するかどうか、および機能する場合はその方法を示す情報が見つからないようです。AzureWebロールでSQLExpressを使用できるかどうか誰かが知っていますか?

強制された場合に実行できるその他のオプション:SQLCEまたはSQLAzureの使用。どちらにも多くの欠点があり、完全ではありません。

ありがとう、エリック

編集 私のシナリオは十分に明確ではなかったかもしれないと思います。

このデータは展開間で変更されず、Webロール内からのみアクセスされます。基本的には静的キャッシュです。オンプレミスの部分は、Webロールのデータに影響を与えないため(ソースであることを除けば)、一種の赤いニシンです。基本的に、私がやりたいのは、既存のT-SQL/DALコードを使用するローカルデータストア/キャッシュを用意することです。

SQL Azureを使用することはできますが、何も追加されません。また、追加のオーバーヘッドと障害点が追加されるだけです。VMの役割を使用することもできますが、それはコストがかかりすぎて複雑です。

完璧な世界では、MDFをcspkgにパッケージ化して(アプリとともにデプロイされるように)、ロール内からローカルで使用します。これを行う方法がない場合、それは問題ありません。他のソリューションの長所と短所を理解する必要があります。私たちは完璧な世界に住んでいません。:)

4

5 に答える 5

2

カスタムVHDを使用してSQLExpressを実行できる場合もありますが、そのVHDに存在するすべてのデータに依存することはできません。VMは、再起動すると完全にリセットされます。再起動後も物理的な永続性はありません。

必要に応じて、SQLServerのインストール全体をAzureBLOBストレージに配置できる場合があります。

ただし、これらすべてを実行する場合、そのデータベースを使用できるワーカー/Webロールは1つだけになります。注意:SQL Serverデータベースは、一度に1つのSQLServerにのみ接続できます。スケールアウトする場合は、Web/ワーカーの役割ごとに新しいSQLServerインスタンスを作成する必要があります。

コストの問題を除けば、SQL Expressにあるもので、99.9%のアプリケーションのショーストッパーになるはずのものは考えられません。

于 2011-03-13T23:43:32.800 に答える
2

ジェレマイアの答えに加えて、SQL Azureは、SQL Expressが現在行っているほぼすべての機能を提供し、同期サービスを使用して、オンプレミスのSQLServerをSQLAzureと同期できます。

SQL ExpressをVMの役割にインストールした場合、そのインスタンスのためだけに月額約90ドルを消費し、さらにBLOBストレージを消費します(耐久性のためにクラウドドライブが必要です)。定義上、VMロール(または任意のロール)はスケールアウトをサポートする必要があります。何らかの理由で2つのインスタンスにスケーリングする場合、両方のインスタンスにデータベースの独自のコピーが必要になるため、インスタンスごとにBLOBスナップショットを作成する必要があります。

ただし、SQL ExpressをVMにインストールすることを選択した場合は、たとえば、ブロブストレージのインスタンスあたり20 GBのインスタンスが2つあると、月額200ドル近くになり、VMを維持していることに注意してください。 OSパッチ、SQL Expressの構成と更新、障害回復手順など。対照的に、20GBのSQLAzureは、同じ200ドルの費用で、OSまたはデータベースサーバーの管理タスクを完全に削除しながら、パフォーマンスを向上させ、同期サービスと連携します。あなたから。

于 2011-03-14T00:52:26.347 に答える
1

既存の回答に追加し、SQL Expressをクラウドで実行するのが良いかどうか疑問に思っている人のために:一時的なストレージ領域としては理にかなっています。このアーキテクチャのアプローチを検討してください。たとえば、ジョブを実行するためにノードをスピンアップしているとします。膨大な数の計算結果をノードごとにローカルSQLExpress内に格納し、ノードでジョブが終了するとすぐに集約された応答を提供することをお勧めします。将来のレポートなどのために、ホットではなくなった結果をオフプレムSQLサーバーに転送することは後で行うことができます。SQL Azureは、ボリューム/レイテンシ/コストの観点から、膨大な数の結果を格納するのに最適ではない可能性があり、特にリレーショナルデータ、パフォーマンス、または既存のコードが関係する場合、ATSは必ずしも適切とは限りません。

于 2011-03-14T03:28:56.287 に答える
1

Davidが述べたことを拡張するには、SQLServerからSQLAzureへの同期を可能にするSQLAzure Data Sync CTP2に登録できます:http://www.microsoft.com/en-us/SQLAzure/datasync.aspx

CTP1はSQLServerをサポートしていなかったため、必ずCTP2を使用してください。

于 2011-03-14T20:13:37.957 に答える
0

読み取り専用のローカルキャッシュの場合-SQLCE4またはSQLite。

どちらにもEntityFrameworkプロバイダーがあります。

あなたがそれに書いているなら-SQLAzure

于 2011-03-21T12:33:23.900 に答える