为什么要分库分表

  • 超大容量问题;

  • 性能问题;

如何去做到

  1. 垂直切分、 水平切分

  • 垂直分库:解决的是表过多的问题

  • 垂直分表:解决单表列过多的问题

  1. 水平切分; 大数据表拆成小表

拆分策略

水平拆分

  • 一致性hash

  • 范围切分 可以按照ID

  • 日期拆分

拆分后的问题

跨库join的问题

  1. 设计的时候考虑到应用层的join问题。

  2. 在服务层去做调用;

  3. 全局表

    数据变更比较少的基于全局应用的表

  4. 做字段冗余(空间换时间的做法)

    订单表。 商家id 商家名称

    商家名称变更- 定时任务、任务通知

唯一主键的问题

  • 用自增id做主键

  • UUID 性能比较低

  • snowflake

  • mongoDB

  • zookeeper

  • 数据库

跨分片数据排序分页

分布式事务问题

多个数据库表之间保证原子性 性能问题;

互联网公司用强一致性分布式事务比较少分库分表最难的在于业务的复杂度;

前提: 水平分表的前提是已经存在大量的业务数据。而这个业务数据已经渗透到了各个应用节点。