Mycat分布式数据库架构解决方案--schema.xml详解

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Mycat分布式数据库架构解决方案--schema.xml详解
该文件是一个包含Mycat的系统配置信息文件,对应的原码是SystemConfig.java。我们对该文件做一个详解,该文件在我们安装包中,/mycat/conf中(该文是基于“Mycat分布式数据库架构解决方案--Linux安装运行Mycat”)的后续,可以了解安装之后目录结构。想要对比详细配置文件也可以直接去github下载mycat源码,下载地址: https://github.com/MyCATApache/Mycat-Server
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <!-- schema标签主要用于定义Mycat实例中的逻辑库。Mycat可以有多个逻辑库,每个逻辑库都有自己相关的配置 -->
    <!-- 可以使用schema标签来划分不同的逻辑库,如果不配置schema标签,则所有的表配置都会属于同一个默认的逻辑库 -->
    <!-- name="TESTDB" 给Mycat定义逻辑库名称 -->
    <!-- checkSQLschema属性值为true的时候,如果我们执行语句select * from TESTDB.table;该设置会讲TESTDB截取掉,SQL变成select * from table;该规则只能截掉schema上指定的库 -->
    <!-- sqlMaxLimit属性设置为100时,每次执行的SQL语句如果没有加上limit语句,Mycat会自动加上limit 100;不设置就会返回查询到的所有信息 -->
    <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
        <!-- table标签定义了Mycat中的逻辑表,所有需要拆分的表都需要在table标签中定义。-->
        <!-- name属性定义逻辑表的名称,同一个schema标签中定义的table名字必须唯一 -->
        <!-- dataNode属性该属性的值需要与下面dataNode标签中的name属性的值相互对应。如果有多个值,使用','分隔 -->
        <!-- rule属性用于指定逻辑表要使用的规则,规则的名字定义在rule.xml中定义,必须与tableRule标签中name属性一致 -->
        <!-- ruleRequired属性用于指定表是否绑定分片规则,如果配置true,但没有配置具体的rule,程序会报错。-->
        <!-- primaryKey属性对应真实表的主键 -->
        <!-- type属性定义了逻辑表的类型,目前逻辑表只有全局表和普通表两种类型。全局表对应的配置值:global,不指定普通表 -->
        <!-- autoIncrement属性默认false,设置成为true时Mycat对表使用自增长主键 -->
        <!-- subTables属性目前Mycat在1.6版本以后才开始支持分表,并且dataNode在分表条件下只能配置一个,不支持各种条件的join关联查询语句 -->
        <!-- needAddLimit指定表是否需要自动在每个语句后面加上limit限制。如果设置为true,Mycat查询的时候自动给我们加上limit 100 -->
        <table name="travelrecord" needAddLimit="true" ruleRequired="true" autoIncrement="false" primaryKey="" dataNode="dn1,dn2,dn3" rule="auto-sharding-long"/>
    </schema>
    <!-- 一个schema代表一个逻辑库 -->
    <schema name="TEST" checkSQLschema="true" sqlMaxLimit="100">
        <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long"/>
    </schema>
    <!-- dataNode属性用于绑定逻辑库和具体的数据库。Mycat1.3如果配置了dataNode,则不可以配置分片表;
    Mycat的1.4和1.5版本可以配置默认分片,配置需要分片的表即可 -->
    <!-- name属性对应上面schema中间的DataNode的名字 -->
    <!-- database属性是指定真是数据库的名称 -->
    <!-- dataHost属性是对应数据库的Mycat逻辑库名称 -->
    <dataNode name="dn1" dataHost="Node1" database="db1"/>
    <dataNode name="dn2" dataHost="Node2" database="db2"/>
    <dataNode name="dn3" dataHost="Node3" database="db3"/>

    <!-- 它是schema.xml中最后一个标签,该标签在Mycat逻辑库中作为底层标签存在,直接定义了具体的数据库实例、读写分离和心跳语句。-->
    <!-- name属性是唯一标识dataHost标签,供上层标签使用 -->
    <!-- maxCon属性指定每个读写实例连接池的最大连接数。内嵌标签writeHost/readHost都会使用这个属性的值类实例化连接池的最大连接数 -->
    <!-- minCon属性指定每个读写实例连接池的最小连接数,初始化连接池的大小 -->
    <!-- balance属性属于负载均衡类型,目前有一下4中值
        balance="0" 不开启读写分离机制,所有的操作都发送到当前可以用的writeHost上。
        balance="1" 全部的readHost与stand by writeHost都参与select语句的负载均衡。
        balance="2" 所有的读操作都随机地在writeHost、readHost上分发。
        balance="3" 所有的读请求都随机分发到writeHost对应的readHost上执行,writeHost不负担读压力-->
    <!-- writeType属性有两种值 writeType="0" 所有的写操作都发送到配置的第1个writeHost上,writeHost1挂了则切到writeHost2上
         writeType="1" 所有的写操作都随机的发送到配置的writeHost上 -->
    <!-- dbType属性指定后端连接的数据库类型,目前除了支持二进制的MySQL协议,还支持使用JDBC连接的数据库,例如MongoDB.Oracle等 -->
    <!-- daDriver指定连接后端数据库使用的Driver,目前可选的有native和JDBC -->
    <!-- switchType属性
            switchType="-1"表示不自动切换。
            switchType="1"为默认值,表示自动切换。
            switchType="2"表示基于MySQL主从同步的状态决定是否切换。
            switchType="3"表示基于MySQL Galary Cluster的切换机制。-->
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0"
              dbType="mysql" tempReadHostAvailable="" dbDriver="native" switchType="1" slaveThreshold="100">
        <!-- heartbeat标签指明了用于后端数据库进行心跳检查的语句,MySQL使用select user() Oracle使用select 1 from dual-->
        <heartbeat>select user()</heartbeat>
        <!-- writeHost标签和readHost标签一样,都指定Mycat后端数据库的相关配置,用于实例化后端连接池。唯一的不同是,writeHost指定写实例,readHost指定读实例 -->
        <!-- host属性用于表示不同的实例,对于writeHost我们一般使用*M1;对于readHost,我们一般使用*S1。 -->
        <!-- url属性,连接后端实例的连接地址 -->
        <!-- user属性,后端存储实例的用户名 -->
        <!-- password属性,后端存储实例的密码 -->
        <!-- weight属性在readHost中作为读节点的权重 -->
        <!-- usingDecrypt属性同server.mxl中的usingDecrypt的配置 -->
        <writeHost host="hostM1" url="192.168.222.132:3306" user="root" password="123456"></writeHost>
    </dataHost>
