作者:于权drawing | 来源:互联网 | 2023-09-06 18:54
什么是MyCat是目前最流行的分布式数据库中间插件为什么使用MyCat如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,
什么是MyCat
是目前最流行的分布式数据库中间插件
为什么使用MyCat
如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。
但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库。如何使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储,为应对此问题就出现了——MyCat
• 综上所述:Mycat作用为:能满足数据库数据大量存储;提高了查询性能
原理
可以用“拦截”一词形容,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析,如分片分析,路由分析,读写分离分析,缓存分析等,然后将此sql发往后端的真实数据库,并将返回的结果做适当处理,最终返回给用户。
前端用户可以把mycat看作是一个数据库代理,用mysql客户端工具(如Navicat)和命令访问,而后端支持mysql,sqlserver,oracle等主流数据库,用mysql native 协议和多个mysql服务器通信,也可用JDBC协议与大多数主流数据库服务器通信,其核心功能就是分库分表,即将一个大表水平分割为N个小表,真正的存储在后端Mysql服务器中或其它数据库中
分片
数据库分片指:通过某种特定的条件,将我们存放在一个数据库中的数据分散存放在不同的多个数据库(主机)中,这样来达到分散单台设备的负载,根据切片规则,可分为以下两种切片模式:
• 垂直切片
• 水平切片
将同一种表按照某种条件切分到不同的数据库中(这种方式最常用)
水平分片【最常用的,因此用这个】
MyCAT通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分片字段并绑定一个函数,来实现动态分片算法
• 1.Schema:逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。
• 2.Table:逻辑表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode。在此可以指定表的分片规则。
• 3.DataNode:MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联到后端某个具体数据库上
• 4.DataSource:定义某个物理库的访问地址,用于捆绑到Datanode上
配置文件详解
mycat主要有3个配置文件,rule.xml,schema.xml和server.xml
rule.xml配置文件
该文件主要定义了分片的规则,这个文件里面主要有tableRule和function这两个标签。在具体使用过程中可以按照需求添加tableRule和function
tableRule标签: "auto-sharding-long"> id rang-long
name:用户标识不同的分表规则
columns:指定按哪一列进行拆分
algorithm:该属性值为下面function标签中
name的属性值,定义了连接表规则的具体的路由算法,多个表规则可以连接到同一个路由算法上
function标签 "rang-long" class="org.opencloudb.route.function.AutoPartitionByLong">
"mapFile">autopartitionlong.txt
name:标识算法的名字 class:指定路由算法具体的类名字 property:具体算法用到的一些属性
schema.xml 配置文件
该文件是MyCat中重要的配置文件之一,管理着MyCat的逻辑库、表、分片规则、DataNode以及DataSource
举例:
• "1.0"?>
• "schema.dtd">
• "http://org.opencloudb/">
• "e3mall" checkSQLschema="false" sqlMaxLimit="100">
• "tb_item" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
•
• "dn1" dataHost="localhost1" database="db1" />
• "dn2" dataHost="localhost1" database="db2" />
• "dn3" dataHost="localhost1" database="db3" />
• "localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
• select user()
• "hostM1" url="192.168.20.216:3306" user="root" password="root">
•
•
•
schema标签:定义mycat实例中的逻辑库
table标签:定义mycat实例中的逻辑表
dataNode标签:定义mycat中的数据节点,也是通常说的数据分片
dataHost标签:作为最底层标签存在,定义了具体的真正存放数据的数据库实例,读写分离配置和心跳语句,我这只用来一台主键,所以只配了一个dataHost,如果你配了N个主机,就要配N个dataHost节点
server.xml配置文件
• !DOCTYPE mycat:server SYSTEM "server.dtd"> • "http://org.opencloudb/"> • • "defaultSqlParser">druidparser • • "user"> • "password">user • "schemas">e3mall • "readOnly">false • •
• system标签:内嵌的所有property标签都与系统配置有关
• defaultSqlParser:指定默认的解析器(如解析sql),目前的可用的取值有:druidparser和fdbparser。使用的时候可以选择其中的一种,目前一般都使用druidparser
• user标签
• name:逻辑用户名,即登录mycat的用户名
• password:逻辑密码,即登录mycat的用户名对应的密码
• schemas:逻辑数据库,可配置多个,用英文逗号隔开,对应于schema.xml文件中配置的逻辑数据库,两者对应
• readOnly:该数据库是否为只读,如果true就是只读
常见分片算法
枚举法
"sharding-by-intfile"> user_id hash-int
"hash-int" class="io.mycat.route.function.PartitionByFileMap"> "mapFile">partition-hash-int.txt "type">0 "defaultNode">0
partition-hash-int.txt 配置:
上面columns 标识将要分片的表字段,algorithm 分片函数,
其中分片函数配置中,mapFile标识配置文件名称,type默认值为0,0表示Integer,非零表示String,
所有的节点配置都是从0开始,及0代表节点1
defaultNode: 默认节点:小于0表示不设置默认节点,大于等于0表示设置默认节点,结点为指定的值
默认节点的作用:枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点
如果不配置默认节点(defaultNode值小于0表示不配置默认节点),碰到
不识别的枚举值就会报错 :like this:can't find datanode for sharding column:column_name val:ffffffff
固定分片hash算法
"rule1">
user_id
func1
"func1" class="io.mycat.route.function.PartitionByLong">
"partitionCount">2,1
"partitionLength">256,512
配置说明:
上面columns 标识将要分片的表字段,algorithm 分片函数,
partitionCount 分片个数列表,partitionLength 分片范围列表
分区长度:默认为最大2^n=1024 ,即最大支持1024分区
约束 : count,length两个数组的长度必须是一致的。
1024 = sum((count[i]*length[i])). count和length两个向量的点积恒等于1024
求模法
"mod-long">
user_id
mod-long
"mod-long" class="io.mycat.route.function.PartitionByMod">
"count">3
配置说明:
上面columns 标识将要分片的表字段,algorithm 分片函数,
此种配置非常明确即根据id与count(你的结点数)进行求模预算,相比方式1,此种在批量插入时需要切换数据源,id不连续
推荐阅读
-
本文目录一览:1、数据库有哪几种2、数据库软件 ...
[详细]
蜡笔小新 2024-09-29 17:57:01
-
一、问题开发中遇到将其它数据库数据插入到mysql数据库表中一直会报类似如下错误:Incorrectstringvalue:\xE6\x88\x91forcolumn ...
[详细]
蜡笔小新 2024-09-29 10:16:16
-
-
一安装配置1.配置文件mongod.cfg(路径:D:\data\config\mongod.cfg)如下: systemLog:destination ...
[详细]
蜡笔小新 2024-09-26 14:55:53
-
今天说说如何搭建HTTP服务器!目的:使用“多IP地址”方法实现多个网站。使用“主机头名”方法实现多个网站。使用“多端口”方法实现多个网站。这回用图形界 ...
[详细]
蜡笔小新 2024-09-26 10:06:59
-
越来越多的企业和个人都在拥有属于自己的网站门户,首当其冲的就是你得知晓几个网站方面的专业术语,先是中就有好多的客户不明白这些,造成误会是正常的,那不如我们对它有个大致的了解,这样就不容易感觉 ...
[详细]
蜡笔小新 2024-09-30 23:46:58
-
MYSQL的错误日志的详细度其实不少人是忽略的,实际上MYSQL这边的关于告警和错误日 ...
[详细]
蜡笔小新 2024-09-29 20:04:35
-
背景:数据库服务器更换,1、数据库迁移(BACKUPRESTORE);2、数据库登录名用户迁移(注意孤立用户);3、作业迁移数据库迁移,备份数据库、拷贝备份文件到新服务器,还原数据 ...
[详细]
蜡笔小新 2024-09-29 15:47:02
-
我使用Laravel5时遇到问题.当我运行“phparitsanmigrate”时,我收到了这个错误***************************************A ...
[详细]
蜡笔小新 2024-09-29 13:13:29
-
建议使用之前把官方的文档全部通读一遍这里提供一个我的网盘地址oneproxy百度网盘0.先对oneproxy有个大概的了解,知道他所处的位置1.MySQL服务器创建t ...
[详细]
蜡笔小新 2024-09-28 20:59:09
-
配置OracleACFS集群文件系统 2012-07-1010:18:39标签:asmacfs版权声明:原创作品,谢绝转载!否则将追究法律责任。 ...
[详细]
蜡笔小新 2024-09-28 16:33:10
-
终端系统服务器部署一、安装IIS依次单击“开始”菜单—控制面板—添加和删除程序—添加和删除windows组件,出现窗口如下图a所示,将“应用程序服 ...
[详细]
蜡笔小新 2024-09-28 09:03:27
-
11.1服务网关的概念11.1.1什么是微服务网关11.1.2作用和应用场景11.2常见的API网关实现方式11.3基于Nginx的网关实现IP地址映射到路径,统一 ...
[详细]
蜡笔小新 2024-09-27 23:59:10
-
之前学习链表数据结构的时候,写过(相信很多人都做过)dos窗口版的学生管理系统,通过输入数字来实现CURD学生的信息,顶多就是把数据写入文件来存储数据 ...
[详细]
蜡笔小新 2024-09-26 20:22:05
-
本文由编程笔记#小编为大家整理,主要介绍了MySQL笔记1|数据库17问17答相关的知识,希望对你有一定的参考价值。 ...
[详细]
蜡笔小新 2023-10-17 23:53:15
-
1、数据库基本知识概念:数据库:database(DB),是一种存储数据的仓库数据库是根据数据结构组织、存储和 ...
[详细]
蜡笔小新 2023-10-14 19:23:49
-