【发布时间】:2011-08-22 15:25:12
【问题描述】:
我正在尝试制作一个提醒系统,并且我正在使用石英进行日程安排。但是我想出了几种可能的方法来做我需要做的事情,但我不确定最好的方法是什么以及如何测试它。
基本上我有一个提醒系统,用户可以设置提醒。它就像谷歌日历。您设置活动的日期和时间,然后通过说“提前 15 分钟提醒我”来设置提醒
所以你可以在 2011 年 5 月 10 日上午 9:59 举办一个活动,你可以说提醒我“15 分钟前”
那就是 5 月 10 日上午 10:44。
我将在托管环境中。 (我的站点和调度会在同一个环境甚至同一个解决方案中运行。所以它不会让浏览我站点的用户减慢很多。)
我也在使用 nhibernate 和 fluent nhibernate 来进行数据库查询。我正在为我的网站使用 asp.net mvc 3。
选项 1。
每分钟进行一次数据库查询,并获取应在该分钟内发出的所有提醒。这当然意味着每分钟查询一次数据库,对于共享环境来说可能过于密集。
选项 2。
每 5 分钟进行一次数据库查询,并获取应在该 5 分钟块内发送的所有提醒,并将它们存储在一个集合(即内存)中,然后每分钟检查哪些提醒需要发送出去。
这当然会减少完成的查询量,但不确定这是否会占用大量内存。
选项 3
与选项 2 相同,但每 15 分钟发送一次查询并存储在集合中。
这当然意味着更少的数据库查询,但更多的存储在内存中。
选项 4
每 15 分钟执行一次数据库查询,获取该块中的所有提醒并立即将其触发。
这意味着它们不会在内存中存储很长时间并减少查询量。但是,根据用户设置提醒的时间,电子邮件可能会比他们设置的更早到达。
例如,他们说在上午 10:44 提醒我。我会让我的调度程序从上午 10:00 开始,它会从上午 10:00 到上午 10:15,然后是上午 10:15 到上午 10:30,然后是上午 10:30 到上午 10:45。
因此,电子邮件实际上会比预期提前 14 分钟到达。
【问题讨论】:
标签: c# performance scheduling shared-hosting quartz.net