当前位置:网站首页>模塊八作業

模塊八作業

2022-06-12 19:24:00 InfoQ

一、作業:設計消息隊列存儲消息數據的 MySQL 錶格

【作業要求】
1. 包括錶名、字段、索引;
2. 用文字描述設計思路和理由,例如:為什麼設計某個索引?
3. 一頁 PPT 即可。
【提示】
1. 需要考慮每個消息隊列一張錶,還是所有消息放一張錶,裏面加一個“隊列名稱”的字段。

二、錶的設計


CREATE TABLE 
topic_{xxx}
 (
id
 bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '消息 id',
content
 text NOT NULL COMMENT '消息內容',
producer_id
 bigint(11) unsigned NOT NULL COMMENT '生產者 id',
consumer_id
 bigint(11) unsigned NOT NULL COMMENT '消費者 id',
consumer_status
 tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '消費情况,0 新建 1 消費成功 2 消費失敗 3 需要重試',
create_time
 bigint(11) unsigned NOT NULL COMMENT '創建時間',
update_time
 bigint(11) unsigned NOT NULL COMMENT '更新時間',

PRIMARY KEY (
id
),
KEY 
idx_consumer_situation
 (
consumer_id
,
consumer_status
),
KEY 
idx_producer
 (
producer_id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

三、設計思路

所有消息放一張錶,後面的擴展性不行,到了一定數據量之後肯定要做分錶的。與其這樣不如直接按照隊列建錶,比如上面 topic_是隊列的前綴,後面的{xxx}需要替換成具體的隊列名稱。

字段說明:
已經在上面有解釋。不再贅述。
其中 consumer_status 這個字段是决定這個消息有沒有被成功建立、成功消費、或者可能由於某種原因,消費失敗或者需要重試做個標記。索引說明:

idx_consumer_situation 這個索引是為了方便查詢消費者的情况
producer_id 這個索引方便查詢生產者的消息查詢
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/163/202206121923480106.html