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

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

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

    需求:

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