1

Windows Azure でホストされ、テーブル データ ストレージ (TDS) を使用する ac# Web アプリケーションを開発しています。

(オプションとして) 他の NoSql バックエンドを持つ従来の IIS サーバーにアプリケーションを展開できるように、アプリケーションを設計したいと考えています。基本的に、サービス モデルとしてのソフトウェアで私に支払うか、顧客が独自の (Azure 以外の) 運用サーバーにインストールできる私のアプリケーションのライセンスを購入するかのオプションを顧客に提供したいと考えています。

両方の目標を達成するために、データ層と中間層を最適に設計するにはどうすればよいでしょうか?

おそらく、Windows Azure ワーカー ロールと Azure キューが必要になるでしょう。これらを複製するのはどれほど複雑ですか? カスタム Windows サービスやその他のキューイング テクノロジで代用できますか?

Azure にデプロイしないときに Azure TDS やその他のストレージにデプロイできるように、データ モデル内のエンティティを作成するにはどうすればよいですか? MongoDB などはこれに役立ちますか?

確かに、Azure と結婚せずに Azure 向けに設計する方法はあります。

4

2 に答える 2

2

おそらく、Windows Azure ワーカー ロールと Azure キューが必要になるでしょう。これらを複製するのはどれほど複雑ですか? カスタム Windows サービスやその他のキューイング テクノロジで代用できますか?

はい - 他のキューイング テクノロジを備えた Windows サービスは、これにかなり適しています。ワーカー ロールには、Windows サービス内で簡単に使用できるメイン/実行ループがあります。

Azure にデプロイしないときに Azure TDS やその他のストレージにデプロイできるように、データ モデル内のエンティティをどのように記述することができますか? MongoDB などはこれに役立ちますか?

NoSql は、多くの異なるテクノロジをカプセル化した一般的な用語です。Azure TDS は現在、NoSql の Key-Value ストア ファミリーに属していると思いますが、MongoDB は、TDS よりもはるかに豊富な機能を提供するドキュメント データベースに近いものです - http://en.wikipedia.org/wiki/NoSQL_(concept ) を参照してください。Azure TDSを模倣するために、Redisのようなものの変種が機能する可能性があると思います(ただし、Redis自体には現在のTDSよりも幅広い機能があると思います)

一般に、データの形状によって異なりますが、Azure TDS に収まる場合は、選択した他のストレージにも収まると思います。

確かに、Azure と結婚せずに Azure 向けに設計する方法はあります。

はい-質問で提案したように、アプリを設計して、代わりに他のテクノロジーで動作できるようにすることができます。実際、これは従来の SQL データ抽象化手法と非常によく似た課題です。ただし、TDS が特定の方向に向かわせ、他のストアにはうまく適合しない場合がいくつかあると思います。キーに関する非常に具体的なルールがあります。非常に特殊なメカニズムを使用して高性能を提供します。非常に特殊な状況では限定的なトランザクションの完全性しか提供しません。これらの要因は、Azure と非 Azure の両方のバリエーションでアプリを最大限に活用するために、一部の中間層レイヤーと一部のデータ レイヤーを実際に変更する必要があることを意味する場合があります。

もう 1 つの考え - Azure 上のマルチテナント SaaS バージョンと Azure でホストされるシングルテナント バージョンをクライアントに提供する方が簡単かもしれませんが、これはクライアントによって異なります!

于 2011-04-24T13:03:22.707 に答える
0

私は実行可能な解決策を見つけました。Azure Table Storageが必要とするのと同じPartitionKeyとRowKeyの複合キー構造を使用してエンティティを設計すると、SQLServerまたはSQLCEでEFコードファーストを使用できることがわかりました。

Lokad Cloud(http://code.google.com/p/lokad-cloud /)の助けを借りて、Azure Table Storageとの対話を実行することで、EFのDbContextに対してクラッド操作を提供する共通のDataContextを作成することができました。またはLokadのTableStorageProvider。

エンティティ間の関係を管理し、それらを適切に遅延ロードするための優れた方法も見つけました。

解決策は少し複雑で、さらにテストが必要です。私はそれについてブログを書き、準備ができたらここにリンクを投稿します。

于 2011-04-26T18:41:31.957 に答える