MongoDB:如何根据我的数据库中的条目中的时间字段触发特定于时间的操作

时间:2015-11-15 14:29:33

标签: javascript mongodb

故事:

我们有一个MongoDB数据库,用于保存我们的用户,他们应该在24小时内采取某些行动,之后不允许这样做。

我们的解决方案:

我们创建了一个后台进程,可以读取所有用户帐户并检查24小时的时间跨度。我们每天晚上都会这样做 ONCE

问题:

我们无法阻止某些用户采取行动,因为在检查时,仅过了23小时(例如),这意味着那些用户将等待第二天检查以撤销他们执行该操作的能力。这是不公平的,因为用户不平等,而且我们的系统不一致。

解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我绝对同意@JonnyHK,你应该只检查用户执行操作时的时间戳,所以:

  1. 一旦用户开始24小时窗口,就将其对象的时间戳设置为当前时间
  2. 当用户尝试执行操作时,请检查当前时间减去其帐户上的时间戳,以查看其是否在24小时内
  3. 如果超过24小时,则禁止采取行动
  4. 或者,您可以每小时运行一次后台进程,或者每10分钟运行一次。然后,如果你错过任何东西,它将只在10分钟的小窗口生活。你可以只做一个mongo查询,只选择刚刚超过24小时的用户。您还没有提供编程语言,但User.where({ :timestamp.lte => 24.hours.ago }).each{ |x| x.lock_user() }之类的东西。然后,假设您还在mongo中对timestamp编制索引,则此查询对您的应用的影响最小。