【问题标题】:Concurrency issue in database operations in vertxvertx中数据库操作的并发问题
【发布时间】:2021-12-23 04:02:48
【问题描述】:

我必须将insert 两个属性转换为table(device_id, timestamp) 但在此之前,我必须删除前一天的记录并执行选择计数以从表中获取记录总数。 根据计数值,将数据插入表中。 我总共有 3 个查询,它们适用于单用户测试,但如果运行 10 个或更多用户的并发测试,我的代码就会中断。 我正在使用hsqldbvertx jdbc client. 有没有办法合并所有三个查询? 查询是:

DELETE FROM table_name WHERE timestamp <= DATE_SUB(NOW(), INTERVAL 1 DAY)
SELECT COUNT(*) FROM table_name WHERE device_id = ?
INSERT into table_name(device_id,timestamp) values (?,?)

【问题讨论】:

    标签: java hsqldb vert.x


    【解决方案1】:

    你需要将 auto-commit 设置为 false 并在最后一条语句之后提交。

    如果数据库事务控制是默认LOCKS模式,你不会得到任何不一致,因为表被DELETE语句锁定,直到提交。

    如果你已经将事务控制改为MVCC,那么这取决于你在INSERT语句中使用COUNT的方式。

    【讨论】:

      猜你喜欢
      • 2011-12-21
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多