Gie*_*ius 7 c# asp.net-mvc asynchronous entity-framework asp.net-mvc-3
我有一个非常快速/轻量级的mvc动作,这是经常请求的,我需要在重负载下保持最短的响应时间.
我需要做的是,不时根据条件向sql server插入少量数据(统计的日志唯一ID,~1-5%的查询).
我不需要插入数据用于响应,如果因为应用程序重启或smth而松开了部分数据,我将继续存在.
我想我可以在某种程度上排队插入并在后台进行,甚至可以进行某种缓冲 - 比如等待队列收集100个插入,然后在一次通过中制作它们.
我很确定,之前有人必须完成/看过这样的实现,没有必要重新发明轮子,所以如果有人指向正确的方向,我会感激不尽.
您可以通过控制器操作触发后台任务来执行插入(触发并忘记):
public ActionResult Insert(SomeViewModel model)
{
Task.Factory.StartNew(() =>
{
// do the inserts
});
return View();
}
Run Code Online (Sandbox Code Playgroud)
请注意,IIS可以随时回收应用程序,这将导致任何正在运行的任务.
我同意 @Darin Dimitrov 的方法,尽管我想补充一点,您可以简单地使用此任务写入计算机上的 MSMQ。从那里您可以编写一个读取队列并将数据插入数据库的服务。这样您就可以限制读取数据的服务,甚至将队列移动到另一台机器上。
如果您想更进一步,您可以使用 nServiceBus 之类的东西和发布/订阅模型将事件写入数据库。
归档时间: |
|
查看次数: |
4155 次 |
最近记录: |