-1

所以我有三个数据库,它们都有一些不同日期的数据。我想在每个月的特定日期发送通知。

我正在考虑创建一个每天运行的 cron,它每天都会查询表,如果表中的日期与今天的日期匹配,那么它将发送通知

我不确定这是否是有效的方法。

4

2 回答 2

1

您对“每天查询表格,如果表格中的日期与今天的日期匹配,那么它将发送通知”的描述是准确的。

主要选择是您希望在 Amazon EC2 实例上还是使用 AWS Lambda 上执行此操作。

亚马逊 EC2

您似乎希望每天发送一次通知。如果是这样,那么您可以每天激活一次 Amazon EC2 实例,完成必要的工作,然后停止该实例。这样,您只需为实例实际工作的时间付费:

  • 创建在每天给定时间运行 AWS Lambda 函数的 Amazon CloudWatch 事件规则
  • Lambda 函数将发出一个StartInstance()命令来激活 EC2 实例
  • 实例上的脚本将在启动时激活并进行日常处理
  • 在脚本结束时,它发出关闭命令以关闭实例

有关配置的详细信息,请参阅:EC2 实例完成任务时自动停止 - DEV 社区

这种方法的好处是没有时间限制。Amazon EC2 实例如果每天只运行一次,成本相当低。

AWS 拉姆达

AWS Lambda 函数可以执行相同的任务,但最长运行时间限制为 15 分钟。如果日常任务可能需要超过 15 分钟,则可以进一步细分:

  • 一个初始AWS Lambda 函数(由 Amazon CloudWatch Events 触发),用于查询数据库以识别要联系的用户
  • Lambda 函数可以针对所需的每项工作将消息推送到Amazon SQS 队列中
  • 另一个AWS Lambda 函数可以配置为触发 Amazon SQS 队列,该队列会通知消息中标识的用户。这个 Lambda 函数可以并行运行,所以消息会很快发出。

数据库

听起来您已经有一个数据库。我会推荐以下流程:

  • 该脚本(在 EC2 或 Lambda 上)执行数据库 SELECT 以检索所有希望收到通知的用户,其中last_notification(见下文)在所需的通知日期之前
  • 然后脚本通知每个用户(根据上述选项)
  • 数据库记录已更新,因此last_notification设置为NOW()

这样,如果脚本不是每天都运行,或者出现错误,系统就会知道需要通知哪些用户。这比假设脚本每天都能成功运行要好。

频率

如果您的功能实际上需要在特定时间(不仅仅是特定日期)发出通知,则脚本需要每天运行一次以上。

于 2020-06-06T00:19:03.347 回答
0

我假设您的“数据库”实际上是结构化文件,而不是真正的数据库。(您不解析真正的数据库。)

我还假设它们很大。即数万条或更多记录。)如果它们很小,那么解析文件的开销太小而无需担心。

基于这些假设,最有效的方法(就处理时间而言)是将数据保存在真实数据库中,并使用数据库查询来提取与每一天相关的数据。

另一方面,如果数据库不够大,最好的方法是简单的方法......供您实施。

于 2020-06-05T11:48:30.130 回答