私はJava、Spring、Hibernate、およびOracle SQLでカウンタを実装しようとしています。各レコードは、所与のタイムスタンプによってカウントを表す。各レコードが分単位で一意に識別され、各レコードがカウント列を保持しているとします。このサービスは、1トンの同時リクエストを受け取ると予想され、私はおそらく同じレコードのカウンターコラムを更新します。レコードが存在しない場合は、私のテーブルでsaveOrUpdateで重複レコードを作成するHibernateの同時実行性
、わずかにレコードを挿入し、それ以外の場合は1にそのカウントを設定し、タイムスタンプによるレコードを検索し、するために、1
により、既存のカウンターの列を増やします私たちがデータの一貫性と整合性を維持していることを確認するために、私は悲観的なロックを使用しています。たとえば、同じユーザーではなく、同時に20カウントが入る場合は、更新前にそのレコードの古くなった読み取りからレコードを上書きする可能性があります。ロックを使用すると、20カウントが入ると、データベースへの影響は20カウントになるはずです。
ロックは問題ありませんが、問題は、レコードが最初に存在しなかった場合、同時に存在しないレコードを更新しようとする2つ以上の同時リクエストがある場合です。存在しないレコードをロックすることができないため、重複レコードが挿入されることに注意してください。どのように重複がテーブルに作成されないようにすることができますか?それはOracle経由で制御する必要がありますか?それとも、私のアプリとHibernateでこれを管理できますか?
ありがとうございます。