天天看点

分库分表

利用中间件mycat 客户端sharding-jdbc

优点: 

解决了单库大数据,高并发的性能瓶颈

拆分规则封装好,对应用端几乎透明,开发人员无需关系拆分细节

提高了系统的稳定性和负载能力

缺点:

拆分规则很难抽象

分片事务一致性难以解决

二次扩展时,数据迁移,维护难度大,比如: 开始我们按照用户id对2求模,但是随着业务的增长,2台数据库难以支撑,还是继续拆分为4个数据库,那么这时就需要做数据的迁移了

总结:

世界上的万物没有完美的,有利就有弊,就像数据切分一样,无论是垂直切分,还是水平切分,它们解决了海量数据的存储和访问性能问题,但也随之而来的带来了很多新问题,它们的共同缺点有:

分布式的事务问题;

跨库join问题

多数据源的管理问题

针对多数据源的管理问题,主要有两种思路:

1.客户端模式,在每个应用模块内,配置自己需要的数据源,直接访问数据库,在各个模块内完成数据的整合

2.中间代理模式,中间代理统一管理所有的数据源,数据库层对开发人员完全透明,开发人员无需关注拆分的细节

mycat: 

mycat是一个开源的分布式数据库系统,前端的用户可以把它看成是个数据库代理,用mysql客户端和命令行工具都可以访问,而其后端则是用mysql原生的协议与多个mysql服务之前进行通信.mycat的核心功能是分库分表,即将一个大表水平切分成n个小表,然后存放在后端的mysql数据库中.

使用场景:

单纯的读写分离,此时配置最为简单,支持读写分离,蛀虫切换

分库分表,对于超过1000w的表进行分片,最大支持1000亿的数据

多租户应用,每个应用一个数据库,应用只连接mycat,程序本身不需要改造;

代理hbase,分析大数据