我知道这可能是一个广泛的问题,但是我一直在尝试找到正确的方法来做到这一点,而且我似乎什么都没走。
基本上,我在mongo中保存了一堆包含事件的对象,如下所示:
{
"date" : "2020-09-09",
"day" : 1599573600000 // epoch time
"from" : 1599595200000 // epoch time
"to" : 1599695200000 // epoch time
}
我需要在from
字段中指定的日期之前触发一些事件,例如发送提醒的SMS等。
我知道我可以写一份cron作业,并定期检查我的整个mongo集合,找到所有到期的,其余的都很明显。
但是,我觉得一定有更好的方法,因为在我们的数据库增长了数百万个事件之后,这可能会非常慢。
所以我的问题是,
1-除了cron作业之外,还有哪些其他选择。
2-在NodeJS中运行Cron作业与在Google App Engine(无服务器实例)中运行Cron作业之间有什么区别吗?
3-有没有人使用过的服务?
任何方向将不胜感激。
答案 0 :(得分:2)
我假设您正在尝试保留在GCP生态系统中。
为了实现可伸缩性,您可以使用cron启动Google Dataflow管道。使用此管道,您可以定义一个管道步骤,以针对与给定查询匹配的每个记录执行该步骤。数据流在处理规模时将增加工作人员的数量。
如果您的规模不那么大,那么Dataflow可能会有点沉重,并且对于您当前的用例来说可能会显得过大。如果是这种情况,那么您可以结合使用cron和google cloud任务,在其中每个记录入队/启动任务。对于大量记录,您可以按每批记录启动一个任务(即进样器模式) https://cloud.google.com/tasks/docs/manage-cloud-task-scaling#large-scalebatch_task_enqueues
另一种选择是仅使用Google云任务,即使用'schedule_time'
字段。最初将记录写入数据库时,您可以在此处排队任务,而不是定期查询以查看需要运行哪些任务
https://cloud.google.com/tasks/docs/creating-http-target-tasks
2-在NodeJS中运行Cron作业与在Google App Engine(无服务器实例)中运行Cron作业之间有什么区别吗?
我不确定第二个问题是什么意思,因为您可以在应用引擎中运行node.js。以我的经验,将所有内容保存在GCP中,效果会更好。