3

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

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

4

2 回答 2

1

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

为了在一个查询中完成所有事情(更快),请检查:Increment a value in Postgres

于 2012-12-17T15:20:20.723 回答
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 回答