加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

分库分表,读写分离后,数据库中间件扮演了一个怎样的角色?

发布时间:2019-01-31 14:12:28 所属栏目:MySql教程 来源:李立敏
导读:副标题#e# 分库分表,读写分离会带来哪些问题? 前面一篇文章图解分布式系统架构(看推荐阅读)大概讲了一下分库分表,以及读写分离出现的场景,分库分表为了解决高并发和海量数据的问题。 分库后会出现新的问题 1、跨库join问题 如有2个库,订单库,用户库

autopartition-long.txt详细的分片策略

  1. # range start-end ,data node index  
  2. # K=1000,M=10000.  
  3. 00-500M=0  
  4. 500M-1000M=1  
  5. 1000M-1500M=2 

这个配置的意思是,id在0到500w放在第一个分片,以此类推

小编这里用Navicat(数据库连接工具)连接到本地的mycat

主机:localhost

端口:8066

用户名:root(server.xml中配置好的用户名密码)

密码:123456

看到有一个TestDB库,在这个库里面执行建表语句

  1. CREATE TABLE `tb_test` (  
  2.   `id` int(11) NOT NULL,  
  3.   `name` varchar(255) DEFAULT NULL,  
  4.   PRIMARY KEY (`id`)  
  5. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 

然后到对应的物理数据库db1,db2,db3上看,3个库都有了这个表。

在逻辑数据库中插入如下三条数据

  1. insert into tb_test (id, name) values (1, "1");  
  2. insert into tb_test (id, name) values (5000001, "5000001");  
  3. insert into tb_test (id, name) values (10000001, "10000001"); 

可以看到id为1的数据插入到物理数据库中的db1,id为5000001的数据插入到db2,id为10000001的数据插入到db3

在逻辑数据库中执行如下语句又能拿到这3条记录

  1. select id, name from tb_test 

执行如下语句,可以看到mycat从三个数据库中取了记录,LIMIT 100是因为schema.xml中配置了sqlMaxLimit=“100”

  1. explain select id, name from tb_test 

分库分表,读写分离后,数据库中间件扮演了一个怎样的角色?

有了mycat以后,我们的数据库地址配置成mycat即可,它帮我们做了很多,其他各种分片规则,读写分离等的配置就不再演示,理解整个框架的大概运行流程就行

最后再分享一个知识点,mycat1.5 开始会支持本地 xml 启动,以及从 zookeeper 加载配置转为本地 xml 的两种方式,即原来分享的zookeeper可以用作配置中心

【编辑推荐】

  1. 高吞吐低延迟的 NoSQL 数据库——Scylla 3.0 发布
  2. MySQL插入性能优化
  3. MySQL设计缺陷,窃取文件易如反掌
  4. MySQL性能突发事件问题排查技巧
  5. 一文说尽MySQL事务及ACID特性的实现原理
【责任编辑:庞桂玉 TEL:(010)68476606】
点赞 0

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读