0

JCS を利用して JVM ( JVM1 )にキャッシュを保持するアプリケーションを維持しています。このデータは、JVM の開始/再起動時に初めてデータベースからロードされます。

ただし、データベースは別の JVM ( JVM2 ) からアクセスされ、データベースにデータを追加するのに役立ちます。

この追加/新しく追加されたレコードがキャッシュにロードされていることを確認するには、データベースに追加するたびにJVM1を再起動する必要があります。

(頻繁な db ポーリングの代わりに) 定期的にJVM1のキャッシュ (新しく追加されたレコードのみ) を更新/ロードする方法はありますか?

ありがとう、ジャヤ・クリシュナ

4

1 に答える 1

0

JVM1に最初にメモリ内キャッシュをチェックさせてから、アイテムがメモリ内キャッシュに存在しない場合はデータベースキャッシュをチェックさせることはできませんか?

ただし、存在する特定のタイプのすべてのアイテムを一覧表示する必要があり、データベースにアクセスしたくない場合。次に、JVM1がデータベースに新しいアイテムがあることを知るために、1)JVM2がJVM1にネットワークメッセージを送信して、データベースに新しいエントリがあることを通知する必要があると思います。または2)新しいデータが挿入されたときに起動し、ネットワークメッセージをJVM1に送信するデータベーストリガーが存在する可能性があります。(しかし、データベースにアプリケーションサーバーにネットワークメッセージを送信させることは、私が思うにかなり奇妙に感じます。)—しかし、これらのアプローチはかなり複雑に見えると思います。

データベースに最近挿入されたアイテムのIDをログに記録する、ある種のnew-item-idsテーブルを検討しましたか?データベーストリガーによって、またはデータベースに書き込むときにJVM1と2によって更新される可能性があります。次に、JVM1は、この単一のテーブルをおそらく1秒に1回ポーリングして、新しいIDのリストを取得するだけで済み、データベースから新しいアイテムをロードできます。

最後に、分散キャッシュを検討しましたか?そのため、JVM1と2の両方が同じキャッシュを共有し、JVM1と2は、アイテムをデータベースに挿入するときに、このキャッシュにアイテムを書き込みます。(このアプローチは、JVM1と2の間でネットワークメッセージを送信するのと多少似ていますが、分散キャッシュシステムはメッセージ自体を送信するため、新しいコードを記述する必要はありませんでした)

于 2013-01-20T07:12:56.067 に答える