站内信、活动、公告和推送技术调研
本文最后更新于:1 天前
1 需求分析

帮我调研下 web 系统的站内信、活动、公告和推送的设计实现解决方案
站内信的核心抽象:消息内容、消息和发送人的关系、是否已读。
2 理论设计
【xxx】【点赞】了你的【文章】【文章的标题】
【xxx】【评论】了你的【文章】【文章的标题】
【xxx】【点赞】了你在【文章】【文章的标题】下的评论
【xxx】【回复】了你的【评论】【被回复的评论的内容】
【xxx】【点赞】了你在【文章】【文章标题】下的回复
【xxx】在【文章】【文章的标题】中【@】了你
【xxx】在【文章】下的【评论】中【@】了你
【xxx】在【文章】下的【回复】中【@】了你
【xxx】回答了你关注的【问题】【问题标题】
【xxx】更新了你关注的【文章】【文章标题】
【xxx】邀请你回答【问答】【问答标题】
【xxx】关注了你
一个完整的消息包括,【站内信的主语】、【主实体类型】、【关联对象】、【触发站内信的事件】、【站内信接收人】。
eg:张三点赞了李四的文章”码神是如何练成的!”
站内信主语:张三
主实体类型:文章(注意是主体类型,只是一个类型,比如掘金沸点、知乎问题、淘宝商品、订单等,根据业务定义)
关联对象:文章”码神是如何练成的!”(便于根据主实体类型和关联对象定位到对应的事件来源)
触发站内信的事件:点赞(触发消息事件的动作或行为)
站内信接收人:李四(接收到消息的人)
消息大致分为了三类:
- 系统推送的通知(System Notice);
- 回复、@、点赞等用户行为产生的提醒(Remind);
- 用户之间的私信(Chat)。
2.1 系统通知(System Notice)
系统通知一般是由后台管理员发出,然后指定某一类(全体,个人等)用户接收。基于此设想,可以把系统通知大致分为两张表:
- t_message(系统消息表) :记录发出的通知 ;
- t_message_belong(消息关联表) : 存储通知与接收者的关联关系。
t_message 结构如下:
| 字段名 | 类型 | 描述 |
|---|---|---|
| id | LONG | 系统消息 ID |
| title | VARCHAR | 标题 |
| content | TEXT | 内容 |
| type | TINYINT | 发给哪些用户[1:单一目标;2:全体目标;3:部分目标]; |
| belong_type | TINYINT | 所属类型[1:学员;2:项目;3:课程) |
| level | TINYINT | 级别[0:重要;1:普通] |
| state | BOOLEAN | 是否已被拉取过,如果已经拉取过,就无需再次拉取 |
| status | TINYINT | 状态[0:未发布;1:已发布;2:已撤回] |
| publish_time | TIMESTAMP | 发布时间 |
| create_account_id | LONG | 发布通知的账号 ID |
| update_account_id | LONG | 更新通知的账号 ID |
| create_time | DATETIME | 创建时间 |
| update_time | DATETIME | 更新时间 |
| is_deleted | TINYINT | 是否删除[0:未删除;1:已删除] |
t_message_belong 结构如下:
| 字段名 | 类型 | 描述 |
|---|---|---|
| id | LONG | 主键 ID |
| message_id | LONG | 系统通知的 ID |
| belong_id | LONG | 关联到对应类型的id(一对多学员时为null) |
| pull_time | TIMESTAMP | 拉取通知的时间 |
| state | BOOLEAN | 阅读状态(belong_type为用户时才有效) |
| read_time | DATETIME | 已读时间(belong_type为用户时才有效) |
| create_account_id | LONG | 发布通知的账号 ID |
| update_account_id | LONG | 更新通知的账号 ID |
| create_time | DATETIME | 创建时间 |
| update_time | DATETIME | 更新时间 |
| is_deleted | TINYINT | 是否删除[0:未删除;1:已删除] |
最终sql:
1 | |
3 免责说明
本博客的部分内容来源于互联网公开资料,包括但不限于文章、图片、视频、音频等素材。这些素材的版权归原作者或版权持有人所有。本博客引用这些素材的目的在于分享知识、传播信息,并非用于商业用途。
3.1 引用原则
- 非商业用途:本博客为个人非商业性质,所有引用的素材仅用于学习和交流目的。
- 注明来源:在引用他人素材时,我会尽量注明出处或来源链接。如果因疏忽未能标注,请联系我,我会及时补充或删除相关内容。
- 尊重版权:如果您是相关素材的版权持有人,认为本博客的内容侵犯了您的权益,请通过以下联系方式与我联系,我会第一时间核实并处理。
3.2 联系方式
如果您对本博客的内容有任何疑问或建议,或认为某些内容侵犯了您的合法权益,请通过以下方式联系我:
3.3 免责条款
- 本博客引用的互联网资料仅供学习和参考,不保证其准确性、完整性或时效性。
- 对于因使用或引用本博客内容而导致的任何直接或间接损失,本博客不承担任何责任。
- 本博客保留对免责声明的最终解释权。
感谢您的理解与支持!
