写点什么

架构实战营模块八作业

作者:Geek_Q
  • 2022 年 7 月 29 日
  • 本文字数:474 字

    阅读完需:约 2 分钟

表名设计

日期_topic_表序号,如 20220729_topic_00001,日期为当天的日期,每天都创建新表;topic 为消息主题;表序号为当天创建的第几张表,每个表有固定的容量,如 1000 万行,超过了就要创建新表。

字段设计

(1)seq_no,消息在当前 topic 中的序号;

(2)data,varchar 类型,存放消息数据;

索引设计

每张表的 seq_no 为主键索引,递增加 1;

设计思路

(1)尽量顺序操作磁盘;

(2)每个 topic 单独建表的原因,当订阅者要某 topic 数据时,数据库是顺序读,性能好;每个表有固定的容量,要某序号数据时可以很容易判断出在哪张表里;

(3)表名带日期的原因,当需要删除旧数据时,直接根据表名的日期 drop 表即可,效率高;

(4)消息写库设计,应用服务器缓存一定量的消息加超时逻辑,采取批量写的方式,根据 topic 进行批量写,这样就能顺序写磁盘,性能好;但是业务上需要能够容忍主点宕机,应用服务器中缓存的还没批量写库的数据丢失。超时时间可以设置的短一点,缓存量上限也可以设置的少一些,根据业务的特性;

(5)seq_no 加索引的原因,当订阅者想订阅某序号以后的消息时,可以通过索引快速定位到所要序号的数据位置,避免全表扫描。

用户头像

Geek_Q

关注

还未添加个人签名 2021.10.21 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营模块八作业_Geek_Q_InfoQ写作社区