【发布时间】:2011-04-23 18:50:32
【问题描述】:
有没有办法在mysql上模拟Amazon SQS消息选择机制(独占)?我需要这个来为多个 ec2 实例使用一个 mysql 表,这些实例将处理并从中删除行。
select ... for update 不是我想要的,因为它在选择时锁定了一个线程,而不是返回未锁定的实例。
【问题讨论】:
标签: mysql sql concurrency amazon-sqs
有没有办法在mysql上模拟Amazon SQS消息选择机制(独占)?我需要这个来为多个 ec2 实例使用一个 mysql 表,这些实例将处理并从中删除行。
select ... for update 不是我想要的,因为它在选择时锁定了一个线程,而不是返回未锁定的实例。
【问题讨论】:
标签: mysql sql concurrency amazon-sqs
最终我想到了这个想法(现在没有实现):
更改目标表,添加列lock_name、lock_time
每次迭代:
2.1。 update target_table set lock_time = now(), lock_name = 'controller_instance_name' where lock_time
2.2。 select * from target_table where lock_name = 'controller_instance_name' and lock_time > now() - visibilityTimeout
2.3 选择中的每一项
2.3.1 处理一下
2.3.2 从表中删除:delete from target_table where id = ?
每个控制器实例在锁定超过 visibilityTimeout 值后将能够选择行。
【讨论】: