2011-02-02 23 views
3

我們在我們的數據庫中有一個大約2,500,000行(大約3GB)的表格。在技​​術上可以在使用WCF查詢此數據的Silverlight應用程序中查看此表中的數據嗎?可能,我發現最大緩衝區大小和超時錯誤的問題。我們可能需要將整個數據用於可視化目的。WCF性能

請指導我是否有解決此問題的實際解決方案。

+4

你需要在單個時間點顯示3GB的數據嗎?你知道Silverlight正在客戶端上運行嗎?只需嘗試通過網絡複製3GB文件,然後想象WCF會更慢 - 您會發現它不會以這種方式工作。 – 2011-02-02 11:22:01

回答

7

移動3GB到客戶端是行不通的。

用於可視化目的。

更好地準備可視化服務器端。這將足夠慢。

+0

是的,它會很慢。我們意識到。用戶希望谷歌的財務如圖表顯示過去35年的歷史數據..谷歌財務圖表也是互動的,這就是我們正在嘗試使用silverlight複製.. – JohnC 2011-02-02 12:23:40

2

首先,看看here

將3GB的數據從磁盤傳輸到磁盤可能需要幾分鐘的時間,更不用說穿越網絡。我認爲你有更大的魚來炒 - WCF限制在這裏是無關緊要的。因此,讓我們假設在幾分鐘/幾小時之後,您獲得了線路上的數據,您將它存儲在哪裏?如果在瀏覽器中運行Silverlight應用程序,則無法增長到3GB(即使是在64位計算機上),即使它可能,也沒有任何意義。特別是當轉換成對象時的數據量會佔用更多的空間。

這裏是我會做什麼:

  • 獲取服務器以提供有用的數據,例如快照/人次提供摘要,OLAP立方體,...
  • 對於每條記錄,提供所需的最小數據。
  • 如果你需要在每個記錄細節,這樣做在一個單獨的呼叫
1

嗯,我相信並建議你不會在同一個列表中顯示2,5百萬行。

如果您開發了一個良好的數據分頁,並且查詢數據的方式是最優的,那麼我不會發現WCF的問題。

我同意使用WCF接口查詢數據的效率低於獨立,直接訪問基礎架構解決方案的效率,但是如果您需要託管一些業務和數據以及N個客戶端來訪問SOA解決方案中的數據或這是一個客戶端 - 服務器解決方案,您需要確保您的查詢是高效的。

建議:

  • 使用的OR/M。 NHibernate將是您的最佳選擇,因爲它有很多調整性能的方法,並且由於它通過NHibernate 3.0中的QueryOver API提供的LINQ支持,分頁變得非常簡單。這個產品有一個非常有趣的緩存方案,它可以讓你的應用程序高效地將你的2,5百萬行數據庫可視化。

  • 做緩存。 NHibernate可能會在這方面爲你提供幫助,但考慮到這一點,根據客戶端技術(Web,Windows ...),你會發現緩存表示視圖(例如ASP.NET輸出緩存)的好選擇。

  • 想想你將如何序列化WCF中的對象:SOAP還是JSON?也許你會對JSON感興趣,因爲序列化對象足夠小以節省網絡流量。

如果您有任何疑問,請點評!

4

通常在這種情況下,如果您需要查看單個記錄,那麼您將使用分頁策略。所以你打給WCF的電話是一頁記錄,你會顯示這些記錄,用戶會點擊下一個/上一個按鈕或其他的。

至於可視化,您應該在服務器上執行一些轉換/縮減操作,因爲250萬條記錄類似於在屏幕上顯示每個像素的一個數據點。

0

好吧,在許多用戶談論你在技術上做了什麼之後 - 在沒有想到你在那裏的人有什麼感覺?

  • 250萬行在網格中沒有意義。零。每頁顯示80行(寬屏幕,傾斜90度),這將是31250頁的數據價值。你甚至不能腳本到特定的頁面。忽略加載時間 - 即使IF(!)加載等等,在網格中加入這個數量也沒有意義。過濾它,然後加載你需要頁面明智的。但這裏的關鍵是強制用戶過濾BEFORE甚至考慮網格。而一旦你愛他們,就不要陷入電網的表現。

  • 向您展示這是多麼糟糕。爲了獲得網格。如果您分配ONE PIXEL或每個數據項目,則需要1.33個1024 * 768像素的屏幕來顯示數據。這是每個項目一個像素。

所以,在這一天結束,即使(這是不可能的),以設法得到這個工作,你最終與非無意義/非可用applciation。