支付交易与数据库交易
Payment Transactions vs Database Transactions
所以在支付处理中,你有支付交易这个概念。当支付或消息来自各种内部和外部接口时,支付交易就会被创建,可能是在一些关系数据库中的一些主要基础交易 table 中(至少为了这个问题)。然后交易有一些状态,通过一系列的编辑改变,直到达到几个最终状态(支付或未支付,批准或拒绝等)之一。
在处理数据库时,您当然有数据库事务,我的问题是,在数据库事务中处理支付事务有什么经验法则吗? 事务通常是许多其他 table 的聚合根,用于获取有关参与该交易的客户或持卡人或商家或速度设置的信息。
我可以看到一条规则说 "never process more than one payment transaction in a database transaction"。但我也可以看到数据库事务在执行批处理类型操作时是正确的,当您必须考虑整批事务的成功或失败时,因此您可以选择回滚。
正常的设计模式是遵循以下规则:使用数据库事务将数据库从一种有效状态转换到另一种有效状态。
在支付交易的上下文中,这可能意味着添加交易是一个数据库交易。然后,交易的每个处理步骤(如验证、履行等)将是另一个数据库交易。
I could see a rule saying, "never process more than one payment transaction in a database transaction"
出于性能原因或架构原因,您可以将多个逻辑事务放入一个物理事务中。这不一定是个问题。不过,您需要确保工作没有丢失,因为失败会中止整个批次。
所以在支付处理中,你有支付交易这个概念。当支付或消息来自各种内部和外部接口时,支付交易就会被创建,可能是在一些关系数据库中的一些主要基础交易 table 中(至少为了这个问题)。然后交易有一些状态,通过一系列的编辑改变,直到达到几个最终状态(支付或未支付,批准或拒绝等)之一。
在处理数据库时,您当然有数据库事务,我的问题是,在数据库事务中处理支付事务有什么经验法则吗? 事务通常是许多其他 table 的聚合根,用于获取有关参与该交易的客户或持卡人或商家或速度设置的信息。
我可以看到一条规则说 "never process more than one payment transaction in a database transaction"。但我也可以看到数据库事务在执行批处理类型操作时是正确的,当您必须考虑整批事务的成功或失败时,因此您可以选择回滚。
正常的设计模式是遵循以下规则:使用数据库事务将数据库从一种有效状态转换到另一种有效状态。
在支付交易的上下文中,这可能意味着添加交易是一个数据库交易。然后,交易的每个处理步骤(如验证、履行等)将是另一个数据库交易。
I could see a rule saying, "never process more than one payment transaction in a database transaction"
出于性能原因或架构原因,您可以将多个逻辑事务放入一个物理事务中。这不一定是个问题。不过,您需要确保工作没有丢失,因为失败会中止整个批次。