users = User.find(:all)
Rails中
,從我的理解,它拉在從我的數據庫的所有用戶。
如果您有成千上萬的用戶記錄,這似乎很容易讓您的服務器的內存吃掉。這是真的?如果這是真的,有沒有一種方法來遍歷表中的數據而不殺死你的服務器?
users = User.find(:all)
Rails中
,從我的理解,它拉在從我的數據庫的所有用戶。
如果您有成千上萬的用戶記錄,這似乎很容易讓您的服務器的內存吃掉。這是真的?如果這是真的,有沒有一種方法來遍歷表中的數據而不殺死你的服務器?
由於導軌2.3可以使用find_each和find_in_batches:
User.find_each { |user| user.some_method }
將裝載1000個用戶的默認。您還擁有:batch_size選項來更改默認大小。
查找批類似,但它的陣列提供給塊,而不是單個對象:
User.find_in_batches do |users|
users.each { |user| user.some_method }
end
是的,這絕對是真實的。爲此目的可能會有一些「對象分頁」插件,但我從未考慮過它。
我知道的一件事是,像ActiveRecord這樣的ORM在默認情況下往往非常浪費。假設您只需要用戶的用戶名和用戶名,但用戶表中實際上有12列。默認情況下,ActiveRecord抓取所有12列,從而對數據庫和服務器的內存造成不必要的負擔。爲了消除在Rails 3的浪費:
users = User.select('id, username').all
我覺得梁2看起來像
users = User.find(:all, :select => 'id, username')
也許不正是你要找的,但是這切出我的不少瓶頸。
很好知道。 +1 – 2011-04-05 20:42:49
事實上,你的方法可以很容易地消耗大量的服務器資源。
作爲批量查找對象的替代方法,您可以使用幫助器will_paginate。
非常酷,這完全滑倒了我! – bioneuralnet 2011-04-05 19:39:48
正是我所希望的。優秀。 – 2011-04-05 20:42:04