我有一个游戏,我正在尝试实施欢乐时光功能,如果您获得一定数量的积分,那么每天在特定时间段内您都会获得一些收益。玩家达到积分要求后,事件仅在一个小时内触发一次。
我尝试了几种不同的解决方案:
create context HappyHourContext
context InitCtx start (0, 16, *, *, *) end pattern[timer:at(0, 17, *, *, *) or TerminationEvent],
context PartitionCtx partition by playerId from EarnPointsEvent, playerId from TerminationEvent;
context HappyHourContext
insert into TerminationEvent select playerId from EarnPointsEvent having sum(points) >= 100;
这仅适用于第一个玩家,因为TerminationEvent不考虑分区。
以下查询似乎可以正常工作,但是它似乎效率很低,因为即使在事件输出后,它仍可以处理事件。
create context HappyHourContext
context InitCtx start (0, 16, *, *, *) end (0, 17, *, *, *),
context PartitionCtx partition by playerId from EarnPointsEvent);
context HappyHourContext
select playerId from EarnPointsEvent having sum(points) >= 100 output first every 1 hours
输出第一个事件后,是否有一种方法可以终止上下文?或更好的方法吗?
“分区依据”也接受“终止于”。 doc