在实际的应用场景中,当一个单表的数据量过亿时写入和查询的压力就会倍增,拆表在一定程度上是解决数据库单表瓶颈的方案之一,
在本次要拆分的表中有以下特征:
单表已过2亿
表数据量每天增量50万左右
表结构比较单一,用户关注用户行为表,用户关注一个用户会往表中写入一条数据。
表结构如下:
tb_user_friends:
uid, fid, from, create_date, inverse_date(反向索引时间戳)
其中表索引:
PRIMARY KEY (`uid`,`fid`),
KEY `idx_uid` (`uid`,`inverse_date`),
KEY `idx_fid` (`fid`,`inverse_date`),
如何选择拆分键
选择拆分键的选择往往由查询决定,常见的查询语句如下:
// 获取用户的关注列表
select fid from tb_user_friends where uid = xxx order by inverse_date limit 20;
// 获取用户的粉丝列表
select uid from tb_user_friends where fid = xxx order by inverse_date limit 20;
这就保证了我们查询用户的粉丝或者关注都需要从单一的一个表中能够获取到,所以如果单一的按照uid进行拆分,会导致查询粉丝需要从多张表中查询,这是不能接受的,所以这里分别以uidÿ