我需要爲ASP.NET應用程序放置一個定製的排序日誌系統。除其他外,它必須爲每個請求記錄一些數據。我想過兩種方法:在ASP.NET應用程序中,我應該緩衝每個請求的日誌條目並不經常提交嗎?
方法1:爲每個請求提交每個條目。例如:在每個請求中創建一個日誌條目並將其提交給數據庫(使用瞬態文件DbContext
)。我擔心這種提交會導致服務請求的開銷不夠好。
方法#2:緩衝區條目,定期提交。例如:創建日誌條目並將其添加到每個請求的併發緩衝區(使用共享鎖)。當超過該緩衝區的限制時,會獲得獨佔鎖定,緩衝的條目一次性提交到數據庫(使用另一個,也是臨時的DbContext
,僅爲每次提交創建和銷燬),並清空緩衝區。我知道這會使「提交」請求變慢,但這是可以接受的。我也知道,關閉/重新啓動應用程序可能會導致未提交的日誌條目丟失,因爲在這種情況下AppDomain將會更改,但這也是可以接受的。
我已經在我的要求中實施了兩種方法,我測試了它們,並儘可能地在本地環境中盡力處理它們。我還沒有部署,因此我無法在真實條件下測試它們。兩者似乎都工作得很好,但我不能得出這樣的結論。
這兩種方法哪一種最好?我很擔心在幾千用戶的峯值期間的性能。有沒有我不知道的陷阱?
可能取決於您的日誌記錄的詳細和頻繁程度。 –
好吧,幾千個用戶無需擔心。您正在討論使用DbContext並擔心批量插入性能。不會在一起......也許你應該重新考慮使用文件來做日誌記錄並事後將文件導入數據庫 – Pleun
@GeorgeJohnston只要冗長,每個條目不超過100個字節。我想知道,至少考慮採取第二種方法是否過分。 –