2008-12-28 135 views
1

我正在構建一個Asp.net MVC網站,我有一個快速的專用服務器的Web應用程序,但數據庫存儲在很多其他應用程序使用非常繁忙的Ms Sql服務器。非常緩慢的數據庫服務器的模式

另外,如果Web服務器速度非常快,則應用程序響應時間會很慢,主要是因爲數據庫服務器的響應速度較慢。

我無法更改數據庫服務器,因爲輸入到Web應用程序中的所有數據都需要在最後到達(出於備份原因)。

數據庫僅用於webapp,我想找到一種緩存機制,其中所有數據都緩存在Web服務器上,並且更新以異步方式發送到數據庫。

讀取數據庫數據和插入數據之間的直接對應關係並不重要:比如在StackOverflow上閱讀問題和插入後不需要立即顯示的新插入問題。

我以爲在慢速數據庫服務器和本地數據(可能是Sqllite或SqlExpress之一)之間交換和同步數據的WCF服務之間建立了一個WCF服務。

這個問題最好的模式是什麼?

回答

3

你的瓶頸是什麼?讀取數據或寫入數據?

如果您關心的是讀取數據,使用基於內存的數據緩存機制(如memcached)將成爲性能提升者,因爲大部分主流和最大的網站都是這樣做的。 Scaling facebook hi5 with memcached是一個很好的閱讀。同時實現應用程序端頁面緩存會丟失由應用程序觸發較低的數據庫加載和更好的響應時間所做的查詢。但是這對數據庫服務器的負載沒有太大的影響,因爲你的數據庫有一些其他的重量級用戶。

如果寫入數據是瓶頸,那麼實施某種異類中間件存儲服務似乎是必需的。如果你在前端服務器上有快速和慢速的響應定時數據存儲,那麼使用像mysql或postgresql這樣的輕量級數據庫存儲(可能不是那麼輕量級);並且使用你的真實數據庫作爲你的站點的從屬複製服務器是一個很好的選擇爲你。

+0

如果瓶頸是寫作,那麼你需要知道DB服務器是否可以跟上Web應用程序在一天的過程中。如果不是這樣,那麼數據庫服務器就永遠不會與您一起擴展。如果可以的話,那麼你有機會。但爲什麼數據庫機器如此緩慢?擔心! – 2008-12-28 23:34:43

1

我會做你正在考慮的。爲應用程序使用另一個數據庫,並僅將其用於備份目的。

0

有許多複製技術應該給你適當的結果。通過在配置的'web'端安裝SQL Server實例,您可以選擇:

  • 從Web端(發佈者)向數據庫服務器端(訂閱者)進行快照複製。您需要在Web服務器上安裝SQL Server的付費版本。我從未參與過這種配置,但它可能會在預定的同步時間使用大量Web服務器資源
  • 在數據庫服務器端(發佈服務器)和Web端(授權服務器)之間進行合併(或事務處理,如果請求) )。然後,您可以使用MS-SQL Server的免費版本,並根據您對網絡服務器宕機後數據丟失的容忍度來計劃同步過程。
0

我不知道是否可以改進它在您的Web端添加一個MDF文件,而不是處理其他IP中的Sever ...

只需添加一個SQL 2008 Server Express Edition文件並嘗試,只要您不傳遞4Gb的數據就行了,當然還有更多的限制,但僅僅爲了它的速度,爲什麼不嘗試?

0

您還應該考慮涉及的網絡交換機。如果數據庫服務器正在與多個Web服務器通信,那麼它可能會受到網絡連接速度的限制。如果他們只通過100mb的網絡交換機連接,那麼你也可以考慮升級。

0

WCF服務對於這個問題將是一個非常糟糕的工程解決方案 - 爲什麼在您可以使用標準SQLServer連接機制來確保數據正確傳輸時自己創建。日誌傳送將以選定的時間間隔發送數據。

這樣,你就可以得到本地的快速sql服務器,並且數據在慢速備份服務器中正確保存。

儘管你應該調查一下慢速sql服務器,但是性能問題可能與它的負載沒有任何關係,更多的與你要求它使用的查詢和索引有關。

1

我有這個問題一次,我們決定去數據倉庫的組合(即每隔一段時間從數據庫中提取數據並將其存儲在單獨的只讀數據庫中)以及通過Windows進行消息排隊服務(更新)。

這令人驚訝的效果不錯,因爲MSMQ確保可靠的消息傳遞(更新沒有丟失)和數據倉庫確信,在本地數據庫是可用的數據。

雖然它仍然取決於一些因素。如果您有大量數據要傳輸到您的Web應用程序,則重建倉庫可能需要一些時間,並且您可能需要考慮數據複製或事務日誌傳送。此外,在倉庫重建並處理消息之前,更改不可見。

另一方面,這個解決方案是可擴展的,並且可以相對容易實現。 (您可以使用集成服務將數據拉到倉庫例子,用於處理變化的BL層)。