Mycat了解下
首先说下,因为本身不怎么推荐中间件,所以我对这东西也只是了解,业内mycat用的最好的应该顺风算一个,但是他们是做过二次开发的,咱菜鸡比不了,据说最近出来一个叫cetus的还不错,有空可以关注下
Ⅰ、Mycat安装走一走
这玩意就是一个jar包
cd /usr/local/src
yum install java-1.8.0-openjdk -y
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
./mycat/bin/mycat start
默认启动8066端口,也就是说8066就是个中间件,它的通信协议就是mysql的,咱们是可以通过mysql的协议(用mysql的原生客户端)去访问的,也就是说直接连8066端口就行
连上去会发现Server version:是5.6.29,这不是说server是5.6.29,是指通信协议是5.6.29
和直接用mysql是一样的,这就是对业务透明,至于库里面的表是怎么分的,你并不知道
Ⅱ、Mycat配置
所有的配置文件都是xml,这是个不好的点,这个年代谁还用xml啊,改成json也好啊,而且是不持久化的,元数据不存在数据库中,是通过xml来存放的,比较差,吐槽一下
咱这里只看最重要的三个配置文件
2.1 server.xml——Mycat服务参数调整和用户授权的配置文件
配置mycat的账号密码
<user name="db_w">
<property name="password">123456</property>
<property name="schemas">db</property>
</user>
<user name="db_r">
<property name="password">123456</property>
<property name="schemas">db</property>
<property name="readOnly">true</property>
</user>
2.2 schema.xml——逻辑库定义和表以及分片定义的配置文件
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="db" checkSQLschema="false" sqlMaxLimit="100">
<table name="whh" dataNode="dbdn$1-3" rule="mod-long-id" />
</schema>
<dataNode name="dbdn$1-3" dataHost="host_n127.0.0.1_3306" database="db_$1-3" />
<dataHost name="host_n127.0.0.1_3306" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat> select user() </heartbeat>
<writeHost host="hostM" url="127.0.0.1:3306" user="root" password="123">
</writeHost>
</dataHost>
</mycat:schema>
这里我们把whh这张表分成三个分片放到3306这个实例的db_1、db_2、db_3三个库中
2.3 rule.xml——分片算法
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
<tableRule name="mod-long-id">
<rule>
<columns>a</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
...
<function name="func1" class="io.mycat.route.function.PartitionByLong">
<property name="partitionCount">8</property>
<property name="partitionLength">128</property>
</function>
根据字段a来分片
2.4 验证一把
(db_w@127.0.0.1) [db]> explain select * from whh;
+-----------+-----------------------------+
| DATA_NODE | SQL |
+-----------+-----------------------------+
| dbdn1 | SELECT * FROM whh LIMIT 100 |
| dbdn2 | SELECT * FROM whh LIMIT 100 |
| dbdn3 | SELECT * FROM whh LIMIT 100 |
+-----------+-----------------------------+
3 rows in set (0.01 sec)
Ⅲ、题外话
复杂查询不要用中间件去实现,如果选出来的结果集有50g,这意味着什么?意味着中间件需要50g的内存来存数据,比如做个order by什么的捞出来到中间件的数据很大,你有这么大的内存吗?
其实中间件对你的限制还是很多的,Mycat可以尝试用一下,这是开源社区里比较靠谱的一个中间件,但是olap场景下数据量太大,千万别用中间件,很多表关联,估计mycat都不支持这种语句
唉,分布式数据库运维很麻烦,sharding-jdbc吧,基于jdbc驱动层来做的分库分表,只支持java,不推荐,太老了,proxy吧不能实现分片,只能实现读写分离,简单的逻辑在业务里控制和在中间件没什么区别,复杂逻辑中间件也控制不了,反正不推荐中间件
Mycat了解下的更多相关文章
- 【无私分享:ASP.NET CORE 项目实战(第十三章)】Asp.net Core 使用MyCat分布式数据库,实现读写分离
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 MyCat2.0版本很快就发布了,关于MyCat的动态和一些问题,大家可以加一下MyCat的官方QQ群:106088787.我 ...
- MyCAT安装指南
MyCAT安装指南 MyCAT 1.2版本 快速上手-安装指南(安装单机) Mycat的server和mysql位于同一台服务器,centos6.2.4环境 Mycat:10.191.116.175 ...
- net Core 使用MyCat分布式数据库,实现读写分离
net Core 使用MyCat分布式数据库,实现读写分离 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 MyCat2.0版本很快就发布了,关于MyCat的动态和一些问题, ...
- MyCat 安装部署,实现数据库分片存储
一.安装MySQL或MariaDB(本文以MariaDB为例) MySQL手动安装方法:点击查看 MariaDB安装: 1.下载MariaDB的repo $ vi /etc/yum.repos.d/M ...
- 分布式mysql中间件(mycat)
1. MyCAT概述 1.1 背景 随着传统的数据库技术日趋成熟.计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上.这时集中式数据库系统表现出它的不足: (1)集中 ...
- Mycat 分片规则详解--数据迁移及节点扩容
使用的是 Mycat 提供的 dataMigrate 脚本进行对数据进行迁移和节点扩容,目前支持的 Mycat 是1.6 版本,由于 Mycat 是由 Java 编写的因此在做数据迁移及节点扩容时需要 ...
- Mycat对MySQL进行垂直水平分表分库,读写分离
1. MyCAT概述 1.1 背景 随着传统的数据库技术日趋成熟.计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上.这时集中式数据库系统表现出它的不足: (1)集中 ...
- mycat练习笔记
学习要趁早,装逼莫等老. 刚刚开始接触到mycat, 当然要学习一下了.拿它来设置 mysql 的读写分离,分库分表,以及集群等. 官网: http://www.mycat.io/ 有详情介绍,有G ...
- mycat数据中间件、nginx
MyCat & Nginx 课程目标 目标1:理解MyCat分片,能够配置MyCat分片 目标2:掌握Nginx的安装与静态网站部署 目标3:掌握Nginx的静态网站部署 目标4:理解N ...
随机推荐
- springboot项目logback配置文件示例
logback-spring.xml <?xml version="1.0" encoding="UTF-8"?> <configuratio ...
- Spring Boot系列——死信队列
在说死信队列之前,我们先介绍下为什么需要用死信队列. 如果想直接了解死信对接,直接跳入下文的"死信队列"部分即可. ack机制和requeue-rejected属性 我们还是基于上 ...
- Python源码中的PyCodeObject
1.Python程序的执行过程 Python解释器(interpreter)在执行任何一个Python程序文件时,首先进行的动作都是先对文件中的Python源代码进行编译,编译的主要结果是产生的一组P ...
- 设置GRUB密码以防止单用户模式下root密码被恶意更改
在使用LInux系统的时候可能会发生忘记root密码的情况,通常管理员会进入单用户模式下进行重置root密码.那么问题来了,既然管理员可以进入单用户模式,如果恶意用户可以接触的到计算机的话毫无疑问也是 ...
- cx_Oracle读写clob
cx_Oracle读写clob 读 读到相应字段后,使用read()方法即可:例如读取到clob对象a,想要查看其内容,使用下列代码即可: a.read() 写 参考下列代码: id='123' cl ...
- phpunit assert断言分类整理
布尔类型 方法名 含义 参数 返回值 assertTrue 断言为真 assertFalse 断言为假 NULL类型 方法名 含义 参数 返回值 assertNull 断言为NULL ...
- linux下python3调用c代码或者python3调用c++代码
前几篇的blog都是为了这个实验做基础,先说 原因是python调用数据库150w条数据22s,然后处理数据,其实就2个简单的for循环,65s 需求: 1. python调用c++函数 2. c++ ...
- yii2的数据库读写分离配置
简介 数据库读写分离是在网站遇到性能瓶颈的时候最先考虑优化的步骤,那么yii2是如何做数据库读写分离的呢?本节教程来给大家普及一下yii2的数据库读写分离配置. 两个服务器的数据同步是读写分离的前提条 ...
- 同时安装anaconda2和anaconda3
安装的过程请参考 Ubuntu14.04下同时安装Anaconda2与Anaconda3 启动的时候cd到$HOME/anaconda2/envs/py3k/bin下 source activate ...
- Hive学习笔记——安装和内部表CRUD
1.首先需要安装Hadoop和Hive 安装的时候参考 http://blog.csdn.net/jdplus/article/details/46493553 安装的版本是apache-hive-2 ...