在注册过程中,我正在使用一个事务来包含帐户设置中涉及的所有操作,以便在出现问题时可以回滚它们。
发生的最后一项是结算流程,以便在付款成功时,调用提交操作以完成帐户创建,如果用户的卡被拒绝,我会回滚。
但是,我想知道最好的方法是将尝试计费的日志写入数据库,而不会保护其他数据库操作的事务“覆盖”特定的写入操作。这在MySQL中可行吗?有问题的日志表不依赖于任何其他日志表。由于在我们开始使用事务之前创建了传统的支付库,因此在回滚操作之后保持应用程序中的数据以将其写入是有些困难的。如果MySQL有解决方案,我想避免这种情况。
答案 0 :(得分:2)
我不会在这个目标中使用交易。您描述的操作似乎完全有权独立存在。
例如,发票有一个标题和一行或多行。您使用事务来确保不在数据库中存储不完整的发票,因为这将是一个应用程序错误:业务逻辑中没有任何情况,例如没有标题的一行。
然而,从业务逻辑的角度来看,拥有一个未经证实的帐户是完全合理的。客户可能更愿意了解情况,并能够提供另一种支付方式,而不是重新开始。
此外,对于如此漫长的过程使用事务需要保持与MySQL服务器的开放连接。如果您需要实现HTTP接口,则必须重新考虑整个逻辑。
简而言之,事务是防止应用程序错误的工具,而不是实现业务逻辑的机制。