mysql中的生产者/消费者表 - 缺少行

时间:2014-03-23 16:20:43

标签: mysql database

我有一个mysql表被用作消息队列:

id | message_text

它是InnoDB表,id字段是自动增量整数字段。

生产者应用程序有多个线程执行以下插入:

insert into my_table(message_text) values('the text');

消费者应用程序每五秒钟运行一次。它选择50条记录,然后按行id删除每条记录:

rows = select * from my_table limit 50;
for (row : rows) {
    delete from my_table where id = row.id;
}

似乎消费者应用程序看不到所有行。只有一个生产者应用程序实例在运行,它在单个线程中执行选择。生产者应用程序打印以控制它插入的所有消息,消费者应用程序还打印它处理的每一行,但它缺少行。

我想,因为我明确地按行ID删除,我不会遇到问题,但似乎我肯定会在某处丢弃行。

由于

1 个答案:

答案 0 :(得分:0)

这对我来说只是一个愚蠢的错误。我的初始代码测试(在jdbc中)在其中一个线程中自动提交,我无法显式提交。这导致我认为有些行被丢弃了。

我现在可以按照预期确认这种模式。