2014-01-15 74 views
2

我有一個ASP.Net MVC 5網站。我的一個控制器有一個Search動作,它搜索數據庫中的商店列表。有效地跟蹤最新搜索

我想以某種方式跟蹤最新的搜索查詢並將它們顯示給其他頁面中的用戶。什麼我想到的是:

  1. 最直接的方法是保存查詢在搜索行動數據庫:我認爲這是不打數據庫爲每一個查詢是個好主意。
  2. 保存搜索操作的日誌,然後解析並顯示給用戶。這對我來說似乎有點骯髒!
  3. 將查詢保存在緩存中,並將它們每隔幾秒鐘或幾分鐘推送到數據庫。這對我來說似乎是最好的選擇。目前,我正在使用這個頁面點擊。我每次增加頁面的打擊次數,將其保存到緩存並將結果保存到數據庫。

有沒有更好的方法?你會建議哪種方法?

+0

的數據庫服務器您使用的?您想保留最新的搜索信息多久以及多少條搜索記錄? – juanreyesv

+0

我正在使用SQL Server 2008.另外我首先使用實體​​框架代碼。我想要最新的50個查詢。 –

回答

1

您是否考慮過在客戶端存儲搜索關鍵字? (HTML5 Web StoragelocalStoragesessionStorage根據您的要求)。然後,例如,您可以創建一個指向您的控制器的實際搜索操作方法的鏈接列表,如果用戶單擊它,由於結果可能已更改,搜索將再次執行。

如果你真的想在數據庫中存儲搜索查詢,我會建議使用存儲過程(Does Entity Framework Code First support stored procedures?),它可以包含歷史插入和實際搜索。

希望這可以幫助你


存儲過程實例:

CREATE PROCEDURE uspGetShopsByName 
       @Keyword nvarchar(30) 
    AS 
     -- Store the search in the history table 
     INSERT INTO [dbo].[SearchHistory] ([Keyword]) VALUES (@Keyword); 
     -- Execute the search 
     SELECT * FROM [dbo].[Shops] WHERE [ShopName] LIKE @Keyword + '%' 
GO 
+0

謝謝你的回答。我不想在網站上顯示用戶*他們的*查詢。我想向他們展示其他人一直在尋找的東西。你認爲我應該使用存儲過程在哪裏?因爲我問這個問題的主要原因是爲了儘量減少數據庫的開銷。 –

+0

我看到..我認爲你可以創建一個存儲過程來執行搜索,並在存儲過程中執行搜索之前,可以執行一個INSERT來將搜索保存在「search_history」表中 – juanreyesv

+0

I'我感到困惑,那麼我應該在那裏存儲這50個搜索**,然後將它們存儲在數據庫中? –