RDBMSデータベース(MS SQL Server)に大量の時系列データを保存するためのDALがあります。このデータベースに接続し、オンラインで傾向を表示するWebアプリケーションもあります(通常、数ヶ月のデータをグラフ化します(たとえば、さまざまな量とIoTデバイスの最小/最大/平均の合計5分)。データベース層のキャッシュ、トリガー、無効化
データの量のために、私は別のテーブルに集計結果をキャッシュしたいと思います。また、メモリ内のキャッシュを追加することができればかなりいいですね。しかし、デバイスはしばしば古いタイムスタンプを持つ履歴データを送信します。つまり、キャッシュを無効にする必要があることが多く、このデータにアクセスする2つのアプリケーションがあります(データを挿入/更新することがあります。データ)。
SQLトリガーのようないくつかのオプションを調べたり、手動でテーブルを無効にするだけですが、キャッシュ無効化をWebアプリケーションに正しく伝播する方法がわかりません。
どうやらWebアプリケーションでSQLイベントを検出してキャッシュを無効にする方法はありますか?または、メモリ内のキャッシュを別のプロセスにすることもできますが、無効化することもできます。あるいは、私はおそらく、すべてのdb操作のプロキシとなる自分自身の第3のサービスを作成し、データのインメモリ・キャッシュを提供する必要があります(これは過剰なもののようです)。
SQL Serverデータベースを使用している場合は、ストアドプロシージャの使用を検討してください。 – jdweng
@jdweng:あなたは精巧にできますか?なぜストアドプロシージャはSQL Server固有のものなのでしょうか?それはキャッシュとどう関係していますか? – Lou
データベースは複数のアプリケーションからアクセスできるため、テーブルの更新はどのアプリケーションでも実行できません。ストアドプロシージャのSQLでビュー(一時テーブル)を作成し、ビューにタイムスタンプを追加することができます。その後、ストアドプロシージャはビューの更新を処理します。アプリケーションは、ビューを更新する世話をするストアドプロシージャを呼び出すことができます。ビューはキャッシュになります。 – jdweng