gpt4 book ai didi

php - 避免双重预订/双重消费

转载 作者:行者123 更新时间:2023-12-04 08:24:05 25 4
gpt4 key购买 nike

我正在运行一个高吞吐量的应用程序,其中每秒都会发生许多类似拍卖的过程,并且预算是根据中标的出价来花费的。
然而,在出价和决定拍卖之间有一点延迟,所以开始发生的事情是这样的:

  • 相同的最高出价者在同一秒内赢得了两次类似的拍卖,但是两次拍卖的总出价超过了用户的预算,因此当第二次拍卖试图获得出价时,第一次拍卖已经得到它并且用户现在的余额为负数。

  • 我明白这是一个复杂的问题,但我想知道你的意见。
    关于我的应用程序的一些细节可能会提供对正确权衡的见解:
  • 出价通常比用户预算小得多,因此不允许用户花掉他们 5 美元预算的最后几美分可能不是什么大问题,但出价没有限制,所以实际上可能不会,有助于降低风险(可能适用于出价低的交易,但是一旦用户提出 3 美元的出价,预算仍然可以在一秒钟内从 5 美元变为 -7 美元,只需赢得 4 次拍卖比正常出价)。
  • 不允许高于某个预算比率的出价也是可以接受的解决方案,但这可能会极大地影响用户体验,并且出价/预算比率将相当随意。比例越低,预算越安全,用户体验越差,但仍不能保证不超出预算。
  • 预定某个时间的投标也是一种选择,但由于每秒有 10 万用户多次投标,预定所有投标和释放资金的解决方案可能会变得相当复杂
  • 简单地不为第二笔交易付费也可能是一个(相当糟糕和不公平的)解决方案,但它可能会限制滥用这个错误的动机。

  • 我意识到这些细节都是解决问题的直接尝试,但都不够好,我很好奇您的意见是什么,以及是否有更好的解决双花问题的方法。与为比特币协议(protocol)找到的解决方案不同,在我的情况下,“ cargo ”的交换是实时完成的,一旦没有更多可用资金,我就无法恢复它(在我的情况下, cargo 是网站访问,所以他们是瞬时的,在交易结算之前不能存储,不能延迟)。

    最佳答案

    这可能会奏效:更改赢得拍卖的规则。
    现在,我猜,如果用户在拍卖结束时出价最高,她就会赢得拍卖。您可以更改规则,因此用户必须既是最高出价者,又必须有足够的预算来支付出价。如果这两个条件都没有满足,那么具有足够预算的下一个最高出价者将获胜。
    这很容易向用户解释。 “要赢,你的预算需要足够多。如果你输掉了拍卖,你可以增加你的预算。”
    实现方面,您可以使用数据库事务来处理“赢”操作。在单个数据库交易中,借记获胜买方的预算并贷记卖方帐户。
    您可以像这样使用 SQL 序列:

    START TRANSACTION;
    SELECT budget
    FROM user
    WHERE id = nnnn
    AND budget >= bid
    FOR UPDATE;
    /* if you got a result do this */
    UPDATE user SET budget=budget-bid
    WHERE id= nnnn;
    UPDATE seller SET balance=balance+bid
    WHERE ID = sssss;
    UPDATE auction
    SET winner=nnnn, winning_bid=bid,
    closetime=NOW()
    WHERE auction = aaaa;
    COMMIT;
    /* if you got no result from the SELECT do this */
    ROLLBACK;

    关于php - 避免双重预订/双重消费,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65358310/

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