为了活跃App,运营那边提出需要实现一个提醒功能,大概需求就是到了用户设置的提醒时间,打开APP,方便用户记录。
用户可以设置重复的时间,就像闹钟一样,可以自己定义哪几天需要提醒。
现在我的困惑是,这个数据库如何设计呢?怎么设计会比较方便且容易扩展,我是打算后台用定时任务去轮询,发现有需要提醒的,然后服务器就发推送通知给APP
为了活跃App,运营那边提出需要实现一个提醒功能,大概需求就是到了用户设置的提醒时间,打开APP,方便用户记录。
用户可以设置重复的时间,就像闹钟一样,可以自己定义哪几天需要提醒。
现在我的困惑是,这个数据库如何设计呢?怎么设计会比较方便且容易扩展,我是打算后台用定时任务去轮询,发现有需要提醒的,然后服务器就发推送通知给APP
分析需求:
有三种模式:礼拜提醒;日期提醒;隔天重复提醒;
每种模式都有自己的提醒时间点
存在疑问:
如果模式冲突,优先级如何?
表设计
一共三张表,模式表;时间点表;结果表.模式表和时间点表关系为1对多,结果表为提醒信息
考虑模式表上的设置的时间不会作为搜索条件,可以将模式表里面的时间存为JSON
(这里需要限制日期提醒,允许设置最大个数)
优化方案
如果按照题主说的,定时任务轮询,当数据量很大,并且提示时间密度很小的时候,提醒时间差度会有点大,并且对数据库也是一个不小的负担.
在每个礼拜六或者礼拜天,根据模式表和时间点表生成第三天的提醒条目放入结果库(条目状态为待提醒),当用户修改了提醒时间,直接删除该账号对应的提醒条目,并且重新生成(考虑到用户修改的频率不会很频繁)
当push
成功以后,发送一个消息,监听到消息以后将提醒条目状态修改为已提醒
定时器扫描到数据以后,需要先将数据更新为提醒中,防止在push回调过程中该条记录被删除
需要考虑的问题
当把状态更新为提醒中,但是push消息失败如何处理
如果发生某些异常情况导致提醒条目结果没有正确生成,怎么能快速发现
其实定时器扫库的方式时效性不是很高
主要难点个人觉得是,用户修改条目而引起的数据更新和边界问题
12 回答5.9k 阅读
2 回答3.2k 阅读✓ 已解决
3 回答6.9k 阅读✓ 已解决
3 回答3k 阅读✓ 已解决
5 回答4.6k 阅读
4 回答2.3k 阅读
3 回答4.4k 阅读
数据库设计--下一次提醒时间,重复的时间,特定时间
到时间发送通知,然后更新数据库的下一次提醒时间