【问题标题】:How to handle multiple servlet requests to update DB value如何处理多个 servlet 请求以更新 DB 值
【发布时间】:2012-12-04 16:55:54
【问题描述】:

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

有没有更快的方法来更新一个值+1,而不用读写它?如果最佳做法是使用同步,那么如何使其更快(更少等待时间)?

【问题讨论】:

  • 你的持久性怎么样? “普通的”JDBC 或 JPA?如果是 JPA,只需使用 EJB 作为服务层。您将受益于透明的容器管理事务管理。如果是“plain vanila” JDBC,那么,好吧,寻找像 Spring 这样的遗留框架。它有一个JdbcTemplate 的东西。

标签: java database servlets synchronization


【解决方案1】:

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

要在一个查询中完成所有操作(更快),请检查:Increment a value in Postgres

【讨论】:

    【解决方案2】:

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

    弹簧配置:

    <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-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 2017-11-20
      • 2012-02-03
      • 2013-10-19
      相关资源
      最近更新 更多