Mysql基础架构选择
单库:
一个mysql实例承担所有的数据,读写均在此节点。
优点:成本低,适合千万级及以下并发读写小的应用
缺点:不具备高可用性,并发性差
读写分离:
将主库的数据通过binlog日志同步到从库,再根据分片中间件做读写分流。
优点: 可通过集群mgr,mha等方案做高可用,从库在一定条件可以升级为主库,实现了一定程度的并发以及高可用
缺点: 架构复杂度提升,成本提高,需保证所有节点数据保持同步,适用于读多写少,单表不过千万的互联网应用。
分片模式:
将数据通过一定的算法,分布在不同的实例
优点:能将大数据量级,如十亿级别的数量分实例存储,实现性能提升
缺点: 每个实例是数据的子集,不具备高可用性
常见的分片算法:
一 范围分片
采用如id范围的分片策略,如下图:
缺点: 范围法会导致数据不均匀,例如有2.5亿数据,a库存2亿,b库只有0.5亿
优点: 适合范围检索,流水账式的数据
二 时间分片
采用某时间节点创建的数据,例如一月、二月等
缺点:无法控制均匀分布,如果时间跨度小,即便数量较少,也会日积月累产生大量的分库,时间跨度大,可能无法有效做到分片想产生的效果
优点: 适合产生均匀且易控制的数据
三 hash取余/一致性hash
缺点: 扩展复杂,难以做数据迁移,如果前期考虑,成本较高,适合初期设计比较完善的项目
优点:分布均匀
四 环形hash
此算法后续补充,可先自行了解,基于环形做的索引,可以方便做扩容缩容