MS SQL Server 上で動作する C# WinForms アプリケーションを開発しました。今日まで、シングルトン パターンで実装された安価なキャッシング メカニズムを備えた非常に単純な自作の OR-Mapper (リフレクションを使用) を使用しています。ユーザーがトリガーした「リセット」機能があります。アーキテクチャは単純な 2 層 (クライアント、サーバー) の 3 層 (クライアント上のプレゼンテーションとロジック、サーバー上のデータ層としての MS SQL) です。
通常、約 300 行と約 30 列をロードします。これらは頻繁に変更されます (およびほとんど変更されない他のテーブルもいくつかあります)。このアプリケーションのさまざまなインスタンスがさまざまなクライアント コンピューターで実行されており、同じ 300 行が読み込まれ、ランダムな行のデータが変更されています。アプリケーションは、データベース上のデータを即座に更新します。そうする前に、整合性がチェックされるので、何か問題があればユーザーはフィードバックを得ることができます。ただし、ユーザーが画面に古い値を表示する行の一部については、最新のデータを確実に取得したい場合に、手動でキャッシュをリセットする必要があります。
アプリケーションが変更された行自体を考慮するとよいでしょう。数秒ごとに更新があります。ただし、これらの更新の一部のみが他のアプリケーションに関連しています (アクティブなフィルターに応じて...)
私が考えている解決策:
- 共通キャッシュで OR-Mapper を使用する (例: クラスター化されたキャッシュでの NHibernate)
- 未解決の質問: これらの L2 キャッシュはクライアント アプリ用に作成されていますか? キャッシュの変更が発生したときに UI の更新をトリガーできますか? その他の OR-Mapper ベースのソリューション?
- アプリケーション サーバーを使用して別の層を実装し、ロジックをこのアプリケーション サーバーに移動します。データをキャッシュし、他のクライアントに更新されたデータを通知するロジック オブジェクトのイベントを送信するインスタンスを 1 つだけ実行します。クライアントにデータをキャッシュしないでください。
- 未解決の質問: App Server にロードしますか? アプリサーバーへのオーバーヘッド通信? ロジック DLL をアプリケーション サーバーに移動する作業量..? レポートのデータ ソース (直接/アプリ サーバー)?
- このユーザーが検討するようなもの: https://stackoverflow.com/questions/7593884/what-technology-to-use-for-data-persistence-cache-and-synchronization-in-n-tier
- ロジックレベルである種のデータ変更通知を追加します (ブロードキャストベースの通知...)
- 未解決の質問: 既存のライブラリ? SQL Server にロードしますか?
- 完全に別の解決策?
ここで解決策が得られないことは承知しています。これらの解決策 (または新しい解決策) について考えてみる必要があります...ご意見ありがとうございます。