数据库分库分表和mycat软件
背景
随着时间和公司的业务的发展,数据库中的表会越来越多,表中的数据量也会越来越大,此时相应的数据操作(增删改查)等会越来越慢;而且未进行分布式部署的情况下,一台服务器的资源(CPU,内存,磁盘,IO)有限,数据库所能承载的数据量以及数据处理能力都将遭遇瓶颈,基于以上原因,需要对数据库进行分库分表操作.
一.什么是分库分表
将存放在一台数据库服务器中的数据,按照特定的方式进行拆分,分散存放到多台数据库服务器中,以达到分散单台服务器负载的效果
1.水平分割
按照表中指定字段的分片规则,将表记录按行切分,分散存储到多个数据库中
2.垂直切分
将单个数据库的多个表按业务类型分类,分散存储到不同的数据库
二.方案
利用mycat中间件对原有数据库在不停机的情况下将数据库中数据动态迁移实现分库,分表储存的方式,最终实现以下目标。
1.减少对单一数据库资源的占用
2.数据分布式存储,更加安全可靠
3.加快SQL语句查询速率,解决部分慢查询问题
4.缓解单一数据库因数据存储量过大及高并发写/读而导致的性能问题
1.方案基础架构图
2.实现过程
修改系统配置为将数据同时写入数据库中间件和老库,利用数据迁移工具(自己先写好)将老库原始数据迁移至中间件存入新库,数据库中间件判断分库分表中是否存在某数据(若不存在,直接写入;若存在,比较数据时间戳,确保是新数据覆盖老数据),数据库中间件根据数据分片规则将数据分别存入对应的数据库.导完一次数据后程序自动进行校验,对比老库和新库的数据是否一致,如果不一致再次从老库读取不一致部分数据写入新库,再校验.反复循环直至老库和新库中每个表每条数据完全一致为止,最后将系统配置改为将数据只写入数据库中间件.
将业务紧密,表间关联密切的表划分在一起,垂直切分以后,对表格的数据量和增长速度进一步分析,确定是否需要进行水平切分.当数据增长缓慢,单一数据库在较长时间内均可承载产品业务量,则不需要进行水平切分;若划分到一起的表格数据量巨大,增速迅猛,需要进一步进行水平分割。
三.中间件Mycat介绍
mycat是基于Java的分布式数据库系统中间件,为高并发环境的分布式存储提供解决方案,适合数据大量写入的存储需求,支持Mysql,Oracle,Sqlserver,Mongodb等,提供数据读写分离服务和分片服务,基于阿里巴巴Cobar进行研发的开源软件