mysql 这个延迟问题 有解决方案或者尽量降低发生的办法吗?

2016-04-28 15:53:03 +08:00
 kalsolio

现在有一个 一主多从的构架 一个从服务器的程序拿到一些数据 尽快的标记已读取 但是其他从服务器的程序还是有拿到那些标记的数据 每个从服务器拿取数据都不的不比较快 这个问题有什么好的办法吗

3130 次点击
所在节点    MySQL
9 条回复
kalsolio
2016-04-28 15:57:00 +08:00
从服务器都在获取数据去处理 但是不允许二次处理
现在一个从拿到之后 尽快的去标记我拿走了
但是其他的从 还是会发生拿走那些不应该获取的数据
kalsolio
2016-04-28 15:58:46 +08:00
特别容易发生在 需要处理的数据比较少的时段.
lecher
2016-04-28 16:06:07 +08:00
MySQL 上面还要分发到从服务器本身就有延时,做这个加锁的事务处理比较麻烦。

这是个典型的任务分发业务,可以考虑用消息队列,或者用支持队列的数据库进行处理,业务设计上比较简单。

如果延时要求不是特别高, MySQL 可以考虑用在主库 update taskerlist set tasker = uid where tasker=0 这类的语句。
查询没有被认领的并直接更新为认领状态,再去取业务数据,这个延时会小一些。
junweiyang
2016-04-28 16:06:25 +08:00
升级数据库版本 (逃
aru
2016-04-28 16:13:28 +08:00
每个程序取个名字,表上增加一个字段 worker ,默认值为 NULL
标记的时候加个限制条件
update xxxtable set worker='myname' where 原来的限制条件 and worker is NULL;
如果 affected row 为 0 ,那么表明被其他程序取走了,放弃这个任务,继续取其他任务
Infernalzero
2016-04-28 16:49:26 +08:00
可以试试 5.7 ,主从同步支持多线程了
kalsolio
2016-04-28 17:03:59 +08:00
realpg
2016-04-28 22:54:07 +08:00
明显你这是个 MQ 的需求,你非得弄成 MYSQL 复制……
kalsolio
2016-04-29 08:51:02 +08:00
@realpg 嗯 系统的部分确实是 MQ 的需求 但是整体上 还是需要用主从结构才行,还有很多别的类型数据需要主从来降低主库压力.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/275102

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX