现在有一个 一主多从的构架 一个从服务器的程序拿到一些数据 尽快的标记已读取 但是其他从服务器的程序还是有拿到那些标记的数据 每个从服务器拿取数据都不的不比较快 这个问题有什么好的办法吗
1
kalsolio OP 从服务器都在获取数据去处理 但是不允许二次处理
现在一个从拿到之后 尽快的去标记我拿走了 但是其他的从 还是会发生拿走那些不应该获取的数据 |
2
kalsolio OP 特别容易发生在 需要处理的数据比较少的时段.
|
3
lecher 2016-04-28 16:06:07 +08:00 via Android
MySQL 上面还要分发到从服务器本身就有延时,做这个加锁的事务处理比较麻烦。
这是个典型的任务分发业务,可以考虑用消息队列,或者用支持队列的数据库进行处理,业务设计上比较简单。 如果延时要求不是特别高, MySQL 可以考虑用在主库 update taskerlist set tasker = uid where tasker=0 这类的语句。 查询没有被认领的并直接更新为认领状态,再去取业务数据,这个延时会小一些。 |
4
junweiyang 2016-04-28 16:06:25 +08:00 via Android
升级数据库版本 (逃
|
5
aru 2016-04-28 16:13:28 +08:00
每个程序取个名字,表上增加一个字段 worker ,默认值为 NULL
标记的时候加个限制条件 update xxxtable set worker='myname' where 原来的限制条件 and worker is NULL; 如果 affected row 为 0 ,那么表明被其他程序取走了,放弃这个任务,继续取其他任务 |
6
Infernalzero 2016-04-28 16:49:26 +08:00
可以试试 5.7 ,主从同步支持多线程了
|
7
kalsolio OP |
8
realpg 2016-04-28 22:54:07 +08:00
明显你这是个 MQ 的需求,你非得弄成 MYSQL 复制……
|