更有效的活动记录分组

时间:2014-08-15 16:26:16

标签: mysql ruby postgresql activerecord

我试图检查记录的2.5秒间隔,并根据计数将对象添加到数组中。这种方式有效但速度太慢。感谢

   @tweets = Tweet.last(3000)
   first_time = @tweets.first.created_at
   last_time = @tweets.last.created_at
    while first_time < last_time

      group = @tweets.where(created_at: (first_time)..(first_time + 2.5.seconds)).count
        if group == 0 || nil
            puts "0 or nil"
            first_id + 1
            array << {tweets: 0}
          else
            first_id += group
            array << {tweets: group}
        end
      first_time += 2.5.seconds
    end
       return array.to_json
end

1 个答案:

答案 0 :(得分:1)

您真正需要的是您检索到的记录上的group_by方法:

grouped = @tweets.group_by do |tweet|
  # Convert from timestamp to 2.5s interval number
  (tweet.created_at.to_f / 2.5).to_i
end

返回散列,其中键是时间间隔,值是推文数组。

您在示例中所做的事情可能会产生数以千计的查询。始终注意log/development.log以查看后台发生的情况。