現在、次の設定でプロジェクトに取り組んでいます。
APIを介してトリガーされないイベントに反応する必要があるC#アプリケーションを設計しているので、私が考えることができる唯一の方法は、データベースを直接観察し、カスタムイベントに応じて反応することです。
1つのアプローチは、トリガーされたDB時間を照会して反応することですが、これはDBが大きい場合にパフォーマンスの問題につながる可能性があります。指定されたイベントが発生した場合にDB自体がアプリケーションに通知するというアプローチに感謝します。
編集:専用アプリケーションはEnterprise Architectモデリングツールであるため、予想される同時ユーザー数は間違いなく10ユーザーを超えず、データベースサイズは50 MBを超えません。別のスレッドでポーリングアクティビティをアウトソーシングし、イベントによってアプリケーションの残りの部分に通知することは、おそらく許容できる解決策でしょうか?
ユーザー数とデータベースサイズに関して、MS Accessデータベースはどの負荷をほぼ処理できますか?
この種の問題についてよく知られているパターン/アプローチはありますか。それがわからない場合は、どのようにこの問題に直面しますか。
この種の問題の最も一般的な解決策は、データベース内の変更に対応する必要があるnotの方法でC#アプリケーションを設計することです。トリガーなどを使用できる「実際の」クライアント/サーバーデータベースを使用している場合でも、ほとんどのクライアント/サーバーアプリケーションは、サーバーが「トリガーイベント」をクライアントに送信する必要がある「プッシュモデル」の必要性を回避します。実際、そのようなメカニズムを提供するデータベースはほとんどありません。クライアントとサーバー間のネットワークに障害が発生することがあるため、少なくともクライアントアプリケーションは通常、すべてのイベントの取得に依存しません。
もちろん、私はあなたの要件、およびそれらを議論するためにどれだけの余地が残っているかを知りません。また、一部の要件は、適切なイベントメカニズムなしに実装するのが本当に難しい場合があります。
これが本当に必要な場合は、ポーリングが唯一の選択肢だと思います。
別のスレッドでポーリングアクティビティをアウトソーシングし、イベントによってアプリケーションの残りの部分に通知することは、おそらく許容できる解決策でしょうか?
技術的には:おそらくそうですが、特定のケースのパフォーマンスを測定する必要があります。重要な要素は、各サイクルでスキャンする必要のあるデータの量と、許容できる遅延です(秒?OK。ミリ秒以下?は難しくなる可能性があります)。
Microsoft Access(2010+)には データマクロ があります。これはトリガーのようなものですが、Accessアプリケーションが実行されているか、ODBC接続が可能である場合を除いて、実行されるとは思いません。これらを認識してください。これらを追加する機能がない場合があります。
サービスポールをデータベースに置くことはそれほど多くありません。パフォーマンスに関する限り、頻度は希望よりも低くする必要がある場合があります。同時ユーザーの数もこれに影響します。そのためにパフォーマンスを最適化するために、このサードパーティアプリを制御することはできません。
これがパターンかどうかはわかりません。
アクセスを使用すると、別のデータベース、特にSQLサーバーのテーブルにリンクテーブルを使用できます。データをそのようなものに移行することは可能ですか?次に、トリガーまたはジョブを使用して、必要な監視を行うことができます。