Перезапись данных в модели - PullRequest
2 голосов
/ 07 октября 2010

Я использую чтение таблицы из Oracle и запись данных в модель с использованием cronjob каждую ночь, чтобы это помогло мне кэшировать данные и повысить скорость. НО я использую метод create для записи данных в модель, которые создают новые записи, и я получаю дубликаты данных в моей модели каждый раз. Есть ли какой-либо метод в модели для обновления данных или перезаписи?

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

Ответы [ 2 ]

0 голосов
/ 10 октября 2010

Используйте create_or_update вместо create.

0 голосов
/ 08 октября 2010

Почему вы хотите сохранить модели?Это не поможет кэшированию.Вместо этого вам следует профилировать ваше приложение и применять методы кэширования, такие как 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 и, возможно, разделение базы данных.Может также стоить подумать о репликации master / slave на уровне базы данных, где ваша «медленная» база данных является master (все записи в базу данных идут к этому), а slave - «быстрая» база данных (все read читаются на это).Веб-приложения обычно привязаны к чтению, поэтому в вашем случае это поможет.Rails имеет поддержку для этого, см. Серия скриншотов NewRelic Scaling Rails о масштабировании ваших баз данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...