我将获取多个Servlet请求表单客户端来更新数据库中的某些条目。目前我使用Postgre进行休眠。我所做的是我读取数据库的当前值,然后添加一个该值并保存每个请求。但是,如果两个人同时读取数据库并添加它,它将不会像我想要的那样计数。我有一些建议让它“同步”。但是如果请求的数量变大,那么对于一些用户来说可能会有相当大的延迟。如何处理多个servlet请求以更新DB值
有没有更快的方式来更新+1值,而无需读取和写入?如果最好的做法是使用同步,那么如何使它更快(更少的等待时间)?
我将获取多个Servlet请求表单客户端来更新数据库中的某些条目。目前我使用Postgre进行休眠。我所做的是我读取数据库的当前值,然后添加一个该值并保存每个请求。但是,如果两个人同时读取数据库并添加它,它将不会像我想要的那样计数。我有一些建议让它“同步”。但是如果请求的数量变大,那么对于一些用户来说可能会有相当大的延迟。如何处理多个servlet请求以更新DB值
有没有更快的方式来更新+1值,而无需读取和写入?如果最好的做法是使用同步,那么如何使它更快(更少的等待时间)?
你可以用LOCK试试,看看这个:http://www.postgresql.org/docs/8.1/static/sql-lock.html
对于做一个查询中的一切(快),检查:Increment a value in Postgres
您可以使用Spring事务管理(参见文档here)。
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
你怎么做持久性? “普通香草”JDBC还是JPA?如果是JPA,只需使用EJB作为服务层。您将受益于透明的容器管理事务管理。如果“普通的vanila”JDBC那么,那么,寻找像Spring这样的传统框架。它有一个'JdbcTemplate'的东西。 – BalusC