优化从表创建嵌套哈希

时间:2017-06-07 14:45:59

标签: ruby-on-rails ruby postgresql

我在表中有大约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秒,具体取决于负载等等。

加快这一步的最佳方法是什么?

0 个答案:

没有答案