方案
重点
- 分表后,根据查询条件中的某个主要业务id,建立索引映射表
- 查询条件放入到映射表中
- 复杂查询可以通过ES解决
-
上亿数据量的用户表水平拆分
将用户表拆分为100张表,users_001、users002等,将这100张表分散到两个数据库中
- 根据userId进行拆分,根据userId字段hash后,对表进行取模,路由到一张表
- 一般千万行数据量的表大小在1GB左右
系统使用mycat、shardingsphere这类中间件,设置好路由规则,便可以对user表进行增删改
存在问题
用户登陆根据手机号登陆,如何查询用户
- 常规方案:建一个映射表(mobile,userId)
运营端,通常需要对用户进行条件复杂的搜索
根据orderId进行分表
建立userId、orderId的映射表,然后以userId为粒度进行分表
场景
用户端,订单分页查询
- userId进行hash然后对映射表表进行取模
- 此时这个用户的订单肯定都在这一个表里
- 然后分页查询出orderId
- 然后会根据oderId到订单表取数据
- 运营端
- 将数据同步到ES中进行搜索
