如何处理多个servlet请求以更新DB值

时间:2012-12-17 15:16:32

标签: java database servlets synchronization

我将从客户端获取多个Servlet请求以更新数据库中的某些条目。目前我使用Postgre的hibernate。我所做的是我读取数据库中的当前值,然后将一个值添加到该值并保存每个请求。但是,如果两个人同时读取数据库并添加它,它将不计算我想要的数量。我有一些建议让它“同步”。但如果请求数量增加,某些用户可能会有相当大的延迟。

是否有更快的方式将值更新+1,而无需读取和写入?如果最佳做法是使用同步,那么如何使其更快(更少的等待时间)?

2 个答案:

答案 0 :(得分:1)

您可以尝试使用LOCK,请检查:http://www.postgresql.org/docs/8.1/static/sql-lock.html

要在一个查询中执行所有操作(更快),请选中:Increment a value in Postgres

答案 1 :(得分:1)

您可以使用Spring事务管理(请参阅文档here)。

Spring config:

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

使用@Transactional注释你的hibernate读写方法,如

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

然后根据您的需要定义隔离属性。查看TransactionDefinition以获取不同的隔离选项。例如,TransactionDefinition.ISOLATION_READ_COMMITTED