选择更新等待网络操作?

时间:2016-05-31 13:22:33

标签: sql database multithreading postgresql

我正在实施在线商店。

我想知道是否可以使用select for update锁定订单记录 以下是我认为锁定的订单状态更改。

  • 付款处理:买家为订单付款,订单从waiting-for-payment转到paid
  • 订单取消:买家或卖家取消订单
  • 订单确认:卖家确认订单,以便买家不能再取消订单

例如,当买家取消订单时,卖家确认订单 如果没有锁定,买方可能会执行取消,卖方会同时确认订单 但是通过锁定,买方取消或卖方确认。

到目前为止,我的问题是这样的:锁定订单实例等待网络操作(支付处理)会产生过大的性能开销,即使它只是表中的一行?

我正在使用postgresql

1 个答案:

答案 0 :(得分:1)

您正在使用数据库锁定机制来实现业务逻辑。这是个坏主意。

而是引入[Transaction State]标志字段并对其进行分析以应用业务逻辑。当您可以拥有适用于每个州的多个不同的交易状态和复杂的业务规则时,这将实现业务场景的灵活性。

最好还使用事务处理历史记录表以及随时间变化的事务状态的完整日志。

<强>更新: 仅当状态与历史记录一致时,状态才会更改。如果付款失败,则无需支付订单,然后将其回滚。

对于每次更改,都应该在操作发生之前验证要求列表。检查购物篮中的商品客户确认的送货地址总价格是否高于之前要求付款的折扣。

有无限的订单状态更改方案,并且每个州的单独代码也包含整个历史记录是不切实际的。付款确认客户退货替换未送达的来自供应商的预订商品 >或任意数量的其他情况。

更好地跟踪每个订单的订单状态完整历史记录,以分析业务方案并相应地选择最佳下一步操作。