Moorj
V2EX  ›  问与答

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

  •  
  •   Moorj · Mar 20, 2018 · 4328 views
    This topic created in 3153 days ago, the information mentioned may be changed or developed.

    需求:

    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 replies  •  2018-03-21 09:06:19 +08:00
    qinix
    qinix
    Mar 20, 2018 via iPhone
    1
    锁…
    liuzelei
    liuzelei
    Mar 20, 2018
    2
    这不是传说中的隔离等级么。。。。
    msg7086
    msg7086
    Mar 20, 2018
    3
    这不是队列……
    akira
    akira
    Mar 21, 2018
    4
    不对啊,客户端可以直接操作数据库?
    kfll
    kfll
    Mar 21, 2018 via iPhone
    5
    ……这是要多主集群吧……不过有个客户端就很奇怪了……
    feverzsj
    feverzsj
    Mar 21, 2018
    6
    这种问题真是莫名其妙啊,客户端直接连到主机的数据库中不就好了
    SbloodyS
    SbloodyS
    Mar 21, 2018
    7
    这个不是隔离么。。。
    MeteorCat
    MeteorCat
    Mar 21, 2018 via Android
    8
    事务?要么全部一次性全部成功,要么一次性失败让出给其他操作?
    Seumi
    Seumi
    Mar 21, 2018 via Android
    9
    互斥锁
    ctro15547
    ctro15547
    Mar 21, 2018
    10
    上锁?
    redis 广播互相订阅一下,写过一个 demo 跟题主要求很像
    picture2200
    picture2200
    Mar 21, 2018 via Android
    11
    加一个状态位,a 和 b 根据不同的状态取数据就可以了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   961 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 19:25 · PVG 03:25 · LAX 11:25 · JFK 14:25
    ♥ Do have faith in what you're doing.