记一次百万用户级别的站内信系统数据表设计

需求

  • 有大佬设计过百万级别的站内信推送吗
  • 库里有三百万用户,要通过标签筛选出一部分,可能目标用户几十万,也可能几百万,然后给这些人发站内信
  • 站内信有全员,筛选目标,和精确目标这三大类型
  • 目前全员信我把接收者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 协议》,转载必须注明作者和本文链接
遇强则强,太强另说
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!