vertx中数据库操作的并发问题
Posted
技术标签:
【中文标题】vertx中数据库操作的并发问题【英文标题】:Concurrency issue in database operations in vertx 【发布时间】:2021-12-23 04:02:48 【问题描述】:我必须将insert
两个属性转换为table
(device_id, timestamp) 但在此之前,我必须删除前一天的记录并执行选择计数以从表中获取记录总数。
根据计数值,将数据插入表中。
我总共有 3 个查询,它们适用于单用户测试,但如果运行 10 个或更多用户的并发测试,我的代码就会中断。
我正在使用hsqldb
和vertx 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 (?,?)
【问题讨论】:
【参考方案1】:你需要将 auto-commit 设置为 false 并在最后一条语句之后提交。
如果数据库事务控制是默认LOCKS模式,你不会得到任何不一致,因为表被DELETE语句锁定,直到提交。
如果你已经将事务控制改为MVCC,那么这取决于你在INSERT语句中使用COUNT的方式。
【讨论】:
以上是关于vertx中数据库操作的并发问题的主要内容,如果未能解决你的问题,请参考以下文章