[英]What is the best way to send reminders with mongoDB?
我想提醒用户他们需要削减。 间隔基于用户设置。 每次用户安排约会时,我都会更新时间戳。
Users
架构如下所示:
Users:{
reminder:{
[BarberID1]:{
interval:2, //in days
lastScheduled:1609090071 // timestamp when the user has scheduled an a appointment last time
}
},
[BarberID2]:{
interval:2, //in days
lastScheduled:1609090071 // timestamp when the user has scheduled an a appointment last time
}
}
}
}
目前,我每天使用 cronjob 获取每个User
一次,并检查每个用户是否需要发送提醒通知。
我不确定这个解决方案是否可扩展,所以我想我会在这里提出一个问题。
假设我有 10 万用户,每个用户至少有 3 个理发师。
谢谢!
PS:我在某处看到了mongoDB TTL
和change streams
的可能解决方案,但我不想在发送提醒后删除用户。
我会说没有太多细节:这几乎就是你这样做的方式。 当涉及到迭代所有用户(即使你有 100 k)时,你会惊讶于这个操作的速度有多快,但是“速度”在这里并不是真正的问题,所以如果这个操作需要 20 秒,它仍然不应该不是问题。 没有人等着看屏幕等结果,这是一个后台任务。
当然,您如何确定需要通知哪些用户可能会有所不同。 对可扩展性的需求取决于,例如,如果您真的 go 通过所有用户逐个访问,或者您是否使用某种过滤方法。
真正的问题是“通知”部分。 可扩展性在这里更为重要,因为您希望及时发送所有通知。 我会:
我建议的是,您应该创建一个包含通知详细信息的单独集合,其中包含两个主键“ notification_trigger_date ”和“ user_id ”以及这两个键的组合索引“ notification_trigger_date_user_id_1 ”。
"notification_log_collection": {
"notification_trigger_date": "2020-12-31",
"user_id": "",
"extra_info":{
"any_details_here":{}
}
}
现在要在您的 crontab 中获取符合条件的用户,您只需在“notification_trigger_date”集合中查询,获取用户并发送通知。
这种设计的一些优点:-
这里要注意的一件事是,如果用户输入更改了“间隔”键,则必须在此集合中删除并创建一个新文档。
您可以考虑将 barder_id 保留在上述集合中,这是您的选择。
“FAN OUT”这里的概念是在写入时进行处理并使您的数据库调用变得简单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.