模块 8 作业
一、消息订阅与发布模型
二、存储引擎选择
【InnoDB】
支持事务(redo log)
B+ 树存储,支持行锁 提供更高的并发能力(建议单表 500 内最优,超过 2000 万树高可能会大于 3 层 会增加索引复杂度)
【MyISAM】
不支持事务
不支持行锁
结论:选择 InnoDB,通过事务保障数据的正确性,通过行锁提供更高的并发能力
三、表结构
【queue】
t_queue {
id int not null auto_increment comment '队列 ID',
queue_name varchar(32) not null comment '队列名称',
gmt_time timestamp not null comment '创建时间'
}
【消息 message】
t_message {
id bigint not null comment '消息 ID'(分布式唯一 ID),
queue_id not null int comment '队列 ID',
msg_content BLOB not null comment '消息体',
msg_state tinyint not null comment '消息状态:0、未消费 1、已消费',
gmt_time timestamp not null comment '创建时间'
}
索引:queue_id 与 msg_state 创建联合索引
【消费纪录】
t_sub_log {
id bigint not null auto_increment comment '消费日志 ID',
queue_id not null int comment '队列 ID',
msg_id bigint not null comment '消息 ID',
gmt_time timestamp not null comment '创建时间'
}
索引:msg_id 与 queue_id 创建联合索引
版权声明: 本文为 InfoQ 作者【tony】的原创文章。
原文链接:【http://xie.infoq.cn/article/c2c32790d6b607facd8354482】。文章转载请联系作者。
评论