为什么分库分表??

mysql在数据量大到一定程度上,想要性能运转,就带分库分表了。

分库分表种类

  • partitioning​​
    在本地针对表进行分区操作,将一张大表的数据分别存储多个文件。
    写入sql,遵循分区规则,可将遍历全表的工作转变为遍历表里的某个分区或某几个分区,降低查询对服务器的压力。
  • 遵循分区规则写sql,不符合规则性能反而下降。
  • 单实例数据文件无法分布式存储,无论怎样分区。数据都在一台服务器,没办法扩充服务器分摊压力
  • 垂直拆分优先考虑
  • 多个业务,每个业务关联性不大,可每个业务拆分单独实例、库、表
  • 一个实例多库,分摊压力,每个库拆分到单实例上
  • 一库多表,可把每张表拆分到不同实例
  • 一张表多字段,可把字段拆分独立出新表

分库分表原则

  • 能不分就不分
    能否考虑升级硬盘、内存、CPU、网络、数据库版本、进行读写分离或负载均衡解决。
    mysql关系型数据库,拆分日升业务逻辑复杂度,分库分表原来写的查询、更新、事务分离。

分库分表实现

  1. 把原来数据迁移到新的库表里
  2. 数据库拆分(将会破坏原来的映射关系)
  • 数据库层实现
  • 不改变表结构进行拆分,通过mysql replication 或做不同slave从库实现
  • 改变数据表结构拆分。1.新建表结构,跟老表结构在同实例2.写触发器,针对表进行增删改,用触发器将数据同步到新表中3后台同步历史数据,完成数据表全部同步
  • 业务层实现