vertx中数据库操作的并发问题

Posted

技术标签:

【中文标题】vertx中数据库操作的并发问题【英文标题】:Concurrency issue in database operations in vertx 【发布时间】: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 (?,?)

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于vertx中数据库操作的并发问题的主要内容,如果未能解决你的问题,请参考以下文章

Vertx 初体验

关于Java应对高并发的方案——vertx的使用!

Java应对高并发的方案——vertx的使用!

springboot与vertx异步并发对比

用vertx compose写链式操作

你不知道的vertx mqtt(服务端)