2012-03-30 96 views
0

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

问题:我很困惑我应该如何处理所有用户的警报。

目前我正在考虑对所有的lat1, lng1, lat2, lng2, user_id每小时运行一次的小时警报使用cron作业,另一个cron作业为每天运行一次的每日警报另一个表,例如下午9点。 cron作业将遍历所有单个用户的lat,lng对,它们定义google地图边界,并在主数据库中查询1小时(或1天)内发布时间戳的任何作业。如果有,则会发送电子邮件警报。

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

+0

警报如何添加到系统中?我想这是寻找处理数据的最佳方式的关键 – BenOfTheNorth 2012-03-30 01:34:43

+0

与此类似(http://www.crimemapping.com/subscriptions/Subscribe.aspx)。用户移动地图找到他喜欢的地点并按下按钮。然后将Google地图边界坐标保存到表格中,以获取每小时或每日警报。 – Nyxynyx 2012-03-30 01:36:06

回答

0

并非每次cron的运行(假设我读正确的是这是你在做什么)的时间来寻找的一切,我会考虑进行该检查时被添加警报:

警报加入系统。系统检查任何匹配边界,如果找到任何匹配的边界,则将每个匹配存储的信息放入单独的表中。在这张新桌子上粘上两个额外的栏,一个用于每小时一次,一个用于每天一次。

在小时检查中,只发送那些小时旗还没有被应用的人,并且每天发送那些没有设置每日标志的人。

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

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

0

我想你也许可以创建两个的cron这个频率

  • 按小时。
  • 白天。

(或任何你喜欢的频率)

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

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

请注意,这可能是不合法的,因为你用php标记这个问题,但只是如果你想知道,石英做到了你想要的,但它是在Java中。如果你愿意,你可以找到here

相关问题