2015-03-31 76 views
1

我有一個包含「模塊」的大型應用程序,如FinanceHRSalesCustomer Service存儲過程的位置是否影響其性能?

爲了使應用程序易於管理並分配負載,我決定在每臺服務器上爲每個模塊提供自己的數據庫。還會有一個用於存儲主要信息的數據庫,例如有關用戶的信息,一些全局查詢表和一些安全性內容。

我現在正在嘗試決定是否將模塊特定的存儲過程放置在其相應的數據庫中,還是將它們全部保存在Master數據庫中。例如,存在名爲dbo.sales_customer_orders的存儲過程,該存儲過程僅從Sales數據庫表中選擇數據。當然這個SP將會被用戶執行很多次。因此,它應該在Sales數據庫中,還是在性能/可伸縮性/可靠性/安全性方面保留在Master數據庫中可以。

存儲過程駐留在與其選擇的數據庫不同的數據庫中嗎?

+0

在將它們放入不同的數據庫之前,您是否考慮過每個模塊的獨立模式? – 2015-03-31 22:10:38

+0

是的,我認爲是一個單獨的模式,但它意味着在1個數據庫中的所有模塊。它是一個多租戶應用程序,所以我不能冒險爲每個人和每個人都擁有一個單一的數據庫。隨着更多用戶添加到系統中,它會崩潰,所以我決定按應用程序區域(即模塊)「垂直分區」。這裏有更多的信息(看看方法5)\t http://blog.techcello.com/2012/07/database-sharding-scaling-data-in-a-multi-tenant-environment/ – 2015-03-31 22:12:52

回答

1

根據我的經驗,通過在多個數據庫之間分割數據,您不會經歷立即的性能損失,而這在大型n層應用程序中實際上是一種常見做法。將數據庫移至不同服務器時,您顯然會遇到一些輕微的處罰。

您可以在網站上看到這個blog post以及其他幾個關於正確分片數據的方法,以及使用多個連接字符串進行讀取和寫入的重要性,以便稍後進行擴展和可能的緩存層。

+0

那會更好嗎?該模塊數據庫中每個模塊的SP。因爲如果數據庫要移動服務器,每個數據庫中的SP不需要更新以包含新的服務器名稱。他們仍然可以引用自己的數據庫名稱。例如。它始終是'select * from [sales]。[dbo]。[orders]'即使服務器發生變化 – 2015-04-01 11:39:12

1

您是如何計劃開發所有這些數據庫的?如果你想使用SSDT,你會被所有這些跨數據庫依賴關係淹沒。此外,如果某個特定客戶決定不購買銷售模塊(並且周圍沒有銷售數據庫),那麼您的有問題的程序位於數據庫head中是沒有意義的。在這種情況下,調用它會導致一些非常不愉快的和意想不到的後果,例如批處理被中止以及(可能)事務處於打開狀態。

保持類似的東西在一起;否則,你的方法將沒有模塊化。

性能方面,通常在同一個SQL Server實例內的跨數據庫調用沒有區別。但是,如果您的碎片位於不同的實例上,結果可能介於「稍微明顯」到「有害」之間的任何地方 - 它取決於許多因素,並非所有這些因素都可以通過DBA緩解。

+0

感謝Roger的意見。SP將位於「head」數據庫中,但對於那些沒有「Sales」模塊的人來說,它的訪問將被拒絕。我認爲給予人們運行SP的權限比在數據庫級別更好地處理應用程序級別。 'head'數據庫只存儲組織和人員擁有的權限。 – 2015-04-01 11:32:24

相關問題