在我们的应用程序中,我们有一个名为'overlay'的概念,会更改用户帐户的行为,直到它过期。每个用户帐户可以包含零个或一个叠加层,这些叠加层将与数据库中的用户帐户一起保留。
用户可以激活覆盖(需要设置到期时间)并手动删除(如果它应该在其之前删除)到期)。覆盖的到期时间也可以更新。当移除覆盖(手动或由于到期)时,会触发事件,这会导致调用更多逻辑(例如,触发webhook)。
现在什么是自动从数据库中删除过期叠加层的好方法?该应用程序是使用Grails构建的,因此它可以使用Java框架,如Quartz。该应用程序在负载均衡器后面的多个AWS EC2实例上运行。该机制需要在应用程序重启后继续存在。
显而易见的解决方案是定期批处理作业,每隔X秒运行一次,扫描所有过期的叠加层,然后删除它们。下行是这个
是否有更多“事件驱动”方式,以便叠加层在到期后立即删除?我们有大约50,000个用户帐户。
答案 0 :(得分:0)
一种可能的方法是在使用时检查(并可能删除) - 即,当您从数据库中检索可能的覆盖时,检查它是否已过期并删除它(如果是的话)。
从技术上讲,您可以创建一个数据库过程来检查重叠的存在和过期,可能删除过期的记录,然后将正确的结果返回给用户。如果您隐藏存储用户(=您的应用程序)的到期日期的表(或列)并且仅允许通过该过程进行访问,则结果将为: