我有一个带锁定超时列的InnoDB表。如果此列为null,则表示没有锁定,否则会有一个锁定根据该列中的时间戳超时。
我遇到的问题是此表中有很多行,并且此表中的许多行每分钟都会被处理,但处理当前正遵循此模型:
1. select rows to be processed
2. iterate over rows to be processed in Java
a. Try to acquire a lock on row
b. if lock acquired, process row and continue; else continue
这种效率非常低,所以如果我可以尝试获取 所有 要处理的行的锁定,那将会很棒,然后返回在一次交易或一些更有效的交易中获得锁的行的结果集。
你会推荐什么?
答案 0 :(得分:0)
只使用sql中的where子句选择可以获取锁的行,如
where lock_timeout is null
另外,我希望如果这有多个线程,你可以在整个代码部分放置一个互斥或其他东西。从选择行到锁定的所有内容。