跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 灵异事件?!一个 request 里,操作数据掉了一半…
未分類
5 2 月 2021

灵异事件?!一个 request 里,操作数据掉了一半…

灵异事件?!一个 request 里,操作数据掉了一半…

資深大佬 : liudaqi 9

今天遇到一个用户反应数据出错,然后去把数据拉出来核对,真的是错了,只是错误百思不得姐:

def pipline():      a.name = 'new name'     sql.session.add(a)     sql.session.commit()      b.status = 'done'     sql.session.add(b)     sql.session.commit()  

pipline() 是在一个 request 中完成的,程序中没有用事务回滚。结果发现 b.status 存到数据库中了,a.name 在数据库中没有保存下来。

这个业务流程从来没有出错过,只是有可能用户刚刚在操作的时候,刚好服务器有执行过重启操作,有可能这么巧合吗,把一个 request 中的数据库插入给丢一半、留一半?

大佬有話說 (5)

  • 資深大佬 : v2webdev

    它俩又不是在同一个事务里,当然有可能不同时提交。

  • 主 資深大佬 : liudaqi

    @v2webdev 也是怀疑到这一步了。疑惑的是,怎么丢的数据不是上半部分,而是后半部分?程序好歹是从上往下执行的,这个 pipline() 大多数时候是在 1 秒之内就能结束的。中途是有 reboot 服务器,还是感到比较灵异

  • 資深大佬 : xupefei

    acid 中并没有定义回滚的优先级,回滚与否和执行时刻无关。

  • 資深大佬 : xupefei

    另外你检查过 commit 是否同步吗?它可能是异步…

  • 資深大佬 : srx1982

    @xupefei 有道理,建议主研究一下

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具