站内信设计

参考文章:https://cloud.tencent.com/developer/article/1684449

b站站内信业务设计:

消息的类型分为:

1、系统消息
2、@、点赞、回复等用户行为之间的消息(事件提醒)
3、用户之间的消息

系统消息

用一个用户消息表可以吗?

可以,但是可能在部分的业务场景中需要处理的地方很多。比如:需要给全部用户发一个营销推送,就需要一次增加大量的数据,需要做异步的处理,防止超时响应。
用户消息表t_user_system_notice
用户消息id、消息标题、消息内容、接收用户id、状态(是否发送)、拉取通知时间

我们可以创建一个系统消息通知表 t_manager_system_notice
系统消息id、标题、消息内容、消息类型(指定人、全部用户、vip用户)、是否已经发送、指定人id、发送消息的管理员、发布时间
优化(并且可以把t_user_system_notice 中的消息标题、消息内容更改为系统消息id,关联存储)

当有需要发送消息的请求的时候向t_manager_system_notice表中增加数据。再通过定时服务拉取发送到用户消息表即可,可以控制拉取的时间。

事件提醒

需要业务梳理
xxx 在某个评论中@了你;
xxx 点赞了你的文章;
xxx 点赞了你的评论;
xxx 回复了你的文章;
xxx 回复了你的评论。

可以梳理出表的结构 t_event_remind
事件id、动作类型(点赞、@、回复)、事件id、事件类型(文章、评论)、事件源的内容、事件所发生的地点链接 url、状态(是否已读)、操作者id、接收内容用户id、提醒时间

事件这里有可以优化的点,可以根据自己的系统设计来
比如一个文章有1000k的点赞,可以聚合查询展示优化用户的查看内容
可以根据按照 事件类型 和 source id 来分组的

SELECT * FROM t_event_remind WHERE recipient_id = 用户ID
AND action = 点赞 AND state = FALSE GROUP BY source_id , source_type;

如果觉得 SQL 层面的结果集处理还是很麻烦,可以先把用户所有的点赞消息先查出来, 然后在程序里面进行分组,这样会简单不少。

拓展2
其实还有一种设计提醒表的做法,即按业务分类,不同的提醒存入不同的表,这样可以分为:
点赞提醒表
回复提醒表
at(@)提醒表。

这种设计比第一种的更松耦合,不必所有类型的提醒都挤在一张表里,但是这也会带来表数量的膨胀。 所以各位小伙伴可以自行选择方案。

用户私聊

站内私信一般都是点到点的,且要求是实时的,服务端可以采用 Netty 等高性能网络通信框架完成请求。

按照这个设计,我们可以先设计出聊天室表 t_private_chat,因为是一对一,所以聊天室表会包含对话的两个用户的信息:
聊天室 ID、用户 1 的 ID、用户 2 的 ID、最后一条消息的内容

这里 user1_id 和 user2_id 代表两个用户的 ID,并无特定的先后顺序。

接下来是私信表 t_private_message 了,私信自然和所属的聊天室有联系,且考虑到私信可以在记录中删除(删除了只是不显示记录,但是对方会有记录,撤回才是真正的删除),就还需要记录私信的状态,以下是他的设计:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/17431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XS2185一款八通道以太网供电控制器

XS2185是一款八通道以太网供电控制器。 XS2185通过侦测各通道的DET管脚输入电压 来判断是否有合格的负载/PD接入系统,以决定 是否开启MOS供电开关。 当通道已经处于供电状态时,XS2185通过侦 测SENSE管脚的输入电压,以判断供电是否发生 …

免费,Python蓝桥杯等级考试真题--第15级(含答案解析和代码)

Python蓝桥杯等级考试真题–第15级 一、 选择题 答案:B 答案:D 解析:集合的并集运算有两种方式,一种是使用“|”运算符进行操作,另一种是使用union()方法来实现,故答案为D。 答案:A 解析&…

Caused by: java.lang.IllegalArgumentException: Unknown flag 0x1000

Dubbo使用Tomcat安装admin2.5.x管理平台时发生的错误: Caused by: java.lang.IllegalArgumentException: Unknown flag 0x1000 解决方法: 将本地的jdk环境变量切换成jdk8即可。

[ C++ ] 类和对象( 下 )

