2012-06-28 75 views
7

我已經做了一些關於這個問題的研究(通過谷歌和這裏),但還沒有找到任何我覺得符合我的情況,所以問。多個數據庫或許多表嗎?

我有,目前有一個帳戶的一個項目 - 一個環境模型,並正在擴大到一個帳戶 - 許多環境。環境將是相同的(至少就表結構而言),並將需要大約100個表。我在兩種可能的方法之間徘徊:

  1. 使用單一的數據庫,表前綴以每個環境和前綴的帳戶表
  2. 使用很多數據庫分開 - 中央帳戶數據庫,和一個單獨爲每個環境(中央的可能會有其他中央的,一次性的數據,例如我們的論壇軟件的表格)

這兩種方法是否有任何顯着的性能收益/問題?數據將(至少現在)全部駐留在同一臺物理服務器上。查詢應該只需要訪問單個環境(除非是非常罕見的情況) - 當然還有主要賬戶記錄。

+0

發現此鏈接http://stackoverflow.com/questions/696682/mysql-many-tables-or-many-databases –

+0

此鏈接http://forums.mysql.com/read.php?125181078 ,181078 –

回答

3

有趣的問題。 作爲標準答案,我建議讓一個實例運行所有帳戶。即前綴解決方案。這是由託管服務提供商全面使用的方法。

讓一個RDBMS運行該節目似乎有意義。更容易進行備份和其他系統範圍的任務。我會建議就性能而言,一個實例運行將比爲每個帳戶運行單獨的進程更有效率。

如果您需要啓用負載均衡,'前綴'模型也可以更容易擴展,因爲大多數現代RDBMS都具有支持此類功能的插件/功能,而不必爲每個實例設置多次每個帳戶。

現代數據庫系統能夠輕鬆處理每秒數千個請求,並且不會因查看特製的表名(前綴)而出現性能損失。 只要你能想出一個簡單的層次結構(帳戶前綴)分隔帳戶的方式,你不應該有一個問題,運行成千上萬的表。

唯一潛在的缺點是安全性。並且在大多數情況下,即使有多臺服務器也不會解決您的安全問題。

0

我會說使用很多數據庫,以便爲各種環境的未來修改。如果沒有其他原因(如我之前所說)允許修改,那麼您是否在談論所有網站將使用的靜態數據,每個網站都應該擁有自己的一組數據...

3

我覺得這是簡單的,只管理一個數據庫。這將使開發和配置變得容易得多,因爲許多數據庫都擔心正確配置。

在性能方面,你可以讓DBMS處理集羣/分佈式的東西,所以你不必擔心。自己分解數據不會讓事情變得更快,因爲DBMS可以(通常)做得更好,然後就可以做得更好。

3

我們要在工作中的多個數據庫的事情 - 和不同的數據庫供應商(DB2,Oracle,MySQL等。)巨大的PITA,雖然有些疼痛可能來自每個數據庫是由不同的組擁有的事實。但是,如果您需要在數據庫(而不是應用程序)中加入數據(您認爲現在情​​況很少,但您等待......),您會後悔多服務器解決方案。

0

我目前正在從事的項目在這方面是相似的;一個帳戶適用於多個網站。

的解決方案,我已經走了委託認證,一個服務,提供有關身份驗證和核實的問題僅僅斷言交易。這也可以與授權相結合。要了解需要什麼,您可以查看OpenID項目以及OAuth2進行授權。

設置此項服務並不容易(儘管OpenID網站爲它提供了設置指南),但它確實可以靈活地將您的環境移出到不同的物理位置,而無需更改代碼。事實上,你甚至可以自由地保留單個數據庫,並且當它獲得更多的牽引力時,可以將一個環境移動到專用機器上。

相關問題