MySQL集群方面的优化可以从三个方面来考虑
1.分表
垂直分表:
如果一张表中字段过多,不仅影响可读性并且效率也会降低,这个时候应该考虑垂直分表,将其他字段拆分到另外的表中,两种表之间通过逻辑外键关联。
水平分表:
如果数据量很大的情况下,不应该将所有数据都放在同一个表下,应该根据数据量拆分成不同的表,以此提高查询的效率
2.分库
垂直分库:
我们微服务就是天生的垂直分库,一个模块对应一个数据库,对应模块只操作自己的数据库
水平分表:
同样的,即使做了水平分表,一个数据库中表太多也会影响效率,这个时候可以考虑将一个数据库中的表拆分到多个数据库。
分表可以采取的策略
1、按照id分表
2、按照时间分表
3、按照hash计算分表
4、按照业务逻辑分表
3.读写分离
读写分离是建立在分库分表的情况下。如果读写都操作同一个表,会极大的影响效率,并且如果考虑事务还会使用到锁,效率就更低了,这个时候我们就需要将读和写分担到不同的表或数据库中。
读写分离之后要确定写是哪张表,读又是哪张表,这个我们可以通过其他组件来实现。
一般有ShardingJDBC和MyCat,MyCat是一个中间件过于重量级,使用麻烦,所以我们项目中使用的是ShardingJDBC,只需要导入依赖和配置就可以了。
具体的实现是,我们将在yml中配置具体的分表策略以及读写分别对应的表,ShardingJDBC底层会分析sql,并根据策略重写sql,并可以帮我们实现负载均衡的功能。在执行完SQL以后,自动将多个表读的数据合并到一起并返回。
大致的配置有,数据库连接池、数据库四大金刚、要根据哪个字段进行分表、负载均衡策略等。如果有需要自定义分库分表策略还可以自定义一个类交给shardingJDBC管理。