2012-04-08 8 views
0

Windows Azureを使用してモバイルソーシャルネットワークのサーバーバックエンドを構築しています。Azureテーブルでの非正規化チャットメッセージ

私はこれらの3つの事業体があります。

  1. ユーザー - SQLでストアド - SQL Azureの
  2. スレッド(その後、お互いにメッセージを送信することができます2ユーザー間の関係の一種)に格納しますAzureの
  3. メッセージ - Azureのテーブル

私はスレッドIDで仕切らAzureのテーブル内のメッセージを保存したように保存されているが私は良いパフォーマンスを期待しますチャット(スレッド間のメッセージの送受信)。

しかし、最新のスレッドの一覧をユーザーに提供できるようにする必要があります(最近のメッセージには最新のメッセージが含まれています)。言い換えれば、最後のメッセージ日付までにスレッドを表示する必要があります。

多くの異なるテーブルパーティションをスキャンしてメッセージを探すことは、明らかにパフォーマンスを低下させることになります。そのため、最新のスレッドを効率的にフェッチできるように、データを他のテーブルパーティションに非正規化する必要があります。

あなたの経験に基づいた戦略は何ですか?

答えて

0

編集:このデモアプリケーションを見て

スタート、さらに思考の後、ここではより良い提案が(と思う)です:

は一つのメッセージATSテーブルを持っています。このテーブルには、送信されるメッセージと受信されたメッセージという2種類のメッセージが格納されます。 ユーザーがメッセージを送信するたびに、テーブルに「送信済み」として格納し、「受信済み」(またはそれらのタイプと呼ぶもの)として格納します。

メッセージテーブル内のすべてのメッセージに従って、パーティション:

(ユーザーID) - のPartitionKey、(long.Max - Timestamp.Ticks) - のrowKey

あなたがスレッドIDを格納することができ、余分な性質として、差別化の送信/受信

メッセージが問題なしに2回挿入されることを保証したい場合は、キューとワーカーロールを使用してください。

このスキームは、ユーザーがすべてを分割します。時間範囲内でそのユーザーとの間ですべてのメッセージを表示し、常に降順に表示することができます。

+0

こんにちは、Igorekと答えに感謝!私が解決策で見る問題は、ユーザーがスレッドにメッセージを投稿するたびにスレッドテーブルの会話タイムスタンプを更新するためにSQL Azureを照会する必要があることです。 Azureテーブルを使用することの利点をどれだけ相殺するか - スケーラビリティ... –

+0

合意。私は私の主な応答 – Igorek

+0

Igorek、答えを更新していただきありがとうございます編集しています。それに基づいて、私は非常によく似た何かを実装しました。うまくいきました。しかし、私はFlorinDumitrescu(http://social.msdn.microsoft.com/Forums/en-US/windowsazuredata/thread/6a745a22-540a-44d5-b426-d42dd8510da5)とのディスカッションを見つけ、以前の "テーブル「もっとスケーラブルな」世界観。だから私はそれをgoogleに行き、最終的にそれについて新しい議論を始めるつもりです... –

0

バッチ処理ソリューションを選択することは、常に回避策であり、メインフレームのような古いコンピューティングを思い出させます。オンライン/リアルタイムシステムに代わるものは何もありません。

バッチソリューションを選択すると、システムが起動時に廃止され、今後の技術革新を防ぐことができます。

Azureデータベースが照会するには大きすぎるようになった場合、フェデレーションを使用することをお勧めします。基本的には、データを複数のデータベースに分割し、コード内で互換性のあるアクセスロジックを利用することを意味します。 SQL Azure Federations Tutorial -- Entity Framework

+0

こんにちは、ありがとうございます!私があなたの答えを正しく理解していれば、基本的にAzure Tablesは廃止され、代わりにFederationsを使用することをお勧めしますか? –

+1

@MartinŠťáva、Azureテーブルは時代遅れではありませんが、スループットの観点からあまりスケーラビリティがありません。スケーラビリティの制限は[5000回/秒]です(http://blogs.msdn.com/b/windowsazurestorage/archive/2010/05/10/windows-azure-storage-abstractions-and-their-scalability-targets.aspx )、Sql Azure連盟は[もっと高い](http://www.ducons.com/blog/benchmarking-throughput-and-scalability-on-sql-azure-federations)に行くことができます。 Azure Sqlの柔軟性と高いスケーラビリティが必要な場合は、フェデレーションを選択します。大量のデータに低価格が必要な場合は、テーブルストレージを選択します。 –

+0

@FlorinDumitrescu、あなたの答えをありがとう、私は非常に重要だと思う。私はあなたがここから始めたというディスカッションを見つけました:http://social.msdn.microsoft.com/Forums/en-US/windowsazuredata/thread/6a745a22-540a-44d5-b426-d42dd8510da5。私は管理しなければならないという事実は、紺碧のテーブルのストレージはスケーラビリティが低いと思われ、スケーラビリティはSQL Azureよりも大きな利点であると考えられています。このため、Azureテーブルでメッセージングをベースにするのは自然なことでした。あなたはこのトピックについてもっと詳しく説明してもらえますか?Microsoftからこの回答を得ましたか?ありがとう! –

関連する問題