【问题标题】:How database handle this state in transaction?数据库如何处理事务中的这种状态?
【发布时间】:2017-03-05 08:06:21
【问题描述】:

我对数据库事务处理有疑问。

如果数据库在事务将一些数据写入持久存储但不是全部时关闭,他们如何解决这种状态?

(+) 具有自动重试逻辑的客户端如何处理数据库完成事务但在得到响应之前断开连接的状态?

感谢阅读。

【问题讨论】:

    标签: database transactions


    【解决方案1】:

    DBMS 崩溃恢复的常见解决方案是ARIES 算法中使用的解决方案。 简而言之,数据库维护一个write-ahead-log,所有修改都在应用之前写入其中。 崩溃后,恢复管理器撤消未提交的更改,并确保所有已提交的更改都写入磁盘。

    (+) 关系数据库的好处是它们提供ACID 保证。 由于durability 属性,客户端确定所有成功提交的事务都反映在磁盘上,因此无需以特殊方式处理 DBMS 崩溃情况。

    【讨论】:

    • 有办法控制吗? / 1) 请求事务客户端 -> DB / 2) 在 DB 中处理事务 / 3) 在获得事务响应之前断开客户端 / 4) 客户端尝试重新连接到 DB / 5) 客户端重试请求事务 / => 事务被请求两次。 (两个请求->两个事务)/有没有办法防止这种情况? /我认为解决这个问题的唯一方法是在重试请求之前检查。 / 但它很重。
    • 我认为你是对的。在您的场景中,只有数据库知道事务是否成功,因此客户端知道是否需要重试的唯一方法似乎是询问数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2021-09-24
    • 2010-12-02
    • 2018-11-19
    • 2016-07-18
    • 1970-01-01
    相关资源
    最近更新 更多