feat: complete shared database tenant sharding
This commit is contained in:
@@ -44,19 +44,9 @@ ALTER TABLE `im_group_message_shards`
|
||||
ADD UNIQUE INDEX `uk_im_group_message_shards_table` (`tenant_id`, `table_name`),
|
||||
ADD INDEX `idx_im_group_message_shards_status` (`tenant_id`, `status`, `shard_month`);
|
||||
|
||||
ALTER TABLE `im_group_message_topic_shards`
|
||||
DROP PRIMARY KEY,
|
||||
DROP INDEX `idx_im_group_message_topic_shards_seq`,
|
||||
DROP INDEX `idx_im_group_message_topic_shards_month`,
|
||||
ADD PRIMARY KEY (`tenant_id`, `topic`, `shard_month`),
|
||||
ADD INDEX `idx_im_group_message_topic_shards_seq` (`tenant_id`, `topic`, `max_seq`),
|
||||
ADD INDEX `idx_im_group_message_topic_shards_month` (`tenant_id`, `shard_month`, `topic`);
|
||||
DROP TABLE IF EXISTS `im_group_message_topic_shards`;
|
||||
|
||||
ALTER TABLE `im_group_message_dedup`
|
||||
DROP PRIMARY KEY,
|
||||
DROP INDEX `idx_im_group_message_dedup_topic_seq`,
|
||||
ADD PRIMARY KEY (`tenant_id`, `topic`, `from_user`, `client_msg_id`),
|
||||
ADD INDEX `idx_im_group_message_dedup_topic_seq` (`tenant_id`, `topic`, `seqid`);
|
||||
DROP TABLE IF EXISTS `im_group_message_dedup`;
|
||||
|
||||
-- 3. 创建好友与单聊消息分表并迁移现有数据。
|
||||
CREATE TABLE IF NOT EXISTS `im_001_friendships` LIKE `im_friendships`;
|
||||
@@ -146,17 +136,7 @@ SELECT 2,`shard_month`,CONCAT('im_002_group_messages_', `shard_month`),`shard_st
|
||||
FROM `meeting_im`.`im_group_message_shards`
|
||||
ON DUPLICATE KEY UPDATE `table_name`=VALUES(`table_name`),`status`=VALUES(`status`);
|
||||
|
||||
INSERT IGNORE INTO `im_group_message_topic_shards` SELECT * FROM `meeting_im`.`im_group_message_topic_shards`;
|
||||
INSERT IGNORE INTO `im_group_message_dedup` SELECT * FROM `meeting_im`.`im_group_message_dedup`;
|
||||
|
||||
-- 旧非月表迁移后补齐 Topic 路由,并按物理表实际数据校准分片统计。
|
||||
INSERT INTO `im_group_message_topic_shards`
|
||||
(`tenant_id`,`topic`,`shard_month`,`min_seq`,`max_seq`,`message_count`,`min_created_at`,`max_created_at`)
|
||||
SELECT 1,`topic`,'202608',MIN(`seqid`),MAX(`seqid`),COUNT(*),MIN(`created_at`),MAX(`created_at`)
|
||||
FROM `im_001_group_messages_202608`
|
||||
GROUP BY `topic`
|
||||
ON DUPLICATE KEY UPDATE `min_seq`=VALUES(`min_seq`),`max_seq`=VALUES(`max_seq`),
|
||||
`message_count`=VALUES(`message_count`),`min_created_at`=VALUES(`min_created_at`),`max_created_at`=VALUES(`max_created_at`);
|
||||
-- Topic-to-month routes are Redis-backed and are rebuilt by runtime reads.
|
||||
|
||||
UPDATE `im_group_message_shards` AS s
|
||||
SET s.`row_count`=(SELECT COUNT(*) FROM `im_001_group_messages_202608`),
|
||||
|
||||
Reference in New Issue
Block a user