2011-09-02 62 views
4

我即將完成構建一個簡單的基於訂閱的支持票據Web應用程序。我正在設置授權。但是因爲這將是我將要部署的我自己的Web應用程序,所以我想知道這一點。Rails的網絡應用程序:你打開一個單獨的數據庫每個帳戶打開?

你創建打開每個帳戶一個單獨的數據庫?

比方說,你有這樣的支持票的Web應用程序。你有一個和只有一個帳戶的所有者。帳戶所有者可以設置可以響應支持票據的代理。此外,還有一些客戶角色可以打開支持票。

因此,大家可以看到數據庫將包含用戶,支持票等。

什麼是最好的方式去?

1)爲整個應用程序創建一個數據庫?這樣,每次有人簽約,一切都加入到同一個數據庫與其他門票和用戶的數據和其他一切或...

2)每次有人報,創建每個帳戶申購一個單獨的數據庫。

我在想,也許選擇2號將是安全性和數據完整性的目的的最佳選擇。如果是這樣,你是如何解決這個問題的?

+0

看看ryan bates的cancan。它是一個偉大的授權寶石,可以與「角色」 – Msencenb

回答

6

這聽起來像你想要的是多租戶:

多租戶是指原則軟件架構,該軟件的 單實例的服務器上運行,服務於多個 客戶組織(租戶)。多租戶與多實例架構形成對比,其中針對不同的客戶端組織設置了單獨的軟件實例(或硬件系統 )。通過多租戶體系結構 ,一個軟件應用程序被設計爲虛擬分區其數據和配置,並且每個客戶機都可以使用定製的虛擬應用程序實例。 - Wikipedia article on Multitenancy

這篇文章,同時有點過時了是我怎麼會去這樣做的總體思路。 Simple Rails Multi-Tenancy。它乾淨而高效,並且不需要編寫你不需要的代碼。

4

你應該去選項#1。 2號(幾乎(有可能的情況下,它是好的,但我目前找不到))從來沒有一個選項。

你在安全方面的目的是正確的(某種意義上來說),但它也會產生很多其他問題,你必須考慮。

  1. 擁有爲每個用戶不同的數據庫是指對每個請求(記住,HTTP是無狀態),你將不得不開拓新的數據庫連接,做任何需要做的事情,然後關閉該連接再次,而不是使用Rails中的連接池。這對性能影響很大。

  2. 管理將是一個麻煩你有更多的數據庫。另外,在一臺服務器上安裝多個數據庫的確需要更多的資源,而不只是一個更大的數據庫。

  3. 你必須繞過Rails中的整個連接處理,因爲它通常是每個應用程序一個數據庫。爲特定模型更改數據庫很容易,但它增加了可能出錯的其他位置。

  4. Rails確實具有很好的功能,可以在同一個數據庫中對數據進行範圍劃分和處理,只是爲了提到這種用例。

相關問題