我将从客户端获取多个Servlet请求以更新数据库中的某些条目。目前我使用Postgre的hibernate。我所做的是我读取数据库中的当前值,然后将一个值添加到该值并保存每个请求。但是,如果两个人同时读取数据库并添加它,它将不计算我想要的数量。我有一些建议让它“同步”。但如果请求数量增加,某些用户可能会有相当大的延迟。
是否有更快的方式将值更新+1,而无需读取和写入?如果最佳做法是使用同步,那么如何使其更快(更少的等待时间)?
答案 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