3

DB 内のいくつかのエントリを更新するために、クライアントから複数のサーブレット リクエストを取得します。現在、Postgre で休止状態を使用しています。私がしていることは、現在の値の DB を読み取り、その値に 1 を追加して、要求ごとに保存することです。しかし、2 人が同時に DB を読み取って追加すると、私が望むようにカウントされません。「同期」するための提案がいくつかありました。ただし、リクエストの数が増えると、一部のユーザーにはかなりの遅延が発生する可能性があります。

値を読み書きせずに+1で更新するより高速な方法はありますか? ベスト プラクティスが同期を使用することである場合、同期を高速化する (待機時間を短縮する) 方法はありますか?

4

2 に答える 2

1

Springトランザクション管理を使用できます(ここのドキュメントを参照)。

春の設定:

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource"/>
</bean>

休止状態の読み取りおよび書き込みメソッドに@Transactionalのようなアノテーションを付けます

@Transactional(value = "txManager" ...
public int incrementValue(){

次に、必要に応じて分離プロパティを定義します。さまざまな分離オプションについては、TransactionDefinitionを参照してください。例えば、TransactionDefinition.ISOLATION_READ_COMMITTED

于 2012-12-17T15:30:20.123 に答える
1

LOCK で試すことができます。これを確認してください: http://www.postgresql.org/docs/8.1/static/sql-lock.html

1 つのクエリですべてを (より高速に) 行うには、これを確認してください: Postgres で値をインクリメントする

于 2012-12-17T15:20:20.723 に答える