2011-05-25 121 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