3 回答

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
數(shù)據(jù)庫(kù)設(shè)計(jì)--下一次提醒時(shí)間,重復(fù)的時(shí)間,特定時(shí)間
到時(shí)間發(fā)送通知,然后更新數(shù)據(jù)庫(kù)的下一次提醒時(shí)間

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超3個(gè)贊
分析需求:
有三種模式:禮拜提醒;日期提醒;隔天重復(fù)提醒;
每種模式都有自己的提醒時(shí)間點(diǎn)
存在疑問(wèn):
如果模式?jīng)_突,優(yōu)先級(jí)如何?
表設(shè)計(jì)
一共三張表,模式表;時(shí)間點(diǎn)表;結(jié)果表.模式表和時(shí)間點(diǎn)表關(guān)系為1對(duì)多,結(jié)果表為提醒信息
考慮模式表上的設(shè)置的時(shí)間不會(huì)作為搜索條件,可以將模式表里面的時(shí)間存為
JSON
(這里需要限制日期提醒,允許設(shè)置最大個(gè)數(shù))
優(yōu)化方案
如果按照題主說(shuō)的,定時(shí)任務(wù)輪詢,當(dāng)數(shù)據(jù)量很大,并且提示時(shí)間密度很小的時(shí)候,提醒時(shí)間差度會(huì)有點(diǎn)大,并且對(duì)數(shù)據(jù)庫(kù)也是一個(gè)不小的負(fù)擔(dān).
在每個(gè)禮拜六或者禮拜天,根據(jù)模式表和時(shí)間點(diǎn)表生成第三天的提醒條目放入結(jié)果庫(kù)(條目狀態(tài)為待提醒),當(dāng)用戶修改了提醒時(shí)間,直接刪除該賬號(hào)對(duì)應(yīng)的提醒條目,并且重新生成(考慮到用戶修改的頻率不會(huì)很頻繁)
當(dāng)
push
成功以后,發(fā)送一個(gè)消息,監(jiān)聽(tīng)到消息以后將提醒條目狀態(tài)修改為已提醒定時(shí)器掃描到數(shù)據(jù)以后,需要先將數(shù)據(jù)更新為提醒中,防止在push回調(diào)過(guò)程中該條記錄被刪除
需要考慮的問(wèn)題
當(dāng)把狀態(tài)更新為提醒中,但是push消息失敗如何處理
如果發(fā)生某些異常情況導(dǎo)致提醒條目結(jié)果沒(méi)有正確生成,怎么能快速發(fā)現(xiàn)
其實(shí)定時(shí)器掃庫(kù)的方式時(shí)效性不是很高
主要難點(diǎn)個(gè)人覺(jué)得是,用戶修改條目而引起的數(shù)據(jù)更新和邊界問(wèn)題
添加回答
舉報(bào)