故事:
我们有一个MongoDB数据库,用于保存我们的用户,他们应该在24小时内采取某些行动,之后不允许这样做。
我们的解决方案:
我们创建了一个后台进程,可以读取所有用户帐户并检查24小时的时间跨度。我们每天晚上都会这样做 ONCE 。
问题:
我们无法阻止某些用户采取行动,因为在检查时,仅过了23小时(例如),这意味着那些用户将等待第二天检查以撤销他们执行该操作的能力。这是不公平的,因为用户不平等,而且我们的系统不一致。
解决此问题的最佳方法是什么?
答案 0 :(得分:0)
我绝对同意@JonnyHK,你应该只检查用户执行操作时的时间戳,所以:
或者,您可以每小时运行一次后台进程,或者每10分钟运行一次。然后,如果你错过任何东西,它将只在10分钟的小窗口生活。你可以只做一个mongo查询,只选择刚刚超过24小时的用户。您还没有提供编程语言,但User.where({ :timestamp.lte => 24.hours.ago }).each{ |x| x.lock_user() }
之类的东西。然后,假设您还在mongo中对timestamp
编制索引,则此查询对您的应用的影响最小。