记一次百万用户级别的站内信系统数据表设计
需求
- 有大佬设计过百万级别的站内信推送吗
- 库里有三百万用户,要通过标签筛选出一部分,可能目标用户几十万,也可能几百万,然后给这些人发站内信
- 站内信有全员,筛选目标,和精确目标这三大类型
- 目前全员信我把接收者id置为0,但是筛选目标这个可能不行,多发几个目标百万的推送,中间表数据就太多了
- 我现在全员信用bitmap存是否已读
- 数据库里也有对应的阅读关系留存
- 这个有更好的优化方法吗
初步方案
用户登录的时候,筛选text表里面id > max_text_id,且condition符合自己条件的消息出来,然后签收这条消息到message,这样可以避免生成很多不活跃用户的消息
CREATE TABLE `message` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`rev_id` bigint UNSIGNED NOT NULL,
`msg_id` bigint UNSIGNED NOT NULL,
`status` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '0未查看 1已查看',
`max_text_id` bigint UNSIGNED NOT NULL COMMENT '存储已签收的text表最大ID',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
CREATE TABLE `text` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`content` varchar(255) NOT NULL DEFAULT '',
`type` tinyint UNSIGNED NOT NULL DEFAULT 1 COMMENT '1全部 2局部',
`condition` varchar(255) NOT NULL COMMENT 'type=2时,筛选的条件//{sex:1,level:1,carrier:2,room:3}',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ;
本作品采用《CC 协议》,转载必须注明作者和本文链接