初始化列表 初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟 一个放在括号中的初始值或表达式。 class Date { public: Date(int year, int month, int day): _year(year), _month(month), _d…

视频汇聚/云存储/安防监控EasyCVR接入GB28181设备未回复ack信息的原因排查

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。 用户反馈,设备通过国标GB28181注…

kubeadm引导欧拉系统高可用的K8S1.28.X

文章目录 一. 核心组件架构二. 有状态与无状态应用三. 资源对象3.1 规约与状态3.2 资源的分类-元数据,集群,命名空间3.2.1 元数据3.2.2 集群资源 3.3 命名空间级3.3.1 pod3.3.2 pod-副本集3.3.3 pod-控制器 四. Kubeadm安装k8s集群4.1 初始操作4.2 ~~所有节点安装Docker&#x…

关于高性能滤波器和普通型滤波器的区别说明

高性能滤波器和普通型滤波器在性能和滤波效果上存在显著差异。以三安培为代表分析高性能滤波器和普通型滤波器的区别: 从上图曲线可看出: 1.高性能滤波器和普通型滤波器的滤波范围不同。普通型滤波器有效滤波范围为 150KHz~30MHz,而高性能滤…

动态规划:目标和

参考资料:代码随想录 这道题开题解给我看的一脸懵,最后还是靠着手动画图才稍微明白。 本次和最后一块石头的重量2有异曲同工之妙,都是要分成两堆。难点1就是想到这个方面。 怎么转为背包问题。 正数的集合总和-负数的集合总和目标和&…

【css3】02-css3新特性之选择器篇

目录 1 属性选择器 2 结构伪类选择器 3 其他选择器 :target和::selection ::first-line和::first-letter 4 伪类和伪元素的区别 伪类(Pseudo-classes) 伪元素(Pseudo-elements) 伪类和伪元素的区别 1 属性选择器 ☞ 属性选…

螺旋矩阵(算法题)

文章目录 螺旋矩阵解题思路 螺旋矩阵 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]]解题思路 模…

人类和小鼠转录组上游分析

基础软件 conda install cutadapt, trimmomatic, samtools, hisat2, subread, deeptools -y人类转录组上游分析 # 样本名称 sample_namesample# 线程 threads4# 双端测序原始fastq1和fastq2路径 fastq1_path/path/${sample_name}_1.fq.gz fastq2_path/path/${sample_name}_2.…

5倍收益秘诀:APP广告如何变现?

在这个数字时代,智能手机几乎成了我们生活中不可或缺的一部分。无论是早晨醒来的第一件事,还是睡前的最后一件事,手机都与我们紧密相连。而在这个连接的世界里,APP广告变现成为了一个热门话题,它不仅仅是将每一次点击转…

AI 大模型如何在各行业跑通业务闭环?

随着人工智能技术的快速发展,AI大模型作为新兴的技术范式,正在深刻改变着各行各业的生产方式和服务模式。从科技金融到健康医疗,从教育行业到物流与供应链,AI大模型的应用正在推动企业向全面数智化转型。然而,当惊喜与…

Redis与数据库同步指南:订阅Binlog实现数据一致性

本文作者:小米,一个热爱技术分享的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是29岁的小米,一名积极活泼、热爱分享技术的开发者。今天,我们来聊聊分布式系统中的一个重要话题——分布式一致性,特别是数据库和R…

解决bug :OSError: cannot open resource

在创建词云,运行程序的时候报错OSError: cannot open resource 1、定位问题 遇到这种报错,通常是由于无法加载字体导致的 2、寻找字体文件 字体文件通常以 ​​.ttf​​ 或 ​​.otf​​ 扩展名结尾。在Windows操作系统上,字体文件通常存…

如何清除电脑使用痕迹?5个方法保护个人隐私!

“我在使用电脑时,想将之前的使用痕迹删除,不知道应该怎么才能正确操作呢,希望大家给我出出主意。” 在使用电脑的过程中,我们经常会留下各种使用痕迹,如浏览历史、文档记录、临时文件等。这些痕迹可能会暴露我们的隐私…

随机森林算法实现分类

随机森林算法实现对编码后二进制数据的识别 1.直接先上代码! import numpy as np import pandas as pd from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import …

自用升级centos7.2的默认Python 2.7.5为python3.8

wget https://www.python.org/ftp/python/3.8.8/Python-3.8.8.tgztar zxvf Python-3.8.8.tgz 进入刚刚解压后的目录 ./configure --prefix/data/soft/python3按照上面截图所属,需要安装gcc 安装报错需要安装 sudo yum install zlib1g-dev make -j4 make install -…

京东618全民拆快递 autojs一键脚本

京东618的最新活动为全民拆快递,因为是20周年的活动,所以可以瓜分20亿红包,想要购买一些家电的朋友可以提前关注起来,领取的红包可以直接抵扣,京东618全民拆快递软件app是专为此活动打造的一款辅助工具,可以帮你自动做任务,当然也支持淘宝的任务。 任务设置 1、自动打开…

【安装笔记-20240520-Windows-在 QEMU 中尝试运行 OpenWRT】

安装笔记-系列文章目录 安装笔记-20240520-Windows-在 QEMU 中尝试运行 OpenWRT 文章目录 安装笔记-系列文章目录安装笔记-20240520-Windows-在 QEMU 中尝试运行 OpenWRT 前言一、软件介绍名称:OpenWRT主页官方介绍 二、安装步骤测试版本:openwrt-23.05…