gpt4 book ai didi

database-design - 多数据库交易

转载 作者:行者123 更新时间:2023-12-04 07:00:09 24 4
gpt4 key购买 nike

在我的PHP应用程序(使用symfony框架和Propel ORM构建)中,将记录添加到MYSQL数据库时,需要使用外部供应商提供的Web服务API更新外部MYSQL数据库。

问题是什么是维护数据库完整性的最佳实践。例如,如果第一次更新成功,而第二次更新不成功,则由于Web服务不可用,我必须能够

  • 回滚事务以进行第一次更新,或
  • 缓存对Web服务的调用,并保持对Web服务的调用,直到服务可用为止
  • 其他一些可以维护多个数据库完整性的技术。

  • 具体来说,我在寻找类似的语法
    void RootMethod()
    {
    using(TransactionScope scope = new TransactionScope())
    {
    try
    {
    SomeMethod();
    scope.Complete();
    CallWebService();
    }
    catch
    {
    scope.abort();
    }
    }
    }

    但不确定是否
  • 这是一个很好的技术
  • 或者像在C#中那样在symfony中可行吗

  • 你怎么看?

    编辑:有些人问我为什么需要进行两部分更新。这是因为我正在创建连接到现有后端应用程序的前端应用程序。而且我不想更改后端应用程序。因此不可避免地会有一些重叠。因此,需要同步数据

    另一个编辑:两个部分的事务必须一起完成,不希望执行cron作业来同步表

    最佳答案

    这将是棘手的。您需要2个阶段的提交才能获得可靠的解决方案,但这将需要大量工作来实现您的特定需求。

    也许实际上并没有一个好的解决方案。您是否在困难的性能约束下?通常,交易时间应该很短...但是也许您应该在网络服务调用前后保持交易开放?这将减少数据库的整体吞吐量(至少)……但是这可能是完全可以接受的。

    您展示的方法将在处理硬系统故障(电源故障,硬件故障等)时遇到问题。要解决此问题,您需要向主数据库中添加跟踪,并需要一个后台流程/启动流程来处理故障。做起来很愚蠢,但肯定是可能的。

    某些故障可能最终无法修复(第一部分成功,第二部分失败,第一部分无法撤消,因为另一个事务更新了相同的数据)。这完全取决于您的精确业务规则。会计系统将是最简单的,因为取消交易实际上是作为抵消记录而不是更新来完成的。

    祝你好运。

    关于database-design - 多数据库交易,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/560326/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com