首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

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

  •  
  •   Moorj · 2018-03-20 21:55:06 +08:00 · 2045 次点击
    这是一个创建于 629 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求:

    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

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

    不知道应该怎么实现呢?

    11 回复  |  直到 2018-03-21 09:06:19 +08:00
        1
    qinix   2018-03-20 22:54:17 +08:00 via iPhone
    锁…
        2
    liuzelei   2018-03-20 23:04:40 +08:00
    这不是传说中的隔离等级么。。。。
        3
    msg7086   2018-03-20 23:50:32 +08:00
    这不是队列……
        4
    akira   2018-03-21 00:06:33 +08:00
    不对啊,客户端可以直接操作数据库?
        5
    kfll   2018-03-21 00:23:28 +08:00 via iPhone
    ……这是要多主集群吧……不过有个客户端就很奇怪了……
        6
    feverzsj   2018-03-21 00:31:42 +08:00
    这种问题真是莫名其妙啊,客户端直接连到主机的数据库中不就好了
        7
    SbloodyS   2018-03-21 00:34:53 +08:00
    这个不是隔离么。。。
        8
    MeteorCat   2018-03-21 00:36:36 +08:00 via Android
    事务?要么全部一次性全部成功,要么一次性失败让出给其他操作?
        9
    Seumi   2018-03-21 01:51:19 +08:00 via Android
    互斥锁
        10
    ctro15547   2018-03-21 08:53:30 +08:00
    上锁?
    redis 广播互相订阅一下,写过一个 demo 跟题主要求很像
        11
    picture2200   2018-03-21 09:06:19 +08:00 via Android
    加一个状态位,a 和 b 根据不同的状态取数据就可以了。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1111 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 18:13 · PVG 02:13 · LAX 10:13 · JFK 13:13
    ♥ Do have faith in what you're doing.