2011-05-25 80 views
2

我现有的Rails 3应用程序中有几个模型与应用程序生态系统中的其他模型完全无关。底层数据非常庞大,它将从我的关系数据库(MySQL)移动到非关系型文档数据存储(如MongoDB)中受益。我现在的问题是,该模型是在我的代码基础的几个地方使用Foo.create实例,Foo.new等我的问题(一个或多个)如下:Rails 3:将模型迁移到MongoDB

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

  • 我应该在ActiveRecord.create上使用'ghost'方法来为我想迁移到MongoDB的模型编写那些将其保存到不同数据存储的逻辑?这听起来很脆弱,但这只是一个想法。

回答

3

1)只要做到这一点,使用mongoid或mongo_mapper。两者都很棒!

2)不!用mongoid或mongo_mapper的超类替换ActiveRecord

关于多边形持久性的唯一困难是要记住单词polyglot。不要过度复杂化。继承ActiveRecord的模型映射到SQL-db,而不继承它的模型则不是。就那么简单。与继承Mongo-ORM类的模型一样,只有它们映射到MongoDB。

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

最后说明:在多个地方使用Foo.create和Foo.new是一种代码味道,您应该根据DRY和SRL进行重构。只是一个友好的说明:)

1

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

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