</mycat:schema>
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
乐观锁在分布式数据库中如何与事务隔离级别结合使用
乐观锁在分布式数据库中如何与事务隔离级别结合使用
|
5天前
|
Serverless 决策智能 UED
构建全天候自动化智能导购助手:从部署者的视角审视Multi-Agent架构解决方案
在构建基于多代理系统(Multi-Agent System, MAS)的智能导购助手过程中,作为部署者,我体验到了从初步接触到深入理解再到实际应用的一系列步骤。整个部署过程得到了充分的引导和支持,文档详尽全面,使得部署顺利完成,未遇到明显的报错或异常情况。尽管初次尝试时对某些复杂配置环节需反复确认,但整体流程顺畅。
|
14天前
|
Cloud Native 关系型数据库 分布式数据库
PolarDB 分布式版 V2.0,安全可靠的集中分布式一体化数据库管理软件
阿里云PolarDB数据库管理软件(分布式版)V2.0 ,安全可靠的集中分布式一体化数据库管理软件。
|
4月前
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
403 0
|
1月前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
65 15
|
1月前
|
消息中间件 监控 Cloud Native
云原生架构下的数据一致性挑战与解决方案####
在数字化转型加速的今天,云原生架构以其轻量级、弹性伸缩和高可用性成为企业IT架构的首选。然而,在享受其带来的灵活性的同时,数据一致性问题成为了不可忽视的挑战。本文探讨了云原生环境中数据一致性的复杂性,分析了导致数据不一致的根本原因,并提出了几种有效的解决策略,旨在为开发者和企业提供实践指南,确保在动态变化的云环境中保持数据的完整性和准确性。 ####
|
1月前
|
传感器 算法 物联网
智能停车解决方案之停车场室内导航系统(二):核心技术与系统架构构建
随着城市化进程的加速,停车难问题日益凸显。本文深入剖析智能停车系统的关键技术,包括停车场电子地图编辑绘制、物联网与传感器技术、大数据与云计算的应用、定位技术及车辆导航路径规划,为读者提供全面的技术解决方案。系统架构分为应用层、业务层、数据层和运行环境,涵盖停车场室内导航、车位占用检测、动态更新、精准导航和路径规划等方面。
120 4
|
1月前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
88 1
|
2月前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
63 3
|
2月前
|
SQL 关系型数据库 分布式数据库
Citus 简介,将 Postgres 转换为分布式数据库
【10月更文挑战第4天】Citus 简介,将 Postgres 转换为分布式数据库
106 4