将数据覆盖到模型

时间:2010-10-07 19:07:12

标签: ruby-on-rails

我正在使用从Oracle读取表格并使用cronjob每天午夜将数据写入模型,以便它可以帮助我缓存数据并提高速度。但我正在使用create方法在模型中编写数据来创建新条目,并且每次在模型中都会获得重复数据。模型中是否有任何更新数据或覆盖的方法?

  Model.each do |model|
      p = Model.create model.attributes
      p.save
    end

2 个答案:

答案 0 :(得分:0)

为什么要保存模型?它无助于缓存。您应该对应用程序进行概要分析并实现memcached等缓存技术。

但无论如何这里的代码只是读你的表:

Model.each {|model| Model.new model.attributes }

根据您的澄清更新:从一个数据库复制到另一个数据库而不重复可以这样做(假设Model1访问源数据库,Model2访问目标数据库):

Model1.each do |model1|
  model2 = Model2.find_or_initialize_by_id model1.id, model1.attributes
  model2.save!
}

然而,这不会处理删除。您可能仍希望查看memcached和数据库分片。也许值得考虑数据库级别的主/从复制,其中“慢”数据库是主数据库(所有数据库写入都是这个),而从属数据库是“快速”数据库(所有读取都转到此)。 Web应用程序通常是读取绑定的,因此它将对您的情况有所帮助。 Rails支持此功能,请参阅NewRelic's Scaling Rails Screencast Series关于scaling your databases

答案 1 :(得分:0)

使用create_or_update代替create