4

我們很高興ASP.NET MVC框架和SQL Server的用戶,目前使用的是LINQ to SQL。它滿足了我們的需求,面向消費者的應用程序每月約有140萬用戶和2百萬活躍用戶。在生產MVC/SQL應用程序中記錄大量操作

我們期待已久的日誌開始記錄全部用戶操作(文章瀏覽,我們網站上的搜索等),我們正在努力確定正確的架構。

我們希望歸檔系統成爲自己的實體,而不是存儲生產文章和搜索引擎的主要SQL集羣的一部分。我們希望它是它自己的SQL集羣,最初只有一個盒子。

爲了簡化這個問題,我們假設我們只是想記錄這些月數百萬用戶進入我們網站的搜索條件,我們希望以儘可能少的週期密集的方式進行。

我的問題: (1)是否有異步方式將搜索項轉儲到遠程框? LINQ是否支持異步? (2)你會建議在RAM緩存中建立一個說1000(userId,searchTerm,date)日誌項的緩存,然後每隔一段時間將這些緩存刷新到數據庫?我認爲這種方法會減少打開/關閉連接。

或者我在想這個完全錯誤?我們希望在易於實施和穩健性之間取得平衡。

+1

此線程可能有幾個好爲你解決, http://stackoverflow.com/questions/752456/asynchronous-logging-to-a-database-net – 2011-12-31 22:56:08

回答

0

1)當然你可以,有不同的解決方案來實現它。 Linq不是你需要的工具。 2)這樣做不應有任何重大改進,只有在執行搜索時纔會觸發「日誌記錄」。你最終會得到兩個電話而不是一個電話,而不是一個大問題。

一個建議是使用AOP

您可以使用Postsharp用於記錄一個乾淨的和獨立的層(有其他選擇,雖然)。只有當您需要跟蹤傳遞給操作的內容時,您纔會使用所需的日誌記錄屬性裝飾您的操作。 這種計算策略主要優點是:

  • 錄入邏輯不在於你的代碼中(你不需要改變你的方法的代碼),但你的方法後,之前執行/。
  • 清晰地將目標與目標方法分開。
  • 您可以輕鬆地打開/關閉方面

AOP特別是當它涉及到的是可以添加到一個以上的方法,如日誌,認證等行爲的普遍做法。是的,它可以以異步方式使用。

0

1)我建議你創建一個HttpModule,以「捕捉」用戶使用的所有搜索詞。你將如何以及在哪裏轉儲這些信息(你說你會使用一個SQL框),這是另一個不在模塊範圍內的事情,它應該抓住搜索引擎。 然後,您可以創建一個包含登錄到存儲使用異步調用這些信息的組件(或者甚至第三部分成分像log4net的)

2)如果你想創造一種批量插入的緩存,你需要的所有信息存儲和在某些時候轉儲他們在SQL我會使用MSMQ或任何其他技術,支持Reliability:我想你想在系統崩潰的情況下,鬆散的所有這些信息等