【问题标题】:Sending email alerts for a specific location发送特定位置的电子邮件警报
【发布时间】:2012-03-30 01:30:47
【问题描述】:

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

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

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

这对服务器来说似乎需要做很多工作,尤其是当数据库中有 5000 个用户的位置偏好和 1,000,000 个工作时。 (完成 cronjob 需要 30 分钟?)我被困在这里,想听听你的意见。

【问题讨论】:

  • 警报是如何添加到系统中的?我想这是找到处理数据的最佳方式的关键
  • 与此类似 (crimemapping.com/subscriptions/Subscribe.aspx)。用户四处移动地图以找到他喜欢的地点并按下按钮。然后将谷歌地图边界坐标保存到表格中,以便每小时或每天发出警报。

标签: php mysql codeigniter google-maps cron


【解决方案1】:

我不会在每次 cron 运行时都搜索所有内容(假设我没看错你正在做的事情),我会考虑在添加警报时执行该检查:

已向系统添加警报。系统检查任何匹配的边界,如果找到任何匹配的边界,则为每个匹配将该信息存储到单独的表中。在这个新表中添加两列,一列用于每小时发送,一列用于每日发送。

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

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

这样做,您将完成的工作从对每个 cron 作业(所有警报,所有边界)进行大规模检查,到对每个警报进行较小检查(一个警报,所有边界)。

【讨论】:

    【解决方案2】:

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

    • 按小时。
    • 按天。

    (或任何你喜欢的频率)

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-24
      • 1970-01-01
      • 2020-11-09
      • 2021-11-11
      • 2021-04-25
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多