2008-09-25 112 views
1

好的,首先讓我說我從未使用過這個控件,這也是我第一次嘗試使用Web服務。從SQL填充的Ajax自動填充擴展器

我的困境如下。我需要查詢數據庫以獲取某個列並將其用於我的自動完成。很明顯,我不希望每次用戶在文本框中鍵入另一個單詞時都會運行查詢,所以我最好的猜測是運行一次查詢,然後使用該數據集,數組,列表或其他任何內容來自動填充擴展程序。 。

我有點丟失任何建議?

+0

Web服務的任何幫助也會有幫助 – 2008-09-25 21:36:34

回答

2

爲什麼不跟蹤用戶在會話變量中執行的查詢,然後使用它來過濾任何進一步的結果?

防止數據庫重載的技巧我認爲真的只是限制自動更新程序允許更新的頻率,例如每2秒一次似乎對我來說是合理的。

我會做的是這樣的:存儲由查詢返回的當前列表服務器端的單詞,並將其綁定到會話變量。這應該基本上是我想的整個清單。然後,對於輸入的每個新單詞,只要存在原始單詞A,就可以過濾會話信息並將過濾結果吐出,而無需再次查詢。所以基本上,只有當字A改變時纔再次查詢。

我在PHP的意義上使用「會話」,你可能會用不同的術語使用不同的語言,但概念應該是相同的。

+0

我是序列化對象並將它們存儲爲會話變量的一個很好的粉絲。但是,如果查詢是用戶特定的,會話將會很好。如果它是應用程序範圍廣的,那麼最終會爲每個查詢存儲冗餘數據。 – 2008-09-26 16:09:29

2

這個問題取決於你的數據存儲是如何交易的。顯然,如果你正在尋找美國國家(一個數據集合,在應用程序的整個生命週期中不會真實改變),那麼我會緩存一個System.Collection.Generic List <>類型或者如果你想要一個DataTable。

您可以輕鬆設置您希望查詢的數據的緩存,使其依賴於XML文件或數據庫,以便擴展器始終查詢從緩存中轉換的數據對象,並且緩存對象僅在數據源變化。

1

RAM便宜,SQL是難度比IIS規模在內存中,因此緩存的一切:如果不是 太大,將其加載到合理 時間

  1. 整個數據源,
  2. 預先計算好的數據,
  3. 自動完成web服務響應。

根據您的自動填充所需的行爲和性能,您可能需要預先計算數據並創建針對閱讀進行優化的冗餘結構。使用像SortedList這樣的結構(當你需要......像select @ x ... where @ like @query +'%'),Hashtable,...

0

雖然緩存一切當然是一個好主意,要使用哪種數據結構是一個在這裏沒有完全解答的問題。 自動完成擴展器的最佳數據結構是Trie。 你可以找到一個很好的.NET文章和代碼here