V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Breadykid
V2EX  ›  程序员

跨库的数据库事务回滚操作

  •  
  •   Breadykid ·
    breadkid · 2019-09-16 13:30:46 +08:00 · 5965 次点击
    这是一个创建于 1880 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想问下,跨不同数据库,oracle,mysql,pg 的事务操作有什么解决方案吗?不用同步,只要回滚。
    背景都是单库。
    同一个事务中,以下任一步骤异常则全部回滚。
    例如:步骤 3 异常,1、2、3 操作回滚

    1. 读取 mysql 库 A 表 A 添加至 mysql 库 DW 表 A
    2. 读取 mysql 库 DW 表 A 添加至 mysql 库 DW 表 B
    3. 读取 oracle 库 DW 表 B 添加至 oracle 库 DW 表 C
    4. 读取 oracle 库 B 表 B 添加至 mysql 库 DW 表 B

    LZ 是 Javaer。。。工程是 springboot 的。。。

    第 1 条附言  ·  2019-09-16 15:13:11 +08:00
    偏向在单应用服务里操作,像是用 transactionTemplate
    15 条回复    2020-06-01 14:52:37 +08:00
    lolizeppelin
        1
    lolizeppelin  
       2019-09-16 13:58:35 +08:00 via Android
    工作流呗还能咋办
    pangleon
        2
    pangleon  
       2019-09-16 14:04:54 +08:00
    你非要实时不就是分布式事务么?你怎么理解你自己说的 “不用同步”的?不是只有数据同步叫同步,你这是状态同步一样也是同步。

    要么上分布式事务中间件,目前有不少方案了,TCC,SAGA,消息。对现有系统侵入性最小的是消息模式
    LeeSeoung
        4
    LeeSeoung  
       2019-09-16 14:29:51 +08:00
    关键词 分布式事务 有很多可以用的框架,但都不是很好用。。
    dog82
        5
    dog82  
       2019-09-16 15:04:29 +08:00
    分布式事务,以前用过 jboss 系列的 narayana,感觉云里雾里的。
    后来听说 spring 可以集成 atomikos
    xuanbg
        6
    xuanbg  
       2019-09-16 15:59:46 +08:00
    最省事的方案就是统统换成 oracle,消灭提出问题的人……不对,是数据库,也能解决问题。也许这个办法还最省钱也说不定呢。

    除此之外,就是上分布式事务了,估计楼上说的那些都不好使,最后还得自己造轮子。然后发现这个轮子不好造,一开始以为最多是造一辆马车,结果发现是艘宇宙飞船。。。
    ziding
        7
    ziding  
       2019-09-17 09:25:39 +08:00
    最简单的 2PC 提交,影响性能。复杂的 TCC,SAGA,消息
    boyhailong
        8
    boyhailong  
       2019-09-17 11:37:31 +08:00
    实际中有这么复杂的需求?
    XiLemon
        9
    XiLemon  
       2019-09-17 12:11:03 +08:00 via iPhone
    老哥,怎么感觉在某个群里见过这个问题呢
    Breadykid
        10
    Breadykid  
    OP
       2019-09-18 09:11:20 +08:00
    @xuanbg oracle 有什么回滚方案吗
    Breadykid
        11
    Breadykid  
    OP
       2019-09-18 09:11:44 +08:00
    @boyhailong 公司是要造这个轮子。。。
    Breadykid
        12
    Breadykid  
    OP
       2019-09-18 09:12:04 +08:00
    @XiLemon 所以,你在哪个群
    XiLemon
        13
    XiLemon  
       2019-09-18 09:36:12 +08:00 via iPhone
    @Breadykid 加一下试试👀
    xuanbg
        14
    xuanbg  
       2019-09-18 12:03:00 +08:00
    @Breadykid oracle 不就是正常的数据库事务么。。。我的意思就是用同一个数据库,至少数据库不要搞分布式。
    734695609
        15
    734695609  
       2020-06-01 14:52:37 +08:00
    @Breadykid 请问一下帖主最后是怎么解决的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2731 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:29 · PVG 20:29 · LAX 04:29 · JFK 07:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.