gpt4 book ai didi

coldfusion - 我应该使用 cflock 还是不使用?

转载 作者:行者123 更新时间:2023-12-04 02:00:05 26 4
gpt4 key购买 nike

我想知道在这种情况下是否需要锁定我的表(我使用的是 Coldfusion 和 MySQL):

我有一张 table 叫 wishlists(memberId, gameId, rank, updateAt)成员将游戏存储在个人列表中的位置。
wishlists有一对多的members表,以及多对多的 games table 。许多成员在此列表中存储了许多游戏。这些游戏使用 int 字段进行排名。等级是特定于成员的,因此:

Member 1 can have itemId=1, rank=1; itemId=2, rank=2
Member 2 can have itemId=1, rank=1, itemId=2, rank=2
etc...

每个成员都可以通过删除项目或更改项目的排名来修改他或她的列表(例如 sendGameToTopOfList(), deleteItemFromList() )。这意味着每次对列表进行更改时,都必须再次对列表进行排名。我编写了一个名为 的单独函数rankList() 处理重新排名。它在“ deleteGameFromList() ”或“ sendGameToTopOfList() 之后触发;它执行以下操作:
1. Gets a memberWishlist query of all records @memberId ordered first by **rank ASC**, then **updateAt ASC** fields 
2. Loops through memberWishlist query and sets each row's **rank=memberWishlist.RecordCount**

updateAt 字段是必需的,因为如果将游戏移至列表顶部,我们将有两个项目排名第一,为了区分它们,我使用了 updatedAt。

场景一 :一个成员的列表中有 100 款游戏:
  • 成员将一个项目移动到顶部; rankList() 在操作完成后被调用。
  • 当 rankList() 仍在重新排列项目时,成员删除了游戏

  • 在正常的页面请求中,这很好,因为在 rankList() 完成之前页面不会重新加载。但是如果是ajax,或者如果使用cfthread,成员(member)可以在5秒内通过快速点击删除10场比赛。话又说回来,反正删除后列表会重新排序,所以可能没有关系;但似乎这是我应该保护的东西......

    场景二:
    通过使用名为“queuedForShipping”的附加字段,其中一些愿望 list 项目可以变成订单。如果 queuedForShipping 为 1,则 rankList() 函数将忽略它们。如果管理员正在创建货件,而成员刚刚删除了一个项目或将一个项目移到顶部,该怎么办?

    您的想法值得赞赏。

    附加信息:新项目在插入时自动排在最后

    最佳答案

    不会。CFLock 不会对 MySQL 的处理方式产生任何影响。

    但是,您可能需要交易。将您的多个操作包装在一个事务块中将告诉 MySQL 您希望在永久存储更改之前保证所有操作完成。

    这假设您的多个查询是在 CF 中生成的,如下所示:

    <cffunction sendToTopOfList()>
    <cfquery>
    send to top
    </cfquery>
    <cfquery>
    resort everything
    <cfquery>
    </cffunction>

    如果您在 db 服务器上使用存储过程,那么 (1) 我可能不会太担心这里的竞争条件,因为您可能会在服务器进行更改时应用行锁,并且 (2) 研究在如果您仍然担心,请访问数据库服务器。

    如果您还有问题,我会尽力回答,尽管我不是真正的 MySQL 专家,而且在过去几年中并没有经常使用它。

    关于coldfusion - 我应该使用 cflock 还是不使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4015098/

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