新钛云服已为您服务1470天
前言:
在如今的互联⽹时代,⼤数据已成为⾏业发展的⼀个重要⻛向标,⽽对于海量数据的处理⼜成为⽆论是技术还是业务发展中都不可回避的重要问题。数据量越来越⼤,对性能要求越来越⾼;对于⼤量数据的存储的现在主要分为两种数据库:关系型数据库和 NoSQL 数据库。
传统数据库天然存在着单机单库瓶颈、难于扩展;⽽ NoSQL 产品的出现虽然弥补了传统数据库的性能问题 ,但是不能完全替代传统数据库。
随着业务量的扩张和数据量的激增,系统负载很⼤的情况下,就必须对数据进⾏分割。数据被分到多个分⽚数据库后,应⽤如果需要读取数据,就要需要处理多个数据源的数据。
如果没有数据库中间件(eg:MyCat) ,那么应⽤将直接⾯对分⽚集群,数据源切换、事务处理、数据聚合都需要应⽤直接处理,原本该是专注于业务的应⽤,将会花⼤量的⼯作来处理分⽚后的问题。
MyCat 是什么?
对于 DBA 来说:
MyCat 就是 MySql Server 增强版的存储引擎。
对于软件工程师来说:
MyCat 就是数据库服务器,可以像操作数据库那样操作MyCat。
对于架构师来说:
MyCat 是⼀个强⼤的数据库中间件,不仅可以⽤作读写分离以及分库分表,甚⾄可⽤于多租户应⽤开发、云平台基础设施,让架构具备很强的灵活性和适应性。
MyCat的应用场景:
1、⽀持读写分离、主从切换;
2、垂直分库、⽔平分表;
3、多租户应⽤,如果每个应⽤⼀个库,所有的应该只需连接 Mycat,实现多租户;
4、报表系统,处理⼤规模报表的统计。数据被切分到不同的分⽚数据库上,当应⽤需要读取数据时,中间件 mycat 就可以帮助开发⼈员进⾏数据聚合、事务、数据源切换等处理,让开发⼈员更加专注于业务开发。
MyCat 基本概念介绍:
逻辑库(schema):
对实际应⽤⽽⾔,业务开发⼈员并不需要知道中间件的存在,所以 mycat 中间件⼀个或多个数据库集群构成的逻辑库。
逻辑表(table):
对应⽤来说,读写数据的表就是逻辑表。逻辑表是对应逻辑库存在的。
分片表:
指原有很⼤的数据表需要切分到不同数据库上的表。
非分片表 :
针对分⽚表来说,原则上是不需要切分的表。
E-R 表:
基于关系型数据库中实体关系模型,⼦表和⽗表记录存放在同⼀个分⽚上,通过表分组保证数据 join 不会出现跨库操作。
全局表:
类似字典的表;变动不频繁、数据量总体变化不是很⼤、规模不超过10w 的表。
分片节点(dataNode):
⼀个⼤表被分到不同的分⽚数据库上⾯,每个表分⽚所在的数据库就是分⽚节点
节点主机(dataHost):
⼀个或多个分⽚节点(dataNode)所在的机器就是节点主机
分片规则(rule):
⼀个⼤表被分成若⼲个分⽚表,就需要⼀定的规则,这样按照某种业务规则把数据分到某个分⽚的规则就是分⽚规则。
MyCat连接池解读:
MyCat通过共享⼀个MySQL上的所有物理连接,并结合连接状态同步的特性,MyCat的连接池做到了最佳的吞吐量,也在⼀定程度上提升了整个系统的并发⽀撑能⼒。
其中ConMap 是存放连接池对象重要的数据结构,ConMap部分源码如下:
private final ConcurrentHashMap<string,< span=""> ConQueue> items = new ConcurrentHashMap();
public ConQueue getSchemaConQueue(String schema)
{
// 根据schema 获取当前切⽚的连接
ConQueue queue = items.get(schema);
if (queue == null) { // 如果没有可⽤连接,则新建