我的问题与this question相同 - 但稍微补充一点。我的问题是我的网络应用程序的用户可以创建新版本的记录。每个新版本的记录都会在50个其他相关表中创建相应的“新版本”,以记录对该特定版本的个别更改。这种涉及约50个表的新版本的创建在事务中运行(在发生错误时回滚所有更改)。很多时候这个过程很慢,可以理解的是由于涉及太多表“插入”的“冗长交易”。
我正在寻找一个更好的解决方案/设计来实现这样的场景。
版本控制查询现在运行大约10秒钟,但有时会变得更糟。任何想法都表示赞赏
答案 0 :(得分:1)
您是否必须实时返回“已创建”或“已失败”的消息?以下对您的解决方案来说也可能过度,但它确实创建了可扩展的解决方案。
Web服务器可以发布请求操作的消息(到某种队列)。此时,用户可以继续使用该站点来执行其他操作。后台的Windows服务可以处理消息(在网站的上下文之外),然后通过用户(通过网站内的消息,类似于堆栈溢出通知)或通过电子邮件通知用户任务已运行或失败。
如果您可以近乎实时地进行解耦处理,那么您可以修改您的Windows服务以进行扩展。您可以拥有一个线程池来管理请求 - 所以也许您一次只能运行5个线程来限制负载。如果遇到更多性能问题,可以扩展并开发一个可以拥有2个或更多队列处理器的系统(这会增加它自身的问题/复杂性)。