Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于发送需要计算的每日、每周电子邮件更新的架构提示_C#_Email_Architecture_Web Applications - Fatal编程技术网

C# 关于发送需要计算的每日、每周电子邮件更新的架构提示

C# 关于发送需要计算的每日、每周电子邮件更新的架构提示,c#,email,architecture,web-applications,C#,Email,Architecture,Web Applications,我有一个web应用程序,它将根据用户权限及其警报设置(每日、每周、每月或无)每天、每周发送电子邮件更新 发送到一个帐户(可能有多个用户)的每封电子邮件都需要几次数据库调用和计算。因此,随着用户数量的增加,这些每日/每周的电子邮件变得非常昂贵 关于编写这些服务有什么一般性的提示吗?我在寻找一些架构技巧或模式,而不是像电子邮件可交付性这样的主题 如果必须处理非常大的信息集,我会在处理时间之前缓存数据,以便在特定时间从处理周期中省略DB“计算”。有效地中断处理,以便在预定的信息处理之前完成数据库密集型

我有一个web应用程序,它将根据用户权限及其警报设置(每日、每周、每月或无)每天、每周发送电子邮件更新

发送到一个帐户(可能有多个用户)的每封电子邮件都需要几次数据库调用和计算。因此,随着用户数量的增加,这些每日/每周的电子邮件变得非常昂贵


关于编写这些服务有什么一般性的提示吗?我在寻找一些架构技巧或模式,而不是像电子邮件可交付性这样的主题

如果必须处理非常大的信息集,我会在处理时间之前缓存数据,以便在特定时间从处理周期中省略DB“计算”。有效地中断处理,以便在预定的信息处理之前完成数据库密集型工作。当真的要发送这些电子邮件时,我想你可以快速处理大量邮件,而无需事先进行大量调整。当然,我也不知道我们在这里谈论的是什么样的音量

您还可以线程化应用程序,以便将处理数据进一步拆分为逻辑块,以减少必须同时处理的数据总量,这取决于您的情况,它可能会简化工作,当然,除非有充分的理由,否则我通常不建议进入线程化,你可能有一个。至少,使用后台工作者类型的线程化进程,并根据数据的分段方式启动一些线程化进程

在处理异常时,请记住现在让这些异常停止处理,通过某种形式的日志记录或通知处理它们,然后继续,您不会希望错误将事情搞得一团糟,以便进一步处理,我相信您可能已经计划好了

另外,异步发送电子邮件,这样它们就不会阻止处理,这可能是一个明显的习惯,但有时这样的小事会被忽略,并且在发送大量电子邮件时会造成相当大的瓶颈


最后,预先用一个合理的负载测试它,并检查是否有过多的容量。

您可能想查看sql reporting services

您可能需要将当前设置转换为sql报告格式,但作为回报,您将获得一个完整的管理界面,用于安排报告生成,允许用户修改报告输入,缓存历史/当前报告,并允许用户管理自己的电子邮件订阅


这就是这个数据库的全部用途吗?或者它也可以进行实时事务处理?数据库的大小约为20GB(增长迅速),也被web应用程序和其他一些后台应用程序使用(我们在数据库上存储和分析大量数据)。关于此设置的提示也很好。电子邮件的时间依赖性如何?进入电子邮件的内容是否需要第二次更新或更轻松?