【发布时间】:2012-12-11 19:13:30
【问题描述】:
我有一个嵌入了许多通知的用户模型,我必须遍历用户集合,然后他们遍历每个通知以删除或不删除它。
首先我遇到光标超时错误,然后使用这个步骤方法(我在某处读过)和“唯一”标准。我的实际循环代码是这样的:
per_batch = 20
users_targeted = User.only(:notifications, :slug).where(:notifications_count.gt => 40).asc(:slug)
0.step(users_targeted.count, per_batch) do |offset|
users_targeted.limit(per_batch).skip(offset).each do |user|
user.notifications.only(:_id).read.desc(:updated_at).skip(40).each do |n|
n.destroy
end
end
end
- 我正在使用 mongoid 2.4.8
- 用户集合约为 8k
- 每个用户最多有 300 条通知
现在,当循环在 3k-4k 用户上时,Heroku dyno 的内存超出其限制并且循环停止。
有人知道这个问题的解决方案吗?我必须做很多这样的循环,所以这对我来说有点麻烦。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 mongoid