每次调用我的Web API时都需要登录数据库。 现在我当然不希望每次通话都去我的数据库。
所以假设我的缓存中有一个字典或哈希表对象, 每10000条记录我就进入数据库。
我仍然不希望每10000个用户等待此操作。 自应用程序池以来,我无法为长时间操作启动不同的线程 基本上可以随时回收。
此方案的最佳解决方案是什么?
由于
答案 0 :(得分:0)
我认为你的耐久性观点相当不一致。由于应用程序池回收或服务器崩溃,您的10000个对象的缓存也可能随时丢失。
但是对于如何在不导致用户等待的情况下执行大型操作的原始问题:
对应用池回收设置约束并处理潜在的数据丢失。
定期将缓存的邮件转储到Windows服务以进行进一步处理。这仍然不是100%保证保存数据,例如服务/服务器可能崩溃。
使用消息队列(MSMQ),possibly with WCF。消息队列可以持久保存到磁盘,因此可以认为这相当可靠。
消息队列(MSMQ)技术使应用程序可以运行 跨异构网络进行通信的不同时间 可能暂时脱机的系统。应用程序发送消息 排队并从队列中读取消息。
消息队列提供有保证的消息传递,高效 路由,安全性和基于优先级的消息传递。它可以用来 实现异步和同步方案的解决方案 要求高性能。
更进一步......
根据您的要求和/或环境,您可能会消除缓存,并立即(并快速)将所有邮件写入邮件队列,而不用担心性能丢失或大型写入操作