发送特定位置的电子邮件警报

时间:2012-03-30 01:30:48

标签: php mysql codeigniter google-maps cron

在网页上有一个谷歌地图,用户可以将位置更改为他感兴趣的位置,并通过按下按钮注册新作业的提醒。保存的兴趣位置将由谷歌地图的边界定义。每当新作业出现在该界限内时,将根据他选择的频率(每小时或每天)向该用户发送电子邮件警报。

问题:我对如何处理所有用户的所有提醒感到困惑。

目前我正在考虑将一个cron作业用于每小时运行一次的每小时警报的所有lat1, lng1, lat2, lng2, user_id,另一个表的另一个cron作业,每天运行一次,比如说晚上9点。 cron作业将遍历定义谷歌地图边界的所有单个用户的lat,lng对,并在主要jobs数据库中查询发布时间戳在1小时(或1天)内的任何作业。如果有,将发送电子邮件警报。

这对服务器来说似乎很多工作,特别是当数据库中有5000个用户的位置首选项和1,000,000个作业时。 (30分钟完成cronjob?)我被困在这里,希望你的意见。

2 个答案:

答案 0 :(得分:0)

不是每次cron运行时都搜索所有内容(假设我正确地读到了你正在做的事情),我会考虑在添加警报时执行检查:

警报已添加到系统中。系统检查是否存在任何匹配的边界(如果有),然后为每个匹配存储找到该信息到单独的表中。在这个新表中添加两个额外的列,一个用于每小时发送,一个用于每日。

在每小时检查中,只发送尚未应用每小时标志的那些,并且每天发送那些尚未设置每日标志的那些。

然后删除之后设置的任何地方。

这样做,你将完成从每个cron作业(所有警报,所有边界)的大量检查到每个警报的一个较小检查(一个警报,所有边界)的工作。

答案 1 :(得分:0)

我认为你可以用这个频率创建两个cron

  • 小时。
  • 白天。

(或您喜欢的任何频率)

为什么不在用户订阅某个位置时,在php codeigniter中创建一个包含此作业详细信息的任务文件,而不是为所有用户处理所有警报。例如,user_id,位置(坐标),频率。此任务文件的确切详细信息取决于 在您的情况下,您将需要分析到您的系统。然后将此任务文件放在目录中。

然后根据您在上面指定的频率,创建一个在频率中调用的通用php脚本。此脚本将循环遍历目录,处理任务文件并发送电子邮件。这样,您不必担心扫描整个数据库。还有一些小细节,如删除,更新,删除任务文件,但这完全与实现相关。

旁注,可能这是不可避免的,因为你用php标记了这个问题但是如果你想知道, quartz 正是你想做的,但它在Java中。如果需要,您可以找到here

相关问题