存储海量数据(mycat核心概念以及进阶)

编程

目标

Ø 掌握数据库的大数据处理方案和HA
Ø 掌握为什么需要数据库中间件,何为数据库中间件
Ø 掌握不同场景所需的数据库中间件特性
Ø 掌握数据库中间件设计要点

 

核心概念理解和工作原理

回顾

应对大数据和高并发的处理,在分库分表之后,如何解决对DAO层数据访问的影响

对数据库中间件的能力要求很高

Ø 1 要能解析SQL
Ø 2 能支持读写分离
Ø 3 能支持从库读的负载均衡
Ø 4 支持分库操作
Ø 5 支持分表操作
Ø 6 支持跨库关联查询
Ø 7 对事务处理的支持
Ø 8 主键ID生成
Ø 9 数据源管理

Mycat版本说明

Ø Mycat-mini-monitor项目开源了,又一款Mycat监控!
Ø Mycat-mini-monitor-1.0.0 版本发布
Ø Mycat-server-1.6.6-release 版本发布
Ø Mycat-server-1.6.6-test 版本发布
Ø Mycat-server-1.6-release 版本发布
Ø Mycat-server-1.5-release 版本发布
Ø Mycat-server-1.4-release 版本发布
Ø Mycat-server-1.3-release 版本发布
Ø Mycat-web(eye) 版本发布

Mycat工作原理

Mycat 的原理: ‚拦截‛,它拦截了用户发送过来的SQL 语句,首先解析SQL 语句,做一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户;

Mycat架构

核心概念

数据库中间件:对应用,mycat就是数据库服务,mycat是后端数据库集群的代理

逻辑概念:

Ø 逻辑库:mycat数据库服务中定义、管理的数据库
Ø 逻辑表:逻辑库中包含的需分库分表存储的表
Ø dataNode:数据节点(分片节点),逻辑表分片的存放节点。
Ø dataHost: 数据主机(节点主机),数据节点所在的主机。

物理概念

Ø writeHost:写主机,真实的数据库服务主机描述
Ø readHost:读主机,真实的数据库服务主机描述

schema.xml

<mycat:schema>

<schema name="testdb">

<table name="orders" primaryKey="ID"type="global" dataNode="dn1,dn2" />

</schema>

<dataNode name="dn1" dataHost="dhost1" database="db1" />

<dataHost name="dhost1" ...>

<heartbeat>select user()</heartbeat>

<writeHost host="hostM1" url="localhost:3306"...>

<readHost host="hostS2" url="192.168.1.2:3306".../>

</writeHost>

</dataHost>

</mycat:schema>

schema配置-schema

逻辑库 schema

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">

</schema>

</mycat:schema>

MyCat 可以有多个逻辑库,每个逻辑库都有自己的相关配置。 如果不配置schema 标签,所有的表配置,会属于同一个默认的逻辑库。

schema配置-schema元素属性说明

schema配置-table

逻辑表 table

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">

<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />

<table name="customer" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile">

<childTable name="orders" primaryKey="ID" joinKey="customer_id" parentKey="id">

<childTable name="order_items" joinKey="order_id" parentKey="id" />

</childTable>

</table>

</schema>

Table标签定义了MyCat中的逻辑表,所有需要拆分的表都需要通过这个标签定义。

schema配置-table元素属性说明

schema配置-childTable标签

<table name="customer" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile">

<childTable name="orders" primaryKey="ID" joinKey="customer_id" parentKey="id">

<childTable name="order_items" joinKey="order_id" parentKey="id" />

</childTable>

</table>

childTable 标签用于定义E-R 分片的子表,通过标签上的属性与父表进行关联。

schema配置-dataHost

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"

writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<!-- can have multi write hosts -->

<writeHost host="hostM1" url="localhost:3306" user="root" password="123456">

<!-- can have multi read hosts -->

<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />

</writeHost>

</dataHost>

dataHost定义Mycat中的数据主机,数据主机定义中定义了具体的数据库服务、读写分离配置 和心跳语句。这是与物理数据库服务关联的地方。

schema配置-dataHost元素属性说明

schema配置-heartbeat

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" 

dbDriver="native" switchType="1"slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<!-- can have multi write hosts -->

<writeHost host="hostM1" url="localhost:3306" user="root" password="123456">

<!-- can have multi read hosts -->

<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />

</writeHost>

</dataHost>

1. 这个标签内指明用于和后端数据库进行心跳检查的语句
如:MYSQL 可以使用select user(),Oracle 可以使用select 1 from dual 等。
2. 这个标签还有一个connectionInitSql 属性,主要是当使用Oracle数据库时,需要执行的初始化SQL语句就放到这里。 
如:alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"
3.主从切换的语句必须是:show slave status

schema配置-writeHost readHost

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"

writeType="0" dbType="mysql" dbDriver="native" switchType="1"

slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<!-- can have multi write hosts -->

<writeHost host="hostM1" url="localhost:3306" user="root" password="123456">

<!-- can have multi read hosts -->

<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />

</writeHost>

</dataHost>

这两个标签都指定后端数据库的相关配置给mycat,用于实例化后端连接池。writeHost 指定写实例、readHost 指定读实例。
在一个dataHost 内可以定义多个writeHost 和readHost。但是,如果writeHost 指定的后端数据库宕机,那么这个writeHost 绑定的所有readHost 都将不可用。另一方面,由于这个writeHost 宕机系统会自动的检测到,并切换到备用的writeHost 上去。

schema配置-writeHost readHost属性说明

加密密码,执行mycat jar 程序(1.4.1 以后)

java -cp Mycat-server-1.4.1-dev.jar io.mycat.util.DecryptUtil 1:host:user:password

Mycat-server-1.4.1-dev.jar 为mycat download 下载目录的jar

1:host:user:password 中1 为db 端加密标志,host 为dataHost 的host 名称

 

以上是 存储海量数据(mycat核心概念以及进阶) 的全部内容, 来源链接: utcz.com/z/511472.html

回到顶部