Rails 3:将模型迁移到MongoDB

时间:2011-05-25 12:47:46

标签: ruby-on-rails ruby mongodb

我现有的Rails 3应用程序中有一些模型与应用程序生态系统中的其他模型完全不相关。底层数据非常大,从关系数据库(MySQL)转移到非关系文档数据存储(例如MongoDB)将会受益。我目前遇到的问题是模型在我的代码库中的几个地方使用Foo.create,Foo.new等进行实例化。我的问题如下:

  • 在Rails 3应用程序中并行使用MongoDB和MySQL的理想方式是什么?

  • 我应该在ActiveRecord.create上使用'ghost'方法作为我要迁移到MongoDB的模型,并在那里编写将其持久保存到其他数据存储的逻辑吗?这听起来非常脆弱,但这只是一个想法。

3 个答案:

答案 0 :(得分:3)

1)只需使用mongoid或mongo_mapper即可。两者都很棒!

2) NO! 将ActiveRecord 超类替换为mongoid或mongo_mapper。

关于多语言持久性的唯一困难是要记住单词多语言。不要过于复杂。继承ActiveRecord的模型映射到SQL-db,不继承它的模型不是。就那么简单。与继承Mongo-ORM类的模型相同,只有它们映射到MongoDB。

我使用postgreSQL和MongoDB(mongo_mapper)。每个人尝试的一个很棒的事情是在Mongo文档中存储错误。击败* .log文件。

最后的注意事项:在多个地方拥有Foo.create和Foo.new是代码味道,你应该根据DRY和SRL进行重构。只是一个友好的说明:)

答案 1 :(得分:2)

在ActiveRecord中有一些类没有固有的问题,而在Mongoid中有一些类,只是传输数据。

这是一个相当简单的例子,但在下面你仍然可以说@account.transactions

class Account < ActiveRecord::Base

  def transactions
    Transaction.where(:account_id=>self.id).all
  end

end

class Transaction
  include Mongoid::Document
  field :account_id, :type=>Integer

  def account
    Account.find(account_id)
  end
end

答案 2 :(得分:1)

看看mongoid,一个mongodb的运动员。它使用ActiveModel,并且可以像基于ActiveRecord的模型一样运行。一旦在模型中包含mongoid文档类,添加字段并配置它应该相当透明的连接。