java - vertx中数据库操作的并发问题
问题描述
我必须将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 (?,?)
解决方案
您需要将 auto-commit 设置为 false 并在最后一条语句之后提交。
如果数据库事务控制是默认的LOCKS模式,你不会得到任何不一致,因为表被DELETE语句锁定,直到提交。
如果您已将事务控制更改为 MVCC,那么这取决于您在 INSERT 语句中使用 COUNT 的方式。
推荐阅读
- r - R 中的 lmer 测试误差,随机效应因素导致无法识别的随机效应
- python - 如何在我的 twitter 机器人中正确实现 StreamListener?(呸呸呸)
- javascript - 我应该担心 ReactJS 中本地存储中的令牌可见性吗?
- visual-studio - 尝试安装 Visual Studio Community 2019 扩展时出错
- java - Java - Netbeans 计算器清除按钮的问题
- mongodb - 是否可以像使用 mongodb 中的集合一样使用查询结果?
- visual-studio-code - VSCODE 终端界面已更改。怎么回到默认界面?
- php - php。7.4 内置服务器处理多个请求?
- android - 蓝牙控制器应用程序如何工作?(我会用什么来做一个)
- python - Selenium - 切换到作为窗口的 div 类