Windows Azureを使用して、モバイルソーシャルネットワーク用のサーバーバックエンドを構築しています。
私はこれらの3つのエンティティを持っています:
- ユーザー-SQLAzureに保存
- スレッド(互いにメッセージを送信できる2人のユーザー間の一種の関係)-SQLAzureに格納されます
- メッセージ-Azureテーブルに保存
スレッドIDでパーティション化されたAzureテーブルにメッセージを格納するので、チャット(スレッドとの間でメッセージを送受信する)で優れたパフォーマンスが期待されます。
ただし、最新のスレッドのリストをユーザーに提供できるようにする必要もあります(recent =最新のメッセージが含まれています)。つまり、表示時に最後のメッセージ日付でスレッドを並べ替える必要があります。
多くの異なるテーブルパーティションをスキャンしてメッセージを探すことは明らかにパフォーマンスを低下させるため、最新のスレッドを効率的にフェッチできるようにするには、データを他のテーブルパーティションに非正規化する必要があります。
あなたの経験に基づいて、最良の戦略は何ですか?