首先,我喜歡LINQ TO SQL。它比直接查詢更容易使用。LINQ to SQL在高負載頁面上的替代方案
但是,有一個很大的問題:它不適用於高負載請求。我在ASP.NET MVC項目中有一些動作,每分鐘調用幾百次。
我曾經在那裏有LINQ to SQL,但由於請求數量巨大,LINQ TO SQL幾乎總是返回「行未找到或已更改」或「X更新失敗X」。這是可以理解的。例如,我必須在每次請求時增加一個值。
var stat = DB.Stats.First();
stat.Visits++;
// ....
DB.SubmitChanges();
但是,當ASP.NET正在處理這些// ...指令時,存儲在表中的stats.Visits值發生了變化。
我發現了一個解決方案,我創建一個存儲過程
UPDATE SET的統計資料的訪問的訪問= + 1
它工作得很好。
不幸的是,現在我越來越多了。並且它爲所有情況創建存儲過程。
所以我的問題是,如何解決這個問題?有什麼替代品可以在這裏工作嗎?
我聽說Stackoverflow與LINQ to SQL一起使用。它比我的網站更容易裝載。
但是,這種解決方案不適用於這種計數訪問的特殊問題:無論採用何種解決方案策略,您最終都會丟失(即不計算)某些訪問。 – 2010-05-06 01:37:58
@Fyodor:恰恰相反,你讀過最後兩段嗎?如果您的應用程序將數據附加到事務表中,則永遠不會丟失任何更新,因爲您從不更新,只能插入。 – Aaronaught 2010-05-06 01:40:13
在我提取答案的初始版本後,最後兩段文字被添加,所以我沒有機會閱讀它們。現在我已經閱讀了他們,我必須反對:這是一個有問題的解決方案。儘管在某些情況下它可能是可以接受的,但保持全部操作歷史的總體策略也是要求麻煩的。當你必須實施某種歷史歸檔和彙總聚合時,時間將不可避免地到來。這意味着你必須事先考慮它,否則你註定要失敗。這大大增加了複雜性。 – 2010-05-06 01:50:18