1. 为什么分
- 业务拆分,将一个大的业务拆分成多个小服务,服务之间通过RPC调用,不同服务的数据使用独立的数据库存储
- 应对高并发,读多写少,增加从库应对读流量,读少写多,分库分表,均衡写流量
- 数据隔离,C端数据和B端数据分隔,核心数据与非核心数据分隔,使其不要相互影响
2. 怎么分
在分库分表之前,数据库表的主键自增可以唯一标记一条记录,但是分库分表之后,无法使用数据库的id,因为可能造成全局的主键id重复冲突
常见的是采用一个分布式发号器实现,Twitter的Snowflake,美团的leaf等
在分库分表前,全局一张表,举个例子是订单表。order(id,userid,memchantId)有三个字段,订单ID,用户ID,商家ID
分库分表说的简单一些就是根据一套算法将原来单表中的数据均衡到多张表中
常见的分表算法有
- 区域法:根据id划分区域,例如:0-1000一个表,1001-2000一个表
- 哈希法:根据id哈希后取余数划分,例如:hash(id)%256==1,就存入第1号表中
互联网一般采用的是哈希法进行分库分表,因为数据更加均衡,但是不利于将来扩容迁移数据(区域法与之相反)