2010-11-16 100 views
1

我有我的asp.net頁面上的大型數據集和數據網格。我打算讓用戶可以過濾原始數據集。什麼是最好的方法?我應該使用linq來過濾數據集或繼續使用sql,還是有更好的方法使用vb.net與asp.net。SQL過濾,哪種方法最好?

+0

聽起來好像你還沒有在這裏表達額外的需求。 (我不能使用分頁)。你爲什麼不告訴我們你想要做什麼。 – 2010-11-16 21:04:21

回答

4

......「這取決於」

你說你是在談論一個「大數據集」。

如果它真的很大,那麼你不應該顯示給用戶。您還應該考慮將其存儲在IIS中可能會降低性能。你想要一個小而快的頁面。所以我認爲它不好發送每頁50多條記錄給用戶(它總是取決於記錄是什麼)

你應該考慮創建一些SQL,它允許你在結果中做一些分頁,傳送那些。如果你想嘗試在代碼中對其進行分類,那麼你可能會在你的客戶端獲得大量的數據。而sql server的主要目的是對數據進行排序和存儲。所以讓它做他的工作。您還必須考慮使您緩存的任何數據無效,這可能會成爲一個挑戰。看看漂亮的LINQ函數,如Skip(30).Take(10)...

另一方面,如果你有一些是靜態的,那麼你可能會從客戶端上兌現它,或一個web服務。

+0

使用IIS會減慢頁面的速度? 和我不能使用分頁,但是如果我使用json或xml,因爲我需要使用數據集執行算術運算,例如有一個運行總計 – MyHeadHurts 2010-11-16 18:18:30

+2

將數據存儲在請求之間的IIS內存中將導致您的應用程序無法擴展,因爲您可能需要一次爲多個用戶保存數據。確保你加載測試你的解決方案。而查詢的開銷並不多。 如果您包含運行總計,那麼它是一個完全不同的問題......您詢問了有關篩選的信息,只有請求者知道要跳過多少項;) – 2010-11-16 18:25:18

1

什麼是最好的方法?

這將是主觀的說什麼是最好的方式。我可以說的是什麼會是一個壞方法:通過應用程序而不是SQL數據庫來執行過濾。因此,如果Linq將Linq表示爲實體,並且將查詢轉換爲SQL語句,以便過濾由數據庫執行,那麼就可以。如果你的意思是Linq到對象,那麼你正在過濾內存中,爲了做到這一點,這意味着你已經將整個數據集加載到內存中,這是壞的。不要將任何東西加載到屏幕上不需要/顯示的內存中。

+0

因此,加載頁面時加載所有值會更好。因爲我的gridview是在一個updatepanel。我可以調用另一個查詢並更新gridview。 – MyHeadHurts 2010-11-16 18:07:35

+0

和linq我的意思是使用linq過濾數據集。 – MyHeadHurts 2010-11-16 18:08:26

+0

僅當您要將它們顯示在屏幕上時才加載所有值。所以你的意思是Linq的對象。那麼,我個人更喜歡這樣做的SQL服務器(你也可以啓用緩存,以避免太多的數據庫)。 – 2010-11-16 18:08:45

0

嗯,我個人認爲,如果你已經擁有了內存中的所有數據,在內存中過濾它比在網絡上進行過濾要快。因此,你不會有最新的數據更新,除非你刷新它...

但正如Darin Dimitrov所說,如果你還沒有所有的數據,你應該只使用一個查詢,請求必要的數據。

0

通過回調SQL進行過濾可能很昂貴,例如自動完成樣式過濾。 通過調用回緩存數據的Web服務可以實現同樣的效果。

如果您有一組用戶點擊「搜索」的過濾器,那麼回調數據庫可能是合理的,以避免在Web服務器甚至客戶端緩存數據。

如果你有一個繁忙的數據庫,那麼你可能會回調不同的結果,所以這可以回到調用Web服務。

在這種情況下,我會考慮在沒有額外數據庫調用的情況下過濾Web服務。這樣說,如果你有很多客戶端,這可能會殺死一臺Web服務器。如果二級過濾器大大減少了數據集,那麼爲什麼要緩存呢?

不幸的是,這樣我想答案是沒有百達最佳途徑......

+0

我的問題是我一直想弄清楚vb.net(asp.net)中的Web服務,我不能。那就是我一直在嘗試做的事情http://stackoverflow.com/questions/4169158/json -string-from-vb-net-side-to-asp-net – MyHeadHurts 2010-11-16 18:10:55

+0

如果你能幫我解決這個問題,那就太棒了,我甚至試過了wcf – MyHeadHurts 2010-11-16 18:11:29

+0

@NEWprogrammer:對不起,我是一個數據庫猴子... – gbn 2010-11-16 18:12:51