• mycat


    一、MyCAT概述
    MyCAT是一款由阿里Cobar演变而来的用于支持数据库读写分离、分片的分布式中间件。MyCAT可不但支持Oracle、MSSQL、MYSQL、PG、DB2关系型数据库,同时也支持MongoDB等非关系型数据库。基础架构如下:

    1、MyCAT原理

    MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。

    2、MyCAT功能
    (1)数据库分片(Sharding)

    通过某种条件,将同一数据库中的数据分散的存储到多个数据库中,已达到分散单台数据库设备负载的效果,这就是数据库分片。
    a.水平拆分
    同一张表的不同记录,根据表的某个字段的某种规则拆分到多个数据库(主机)上,这既是水平拆分。
    单库业务表可能会过于庞大,存在单库读写与存储瓶颈,这种情况可以通过水平拆分解决,水平拆分基本架构如下:

    常用水平拆分规则:
    *ID
    *日期
    *特定字段取模

     优点:

    *拆分规则抽象好,join操作基本可以数据库内完成
    *不存在单库大数据,高并发的性能瓶颈
    *应用端改造少
    *提高了系统稳定性和负载能力

    缺点:
    *拆分规则难以抽象
    *分片事务一致性难以解决
    *数据多次扩展难度跟维护量极大
    *跨库join性能较差

     b.垂直拆分
    不同的表切分到不同的数据库(主机)上,这就是垂直拆分。
    一般按照业务表进行分类,划分为不同的业务、模块库,耦合度越低,越容易做垂直拆分,垂直拆分基本架构如下:

     

    垂直拆分注意点:
    跨库Join,采用共享数据源或分库接口调用,根据资源和数据规模、负载而定

    优点:
    *拆分后业务清晰,拆分规则明确
    *系统之间整合或扩展容易
    *数据库维护简单

    缺点:
    *部分业务表无法Join,只能通过接口方式解决,提高了系统复杂度
    *受每种业务不同的限制存在单库性能瓶颈,不容易扩展跟性能提高
    *事务处理复杂

    c.水平拆分和垂直拆分共同缺点
    *分布式事务处理困难
    *夸节点join困难
    *扩数据源管理复杂

    d.切分总则
    *能不切分的尽量不切分
    *如果要切分,选择合适的切分规则,提前规划好
    *数据库切分尽量通过数据冗余或表分组来降低跨库join
    *业务尽量使用少的多表join

    (2)读写分离

    (3)黑白名单限制

    3、使用场景 

    (1)单纯读写分离,此时配置最为简单,支持读写分离、主从切换
    (2)分库分表,对记录超过1000万的表进行水平拆分,最大支持1000亿单表水平拆分
    (3)多租户应用,每个应用一个数据库,但程序只需连接MyCAT,程序不改变,实现多租户化
    (4)报表系统,借住MyCAT分表能力,处理大规模的报表统计
    (5)替代Hbase,分析大数据
    (6)海量实时数据查询

    4、优缺点
    优点:
    (1)支持多种类型数据库的分片
    (2)易扩展
    (3)


    缺点:

    四、MyCAT重要概念

     1、逻辑库(schema)

    逻辑库是mycat中间件层配置的对应实际一个或多个业务数据库集群构成。

    2、逻辑表(table)
    a.逻辑表是mycat切分到多个数据库或者不切分对应用程序显示的统一的表。
    b.分片表是原有的大表,经过分片,分布在不同数据库、相同数据库的保留相同表结构,但数据不同的表。
    c.非分片表是未做切分的表。
    d.ER表基于E-R关系分片策略,子表记录与所关联的父表记录存放在同一个数据分片上,即子表依赖于父表,通过表分组保证数据join不会跨库操作。
    e.全局表,业务系统中变化不大、数据量不大(十万以下),但又需要经常关联的表,mycat采用冗余在各个节点一个份来完成。

    3、分片节点(dataNode)
    数据库分片后,一个大表被切分到不同的分片数据库上,每个表分片所在的数据库就是分片节点。

    4、分片主机(dataHost)
    分片节点所在的服务器,数据切分后,每个分片节点不一定都会独占一台服务器,同一个分片服务器可能存储多个分片节点,尽量使读写压力高的分片节点均衡的放在不同的节点主机上。

    5、分片规则(rule)
    按照某种业务规则把数据分到某个分片节点上的规则,就是分片规则。(分片规则非常重要,直接决定后续数据处理复杂度)

    6、全局序列号(sequence)
    当数据库分片后,原有的主键约束在分布式条件下无法使用,因此需要引入外部机制保证数据唯一表示,这种保证全局的数据唯一表示机制就是全局序列号(sequence)。

    7、多租户
    多用户的环境共用相同的系统、程序组件,并且确保各用户间数据的隔离性。
    a.一个用户一个数据库,隔离级别最高、安全性最好,费用最高
    b.共享数据库,隔离数据架构,每个用户一个schema
    c.共享数据库,共享数据架构,共享database、schema,通过表tenantID区分租户数据


    五、MyCAT附录
    1、OLAP和OLTP对比

    2、关系型和非关系型数据库对比

    3、

  • 相关阅读:
    zzulioj--1716--毒(模拟水题)
    zzulioj--1715--土豪银行(贪心)
    35.Java中mian方法详解
    34.Java内存布局以及java各种存储区【详解】
    33.Java中static关键字
    32.java的this关键字
    31.Java构造方法
    30.Java对象的特证之一-封装
    29.Java匿名对象
    28.Java局部变量和成员变量
  • 原文地址:https://www.cnblogs.com/liuyakun/p/11210384.html
Copyright © 2020-2023  润新知