小程序(十六)消息功能


一、数据库设计

很多人以为消息模块的数据表设计起来很简单,创建一个 消息表 就可以存储系统消息了,我只
能说,你把问题想简单了。
公告消息记录应该全局唯一,还是为每个用户创建一条公告消息?
这个问题取决于你是怎么理解系统消息的,如果你不希望系统记录用户是否阅读了某条消息,哪
些消息是未读消息,那么一个公告消息在数据表中就是一条唯一的记录,存储起来非常节省空
间。但是很少有系统会这么设计,如果系统消息很多,又不告诉用户哪些是已读消息,哪些是未
读消息,造成用户体验非常不好。所以系统必须要记录下来,用户阅读了哪些消息,还有哪些消
息是未读的。
如果一个电商系统有800万注册用户,那么系统发出一条公告消息之后,意味着要在消息表中插
入800万条消息记录,每条记录是发给某位用户的公告消息。瞬间数据库的负载达到顶峰,数据
库被大量的写入操作占用,导致电商系统正常的业务无法展开。请记住,一条公告消息就能让电
商系统濒临崩溃。微信有11亿的日活用户,如果微信给所有用户发出一条公告消息,岂不是微信
的服务器就挂了?看来消息模块的数据库架构确实有技术含量。

DROP TABLE IF EXISTS `messsage`;
CREATE TABLE `messsage`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `send_user` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '发送人',
  `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '消息内容',
  `send_time` datetime NULL DEFAULT NULL COMMENT '消息发送时间',
  `title` varchar(80) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '主题',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;
DROP TABLE IF EXISTS `messageref`;
CREATE TABLE `messageref`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `messageId` bigint(20) NULL DEFAULT NULL COMMENT '消息ID',
  `resave_user` int(11) NULL DEFAULT NULL COMMENT '消息接收人ID  user-id',
  `status` tinyint(1) UNSIGNED ZEROFILL NULL DEFAULT NULL COMMENT '已读状态 0未读    1已读',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

二、系统消息的发送与收取设计

在这里插入图片描述

三、业务设计

用户登陆系统的时候,后端系统要创建异步线程,接收消息队列MQ中的消息,然后把消息写到数据库里面。
在这里插入图片描述

四、消息实体设计

package com.buba.wechatsk.pojo;

import java.io.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值