我需要顯示給定類別的結果數量,並隱藏任何不給出結果的類別。如何使用每個類別的結果數量來構建搜索?
例子:This Yahoo!Jobs page顯示結果的類別,如城市,職位類別,經歷數等
我在C#/ Asp.Net,怕的工作,我們的服務器將不嗆一些嚴重的緩存和SQL優化。
你會如何繼續創造這樣的解決方案?
我需要顯示給定類別的結果數量,並隱藏任何不給出結果的類別。如何使用每個類別的結果數量來構建搜索?
例子:This Yahoo!Jobs page顯示結果的類別,如城市,職位類別,經歷數等
我在C#/ Asp.Net,怕的工作,我們的服務器將不嗆一些嚴重的緩存和SQL優化。
你會如何繼續創造這樣的解決方案?
我認爲你必須深入瞭解你的設置的更多細節。你在使用ORM嗎?數據是否已經在內存中?請求如何進入?你特別關心的是什麼?你有沒有做過任何分析,以確定這確實是一個問題? 我不能強調最後一個。確保您在嘗試尋找解決方法之前所擔心的是一個實際問題。
然而,爲了試圖回答,如果你做這樣的事情
_categoryRepository
.Where(category=>category.Matches(query))
.Select(category.Items.Count())
COUNT(),將只對其中category.Matches(查詢)返回true類別執行。
我正在建立一個7年的解決方案,沒有ORM,沒有對象,只有普通的舊數據集。行的總數很大(10K),所以不能將所有數據保存在內存中。重構/重建使用DDD/linq會很好,但沒有時間。所以..就我而言,我需要爲每個類別項目在每個類別中添加一個查詢(select count(*)where city =='[city]')。對於每個主要查詢,實際上會有數百個「計數查詢」 - 這是我最擔心的問題。這個網站今天很慢,所以即使沒有分析完成,我也可以猜測結果。 – comichael 2009-09-08 00:16:07
@comichael - 只有少數選擇的解決方案很少。如果您願意使用的唯一東西是SQL,那麼唯一可用的解決方案就是緩存。至少構建一個隱藏原始SQL的類別存儲庫類 - 在該級別緩存將更容易。此外,即使網站速度緩慢,您也應該進行配置 - 您是否確定數據庫是瓶頸?在asp.net應用程序中,它通常是別的東西。 – 2009-09-08 13:39:12
Relational databases are not suited for that kind of stuff。這只是工作的錯誤工具。相反,看看Lucene,Solr,Sphinx等
我個人建議Solr,它很容易上手,並與SolrNet你可以寫在一個few lines of code層面的ASP.NET應用程序。
聲明:我是上述圖書館的作者。
這些計數完成的典型方法是通過緩存。該模型在插入到相關表中時具有觸發器,然後使用「CurrentCount」更新計算字段。
您可以將更多級別的緩存添加到應用程序本身,以便計數每隔幾個小時或類似時間纔會增加。
這比每次實際計算所有行都好得多,但這確實意味着您需要事先知道要計算的數據類型,因此您可以預先計算它。
你正在使用什麼類型的數據庫? Oracle,MySQL等 – Partial 2009-09-08 02:26:18
請參閱我的評論George Mauer的答案在下面。 – comichael 2009-10-12 06:22:59