我一直在Linux平台上开发基于Java的企业应用程序,该应用程序的功能之一是在有请求(https)时生成/存储记录,并在到期后删除该记录。在任何给定时间,此应用程序可能必须维护多达200K条记录(在不同时间到期)。 在创建每条记录时启动Timer并在Timer回调中删除记录(当计时器到期时)是否是在到期时删除每条记录的最佳解决方案?如果这是最佳解决方案,那么在给定时间可以运行多达200K个Timer实例吗? 如果这不是最佳解决方案,那有什么可能的替代方案?
谢谢
答案 0 :(得分:3)
在创建每个记录时启动计时器并在Timer回调中删除记录(当计时器到期时)是在每个记录到期时删除每个记录的最佳解决方案吗?
几乎可以肯定地否!,而是运行一个后台任务,该任务定期(例如,每五秒钟一次)搜索过期的记录并删除。本质上,这是标记清除清除收集器(如Java使用的)。
答案 1 :(得分:0)
不,要使用队列。它不像理论计时器那样实时(也许)。 但是规模更好,并且控制更好。简单的message queues可用。
在简单情况下,也许对数据库执行一项定期任务是可行的; DELETE ... WHERE create_time < ?
。