gpt4 book ai didi

java - 聚合/存储字段和异步作业

转载 作者:行者123 更新时间:2023-12-01 13:41:16 27 4
gpt4 key购买 nike

我有一个存储在数据库中的Coupon实体类,其阶段表示为枚举。

类似这样的事情:

enum CouponStatus {
CREATED,
PUBLISHED,
STARTED,
FINISHED,
RESULTSARRIVED,
POINTSASSIGNED,
MONEYPAID,
CLOSED
}

它还有一个 Game 实体的 @ManyToMany 列表,每个实体都有一个 Date 字段。 优惠券的状态应根据包含游戏日期而变化。

给你一个想法:

  • 初始状态为“已创建”。
  • 最早游戏状态日期之前两周已发布。
  • 最早状态变为“STARTED”之前 5 分钟。
  • 最新游戏开始三小时后状态为“已完成”。
  • 当所有比赛的结果将被插入到另一个表中时状态变为“RESULTSARRIVED”。
  • 等等...

根据状态我做不同的事情:

  • 仅当状态为“已发布”时,才会在优惠券列表中显示优惠券。
  • 当状态为“已开始”时,停止显示并停止接受投注。
  • 当状态为“已完成”时,向外部系统发送结果请求。

我看到了 3 种可能性:

  1. 根本不要使用状态字段。意味着我做不同的事情不是基于状态,而是直接基于游戏的日期字段。这样,每次我向用户显示优惠券列表时,我都需要获取优惠券的游戏。
  2. 每分钟运行一个作业来获取游戏并更改状态。
  3. 根据比赛日期的预期下一次状态变化,每次动态地运行和重新安排作业。

我显然不是第一个遇到此类问题的人。还有其他方法吗?此类事情的最佳实践是什么?

最佳答案

听起来#2 可能已经足够好了。如果您想要精确的 5 分钟,#2 和 #3 的组合可能会很方便。

另一种方法可能是管理内存中的状态(例如使用 Akka),并将状态同步到数据库或从数据库同步状态。每个 Coupon 都会有一个 Actor,如果您需要扩展到超出一台机器内存的范围,这些可以分布在一个大型 Akka 集群上。使用这种方法,每个参与者都可以安排下一次状态更改发生的时间,并自行管理。您还可以将传入的请求发送到 Akka,而不是发送到数据库。这完全取决于您的用例。

关于java - 聚合/存储字段和异步作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20754121/

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