天天看点

MYSQL 数据库大太的解决方案

面对问题

插入查询慢、且需要时效性比较强的情况

原因

MYSQL 容量上千万条以上就会很慢。

解决方法

分区

对应用透明,相对操作比较简单。

对主键有要求:所有主键里必须包含分区主键,如果又想用id查,又想用年份查就比较难。

查询会受一些影响:批量查时快不了多少,插入可以提速。

分库

分表

迁移场景

  • 历史数据迁移:如果表巨大,则不使用查询,从第一条开始向其它表里分流;选改表,再改其上应用。
  • 新表间迁移:假设每月迁一次,每月把这个月数据从热表里迁出来(同样是分流);也可以双写,即每次写入冷表和热表,定期删热表最后的数据。
  • 补采数据:在修修补补的情况下(补采数据),又写可能更合适。
  • 数据表结构修改:不分表时操作一次,分表后需要同一操作,执行多次。
  • 注意一:单批次迁移每次1000-10000条,不要太大。
  • 注意二:在复杂的场景下,双写最好。

注意事项

  • 索引

    对于在巨大表中可能查询的数据一定要建索引

  • 表碎片清理

    热表不断地写入删除,需要定期清理,方法如下:

$ alter table 表名 engine=innodb;