站内信设计

news2024/9/25 9:28:38

参考文章: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.coloradmin.cn/o/1706002.html

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

相关文章

主副坐标轴作图(即双坐标轴)

主副坐标轴显示: import numpy as np from matplotlib import pyplot as plt plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus] False xnp.arange(0.1,10,0.01) data1np.exp(x) data2np.log(x) fig,ax1plt.subplots() #subplots一定要带s…

室内也可以用北斗定位?还能用RTK?

室内卫星顾名思义,就是在室内有遮挡环境中的卫星定位技术,众所周知,目前全球几大GNSS定位系统已经很完善,但是GNSS有个致命的弱点,就是地面如果有遮挡就没有信号,在这样的条件下,在室内定位场景…

YOLOv8+PyQt5农作物杂草检测系统完整资源集合(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)

农作物杂草检测YOLOV8(https://mbd.pub/o/bread/mbd-ZpaTl5tv)_哔哩哔哩_bilibili 资源包含可视化的农作物杂草检测系统,基于最新的YOLOv8训练的农作物杂草检测模型,和基于PyQt5制作的可视化农作物杂草检测系统,包含登陆页面、注册页面和检测…

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

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

STM32启动过程分析

Keil堆栈设置注意事项 一、启动模式 复位方式:上电复位、硬件复位、软件复位 从地址0x0000 0000处取出堆栈指针MSP的初始值,该值就是栈顶地址。从地址0x0000 0004处取出程序计数器指针PC的初始值,该值指向复位后执行的第一条指令。 说白了就…

2024年【危险化学品经营单位安全管理人员】考试报名及危险化学品经营单位安全管理人员找解析

题库来源:安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员考试报名考前必练!安全生产模拟考试一点通每个月更新危险化学品经营单位安全管理人员找解析题目及答案!多做几遍,其实通过危险化学品经营单位安全管…

ArcGIS基本操作-常用的空间分析工具梳理

ArcGIS空间分析工具使用 如果我们在进行科研时需要将研究区地形地貌作为一项指标的话,将可能遇到坡度、坡向、地形起伏度、地表切割深度等因子计算,下面我向大家介绍如何利于ArcGIS软件的空间分析工具,基于高程数据,分析重庆市的…

聊聊如何感知项目引入哪些功能特性

前言 使用过springcloud全家桶朋友,应该知道springcloud涉及的组件很多,为了让开发者快速了解项目引入了springcloud哪些组件,springcloud引入了HasFeatures,配合Actuator,可以让开发者感知到项目引入的组件功能类型、…

深度解析Nginx配置文件:从全局块到upstream块的探索之旅

Nginx配置文件的简介 在浩瀚的互联网世界中,Nginx就如同一座大型交通枢纽,将访问者的请求精准地引导到正确的服务终点。而这一切,都离不开一个神秘而重要的角色——Nginx配置文件。这个文件,就像是一份详尽的路线图,为…

leetCode.84. 柱状图中最大的矩形

leetCode.84. 柱状图中最大的矩形 题目思路 代码 class Solution { public:int largestRectangleArea( vector<int>& h ) {int n h.size();vector<int> left( n ), right( n );stack<int> st;// 求每个矩形的第一个小于左边界的矩形 - 用单调栈for ( …

大小字符判断

//函数int my_isalpha(char c)的功能是返回字符种类 //大写字母返回1&#xff0c;小写字母返回-1.其它字符返回0 //void a 调用my_isalpha()&#xff0c;返回大写&#xff0c;输出*&#xff1b;返回小写&#xff0c;输出#&#xff1b;其它&#xff0c;输出&#xff1f; #inclu…

回归自然:拥抱生态农业

在这个喧嚣的时代&#xff0c;我们渴望回归大自然的怀抱&#xff0c;享受那份纯净与安宁。广西生态农业&#xff0c;正是我们追寻自然、健康生活的理想选择。它摒弃了传统农业的弊端&#xff0c;采用环保、可持续的种植方式&#xff0c;为我们带来了绿色、无污染的农产品。生态…

关于python中屏蔽输出

python中屏蔽输出包含屏蔽标准输出&#xff08;比如打印出来的内容&#xff09;、屏蔽标准错误&#xff08;错误信息&#xff09;还有屏蔽logging信息等。 屏蔽标准输出 import contextlib import oswith open(os.devnull, "w") as devnull:with contextlib.redire…

内网渗透测试笔记

内网渗透流程&#xff1a;打通->拿权限->留后门->放后台->攻击其他人 msf小知识: setg->设置全局变量; 监听模块(必须掌握):exploit/multi/handler; 为什么很多时候优选选择meterpreter的载荷?因为这个是msf的集成工具,使用更快捷,方法和工具更多;例 如:ru…

【XR806开发板试用】基础篇,从零开始搭建一个LCD彩屏时钟(ST7735S驱动)

本文从搭建环境开始&#xff0c;step by step教大家使用XR806实现驱动SPI屏幕&#xff08;ST7735S驱动&#xff09;&#xff0c;并连接WiFi实现ntp对时&#xff0c;最终实现把时间显示到屏幕上。 #1. 搭建开发环境 1. 安装编译环境所需的依赖包 基于ubuntu 20.04&#xff0c;按…

第十二周 5.20 面向对象的三大特性(封装、继承、多态)(一)

一、封装 1.目前的程序无法保证数据的安全性、容易造成业务数据的错误 2.private:私有的&#xff0c;被private修饰的内容只能在本类中访问 3.为私有化的属性提供公开的get和set方法 (1)get方法&#xff0c;获取私有化属性的值&#xff1a; public 返回值类型 get属性名…

第十三周 5.27面向对象的三大特性(封装、继承、多态)(三)

3.instanceof避免类型转换异常: (1)语法:引用名 instanceof 类名 (2)执行:判断引用中存储的实际对象类型是否兼容于后面的类型(是否为后面类型的一种)&#xff0c;兼容一true&#xff0c;不兼容—false (3)作用:可以在程序设计中避免类型转换异常 直接使用案例…

电磁辐射仿真软件CST的材料概述【仿真入门】

材料概述(1) CST中提供的各种材料&#xff01; 下面介绍一下&#xff0c;CST中可以设置的材料属性。 -PEC是Perfect Electric Conductor的缩写&#xff0c;表示没有Loss的理想导体。 -Normal基本的材料模型&#xff0c;一般多用于介质(Dielectric)材料定义。 -Anisotropic…

M-A352AD在桥梁/建筑结构健康监测中的应用

钢筋混凝土的面世&#xff0c;使人类基建迈进了新的阶段&#xff0c;大规模的桥梁和高楼大厦拔地而起。随之而来的&#xff0c;就是对其安全的忧虑。因此&#xff0c;我们需要对其结构安全健康进行监测&#xff0c;以保证行恰当的维护和提前发现隐患。桥梁/建筑结构健康监测是以…

重庆耶非凡科技有限公司有选品师项目培训吗?

在当今科技飞速发展的时代&#xff0c;各种科技公司如雨后春笋般涌现&#xff0c;它们在不同领域发挥着重要作用。其中&#xff0c;重庆耶非凡科技有限公司以其独特的业务模式和专业服务&#xff0c;在业界赢得了良好的口碑。那么&#xff0c;重庆耶非凡科技有限公司究竟是做什…