2011-02-05 71 views
2

我有以下情形快速的問題的最佳做法,特別是預計業績:如果我想查詢從包含示意地identital SQL數據庫的多臺服務器的數據查詢多個數據庫採用分佈式Web服務

,將有各服務器提供一種單一客戶端應用程序可以使用的Web方法是一種適當的(並且相對較快)的解決方案?

這些數據只需要在客戶端進行整合,其中幾個Web方法將不得不串行(或並行)消費,以便將數據提供給客戶端。每個服務器也將實施實體框架作爲一個ORM。

性能是我最關心的問題,當我們開始擴展到越來越多的服務器時,性能是否會變得過慢?

+1

在數據庫中不做「數據庫」工作的原因是什麼?也許使用像SSIS的東西。 – 2011-02-05 04:08:31

+0

你是什麼意思?對不起,我對這一切都比較陌生。數據庫是在哪裏鏡像/複製海誓山盟,還是有某種「主」數據庫來鞏固所有其他數據庫?如果是這樣,那是一個可能的解決方案,但我很好奇這個選項。現在我必須使用有限的資源。 – Sean 2011-02-05 04:13:28

回答

1

問題不是性能,是可靠性。由於您需要查詢以向客戶端返回響應的服務數量增加,因此可靠性會降低。假設您有99%的數據庫可用性(維護,修補程序和全年升級的總停機時間少於4天)。如果您需要查詢您的客戶看到的5個數據庫,並且實際可用性只有95%,那麼您的網站一年將近18天。在10個數據庫中,可用性爲90%(35天下降),50臺服務器直線下降至60%,這意味着您的站點無法使用。

這就是爲什麼這種擴展情景的驅動力是可靠性,只有通過數據庫的解耦才能實現。通常的訣竅是爲數據庫實現通信的異步消息傳遞總線,並且每個向站點發出的請求僅在其本地分片上連接,因此每次請求都從不查詢多個數據庫。

有關更詳細的說明,請參閱this presentation how MySpace uses a SQL Server based messaging buss to achieve scalability

這個SIGMOD 2009 Keynote展示了Facebook如何實現類似結果:Building Facebook: Performance at Massive Scale,使用memcached和MySQL分區。

0

如果您的示意圖中相同的數據位於不同的數據庫中,那麼您是否查看了表分區並將所有數據存儲在一個數據庫中?這可能有幫助。

在當前的情況下,我建議你獲取使用ORM/ADO.Net不同的數據庫服務器的數據,然後邏輯在應用程序中合併。

在SQL Server 2005中there are ways通過Web服務公開數據,但我不會建議,因爲Web服務本身會給你性能損失,因爲你跨越了應用程序邊界。