用户 <>友谊<> 从动
user has_many :followers, through: :friendships
follower has_many :users, through: :friendships
我需要插入最多500,000个“关注者”,我们有很多用户。总共将有几百万粉丝,约有500名用户。
我已经将所有内容删除到一个单独的交易中,这节省了一点时间 - 但是肯定还不够
ActiveRecord::Base.transaction do
new_usernames.each do |name|
follower = followers.find_or_create_by! username: name
# TODO
# do someting with follower
end
end
我有想法让它成为一个原始的单一sql语句,类似于:
ìnsert into followers(usernames) values(#{account.followed_by.join(","))
(用户名是唯一的,因此mysql会阻止双重帐户)
显然,我想念所有的协会。然后我想我可以做类似的事情 DELETE FROM friendships WHERE user_id = 1337
然后再次大量插入所有友谊。
INSERT INTO friendships VALUES (account.followed_by.map{|x| "(1337, #{x})"})
还有其他可能吗?