質問

複式簿記システムを開発しており、シーケンシャルIDにギャップなしで転記レコードを挿入する必要があります。すべてのデータベースアクセスはWebアプリケーションを介して行われるため、同期された静的変数を使用してIDの生成を処理しています。 ジェネラコディセタグプレ

簡単に言うと、このサービスの有効期間は現在のhttprequestに関連付けられており、Springコンテナによって管理されます。さらに、リクエストの最後にトランザクション全体がコミットされるようにします。同期されたブロックが同時実行を処理するため、IDのシーケンスにギャップが発生することはありません。 ここでの大きな問題は、特定の基準に一致する最後に挿入されたレコードを選択するためのデータベースアクセスの追加オーバーヘッドです。私はそれが起こらないようにしたいので、ここでの解決策は、最後に挿入されたレコードを最初に選択したときに保持するキャッシュを使用することだと思います。したがって、IDを生成するためにデータベースアクセスは必要ありません。 私の質問:これを解決するためのすぐに使える休止状態の方法はありますか?休止状態に慣れておらず、クエリキャッシュについて聞いたことがありますが、その使用方法がわかりません。このサービスを使用して保存するすべての値をキャッシュに保持する必要はありません。特定の条件を満たす最後に挿入されたエントリを保存するために必要なだけです。たとえば、2つが等しい基準「X」に一致し、他の3つが基準「Y」に一致する5つの挿入を実行した場合、キャッシュには2つのオブジェクト(各基準に一致する最後に挿入されたオブジェクト)のみが格納されます。 これは自分で簡単に実装できますが、HibernateAPIと統合するソリューションを使用したいと思います。

役に立ちましたか?

解決

キャッシュは、頻繁にアクセスされるほとんど変更されないオブジェクトを保存するのに適しています。あなたがやろうとしていることではないこと。シリアライズ可能なトランザクションを使用して、更新の損失や一貫性のない読み取りを防ぐことができます。これは回避しようとしていることです。ただし、そのオーバーヘッドを覚えておく必要があります。 ジェネラコディセタグプレ

これが SessionFactory APIによると

SessionFactoryの動作は、構成時に提供されるプロパティによって制御されます。これらのプロパティは環境で定義されています。

回避策として、上記のように1つをシリアル化できる2つの異なるSessionFactoryを設定できます。

挿入された最新のPostEntryエンティティを取得しているため、データベースが取得したPostEntryをロックするだけなので、ペシミストロックは適切に適用されないと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top