特定のデータについてWebサービス(ASP.NET Web API)にクエリを実行し、結果を視覚化することになっているWebアプリケーションを開発しています。クエリされたデータは、クライアントアプリケーションの実行中に変更される可能性があります。これは、対応するデータベースコレクションにアイテムが追加されたり、コレクションから削除されたりするためです。クライアント自体または他のクライアントのいずれかが(Webサービスを介して)コレクションを変更できます。データベースサーバーであるRavenDBには、クライアント(Webサービス)に変更を通知する機能があります。
私が疑問に思っているのは、Webサービスでデータが変更されたときに、クライアントをどのように最新の状態に保つ必要があるかということです。具体的には、Webサービスのデータベースに変更が加えられ、クライアントのデータの表示が古くなった場合、クライアントは新しいクエリ結果を受け取る必要があります。たとえばSignalRを介してクライアントへの永続的な接続を維持し、データベースに変更が加えられるたびにクライアントに通知して、各クライアントがデータを再クエリできるようにすることをお勧めしますか?これらの変更通知は、頻繁になりすぎた場合に備えて調整する必要がありますか?
シナリオ例
データベースには次の項目が含まれています(JSON表記)。
[{"Id": "2", "User": "usera"}, {"Id": "1", "User": "usera"},
{"Id": "3", "User": "userb"}, {"Id": "4", "User": "usera"}]
クライアントAは、User == "usera"で、最大2つのアイテムにページ分割され、IDでソートされたアイテムを要求します。サービスは次のセットを返します。
[{"Id": "1", "User": "usera"}, {"Id": "2", "User": "usera"}]
次に、クライアントBは、次の項目を削除するようにサービスに指示します。{"Id": "2", "User": "usera"}
これにより、データベースは次のようになります。
[{"Id": "1", "User": "usera"}, {"Id": "3", "User": "userb"},
{"Id": "4", "User": "usera"}]
ここで問題となるのは、WebサービスがクライアントAに、新しいデータを再クエリする必要があることをどのように通知するかということです。つまり、クライアントAは、ビューを更新して次の情報を含める必要があります。
[{"Id": "1", "User": "usera"}, {"Id": "4", "User": "usera"}]