我在表中有大约12,000,000个产品,并希望在Rails中构建嵌套哈希。我将此输出为JSON给客户。
该表只有几列:date_time,country,category1到3
目前我这样做:
products = Product.where("date_time > now()").select(:date_time, :country, :category1, :category2, :category3).group(:date_time, :country, :category1, :category2, :category3).order("date_time asc")
products.collect{ |m | m.category1 }.uniq.collect{ |s| {
:category1 => s, :active => false,
:category2s => products.select{ |l| l[:category1] == s }.collect{ |l| l[:category2] }.uniq.collect{ |l| {
:category1 => s,
:category2 => l, :active => false,
:country => (products.select{ |lc| lc[:category1] == s && lc[:category2] == l }.first[:country] rescue nil) || 57,
:category3s => products.select{ |e| e[:category1] == s && e[:category2] == l }.uniq.collect{ |e| {
:category1 => s,
:category2 => l,
:category3 => e[:category3], :active => false,
:date_time => (products.select{ |mc| mc[:category1] == s && mc[:category2] == l && mc[:category3] == e }.first[:date_time] rescue nil) || ""
}
}
}
}
}
}
加载产品大约需要25ms,这是可以的,但生成哈希大约需要15-20秒,具体取决于负载等等。
加快这一步的最佳方法是什么?