1. 双表冗余设计的核心价值与应用场景
在社交类、内容社区类系统中,用户关系管理始终是架构设计的核心难点之一。following(关注)和follower(粉丝)这种双向关系如果处理不当,轻则导致查询性能低下,重则引发数据一致性问题。我经历过一个日活百万的社区平台改造项目,最初采用单表存储关系数据,结果在用户主页加载"我的粉丝"列表时频繁出现3秒以上的延迟,这就是典型的设计缺陷。
双表冗余设计本质上是用空间换时间的经典实践。具体来说:
- 用户A关注用户B时,同时在following表插入一条A→B的记录,在follower表插入一条B←A的记录
- 查询"我关注的人"时只需扫描following表
- 查询"我的粉丝"时只需扫描follower表
这种设计最直观的优势是查询性能提升。在MySQL实测中,单表方案下粉丝数超过10万时,COUNT(*)操作需要1200ms,而双表方案仅需15ms。但更关键的是它解决了分库分表场景下的路由难题——可以按用户ID哈希分片,保证同一个用户的关注和粉丝数据落在同一分片。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据结构设计与分表策略
2.1 基础表结构设计
标准的双表结构应该包含这些核心字段:
sql复制-- 关注表(主动关系)
CREATE TABLE user_following (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT '主体用户ID',
following_id BIGINT NOT NULL COMMENT '被关注用户ID',
relation_type TINYINT DEFAULT 1 COMMENT '关系类型(预留扩展)',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_user_following (user_id, following_id),
UNIQUE uk_user_relation (user_id, following_id)
) ENGINE=InnoDB;
-- 粉丝表(被动关系)
CREATE TABLE user_follower (
id BI
