Базы данных Merging Rails

Я думаю, что вы можете использовать Redis здесь. Всякий раз, когда пользователь аутентифицируется, данные активности (json) могут напрямую сохраняться в redis, например:

import json
import redis

r = redis.StrictRedis(host='localhost', port=6379, db=0)
user_id = request.user.id
json_data = json.dumps(data)
r.set(user_id, json_data)

# delete key whenever the user logs out
r.delete(user_id)

Вы можете выполнять поиск, фильтрацию и т. Д. На основе этого json из Redis. Также вы можете хранить данные за определенное время. Пожалуйста, проверьте эту библиотеку для интеграции Redis.

5
задан hectorsq 3 October 2008 в 23:06
поделиться

3 ответа

Настроенный обе Ваших базы данных с записями в config/database.yml, затем генерируйте новую миграцию.

Использование ActiveRecord:: основа establish_connection для переключения между этими двумя базами данных в миграцию как это:

def self.up
  ActiveRecord::Base.establish_connection :development
  patients = Patient.find(:all)
  ActiveRecord::Base.establish_connection :production
  patients.each { |patient| Patient.create patient.attributes.except("id") }
end

YMMV в зависимости от количества записей и ассоциаций между моделями.

10
ответ дан 18 December 2019 в 12:03
поделиться

Если Ваши базы данных являются точно тем же (данные не требуют пользовательской обработки) и нет слишком многих записей, Вы могли сделать это (который допускает внешние ключи):

Непротестированный... Но Вы получаете идею

#All models and their foreign keys
tales = {Patients => [:doctor_id, :hospital_id],
         Doctors => [:hospital_id],
         Hospitals}

ActiveRecord::Base.establish_connection :development

max_id = tables.map do |model|  
  model.maximum(:id)
end.max + 1000


tables.each do |model, fks|  
  ActiveRecord::Base.establish_connection :development
  records = model.find(:all)

  ActiveRecord::Base.establish_connection :production
  records.each do |record|
    #update the foreign keys
    fks.each do |attr|
      record[attr] += max_id if not record[attr].nil?
    end
    record.id += max_id

    model.create record.attributes
  end
end

Если у Вас есть МНОГО записей, Вам, возможно, придется разделить на части, это так или иначе... делает это в группах 10k или чего-то.

5
ответ дан 18 December 2019 в 12:03
поделиться

BTW, вероятно, имеет больше смысла для этого быть граблями или capistrano задачей, а не миграцией.

0
ответ дан 18 December 2019 в 12:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: