怎么利用数据库做任务队列?

2018-03-20 21:55:06 +08:00
 Moorj

需求:

A 为主机,B 为客户端,数据库会在 0.1-0.5 秒之内在 A、B 电脑上同步

A、B 会在数据库中获取,计算,并写入数据

正常的业务流程是:

A 先进行操作,获取数据 10,计算 10-1=9,写入数据 9

B 再进行操作,获取数据 9,计算 9-1=8,写入数据 8

但是因为数据库的同步延迟,如果 A 与 B 在同一毫秒进行操作,很可能 AB 获取到同样的数据,然后写入相同的数据

例如:

A 获取数据 10,计算 10-1=9,写入数据 9

B 获取数据 10,计算 10-1=9,写入数据 9

我觉得应该要对这种情况做任务队列

不知道应该怎么实现呢?

3317 次点击
所在节点    问与答
11 条回复
qinix
2018-03-20 22:54:17 +08:00
锁…
liuzelei
2018-03-20 23:04:40 +08:00
这不是传说中的隔离等级么。。。。
msg7086
2018-03-20 23:50:32 +08:00
这不是队列……
akira
2018-03-21 00:06:33 +08:00
不对啊,客户端可以直接操作数据库?
kfll
2018-03-21 00:23:28 +08:00
……这是要多主集群吧……不过有个客户端就很奇怪了……
feverzsj
2018-03-21 00:31:42 +08:00
这种问题真是莫名其妙啊,客户端直接连到主机的数据库中不就好了
SbloodyS
2018-03-21 00:34:53 +08:00
这个不是隔离么。。。
MeteorCat
2018-03-21 00:36:36 +08:00
事务?要么全部一次性全部成功,要么一次性失败让出给其他操作?
Seumi
2018-03-21 01:51:19 +08:00
互斥锁
ctro15547
2018-03-21 08:53:30 +08:00
上锁?
redis 广播互相订阅一下,写过一个 demo 跟题主要求很像
picture2200
2018-03-21 09:06:19 +08:00
加一个状态位,a 和 b 根据不同的状态取数据就可以了。

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

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

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

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

© 2021 V2EX