2012-05-10 153 views
0

我有一個Rails控制器需要將一些數據寫入我的MongoDB。這就是現在的樣子。每次請求使用MongoDB進行身份驗證可以嗎?

def index 
    data = self.getCheckinData 

    dbCollection = self.getCheckinsCollection 
    dbCollection.insert(data) 

    render(:json => data[:_id].to_s()) 
    end 

protected 

    def getCheckinsCollection 
    connection = Mongo::Connection.new('192.168.1.2', 27017) 
    db = connection['local'] 
    db.authenticate('arman', 'arman') 
    return db['checkins'] 
    end 

可以根據請求使用MongoDB進行身份驗證嗎?

回答

1

數據庫中只有一個用戶嗎?

我會說:不要做數據庫身份驗證。如果MongoDB服務器支持一個好的防火牆,那麼它非常安全。它永遠不應該暴露在互聯網上(除非你知道你在做什麼)。

此外,請勿爲每個請求建立新的連接。這很貴。在啓動時初始化並重新使用它。

2

這可能是不必要的昂貴,並創建比需要更多的連接。

看看文檔:

http://www.mongodb.org/display/DOCS/Rails+3+-+Getting+Started

他們連接的初始化內。它執行一些連接池,以便重新使用連接。

+0

我已經看到這篇文章,但它爲MongoMapper DRM做,我沒有使用它。我仍然應該初始化我的數據庫連接使用初始化或可以使它作爲我的應用程序實例的成員? – Roman

+0

我仍然在初始化器內連接,是的。看看源代碼,它會連接池。 – d11wtq

1

一般來說,應該避免這種情況。

如果您對每個請求進行身份驗證並且同時收到很多請求,則可能會遇到與數據庫連接的所有問題。而且,創建和銷燬數據庫連接可能會耗盡數據庫服務器中的資源 - 它會將負載添加到服務器,您可以輕鬆避免。

最後,當數據庫連接沒有被釋放時,這種編程方法可能會導致問題 - 最終數據庫服務器可能會耗盡連接。

相關問題