首先说下,因为本身不怎么推荐中间件,所以我对这东西也只是了解,业内mycat用的最好的应该顺风算一个,但是他们是做过二次开发的,咱菜鸡比不了,据说最近出来一个叫cetus的还不错,有空可以关注下

Ⅰ、Mycat安装走一走

这玩意就是一个jar包

  1. cd /usr/local/src
  2. yum install java-1.8.0-openjdk -y
  3. wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
  4. tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
  5. ./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的账号密码

  1. <user name="db_w">
  2. <property name="password">123456</property>
  3. <property name="schemas">db</property>
  4. </user>
  5. <user name="db_r">
  6. <property name="password">123456</property>
  7. <property name="schemas">db</property>
  8. <property name="readOnly">true</property>
  9. </user>

2.2 schema.xml——逻辑库定义和表以及分片定义的配置文件

  1. <?xml version="1.0"?>
  2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
  3. <mycat:schema xmlns:mycat="http://io.mycat/">
  4. <schema name="db" checkSQLschema="false" sqlMaxLimit="100">
  5. <table name="whh" dataNode="dbdn$1-3" rule="mod-long-id" />
  6. </schema>
  7. <dataNode name="dbdn$1-3" dataHost="host_n127.0.0.1_3306" database="db_$1-3" />
  8. <dataHost name="host_n127.0.0.1_3306" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  9. <heartbeat> select user() </heartbeat>
  10. <writeHost host="hostM" url="127.0.0.1:3306" user="root" password="123">
  11. </writeHost>
  12. </dataHost>
  13. </mycat:schema>

这里我们把whh这张表分成三个分片放到3306这个实例的db_1、db_2、db_3三个库中

2.3 rule.xml——分片算法

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- - - Licensed under the Apache License, Version 2.0 (the "License");
  3. - you may not use this file except in compliance with the License. - You
  4. may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
  5. - - Unless required by applicable law or agreed to in writing, software -
  6. distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
  7. WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
  8. License for the specific language governing permissions and - limitations
  9. under the License. -->
  10. <!DOCTYPE mycat:rule SYSTEM "rule.dtd">
  11. <mycat:rule xmlns:mycat="http://io.mycat/">
  12. <tableRule name="mod-long-id">
  13. <rule>
  14. <columns>a</columns>
  15. <algorithm>func1</algorithm>
  16. </rule>
  17. </tableRule>
  18. ...
  19. <function name="func1" class="io.mycat.route.function.PartitionByLong">
  20. <property name="partitionCount">8</property>
  21. <property name="partitionLength">128</property>
  22. </function>

根据字段a来分片

2.4 验证一把

  1. (db_w@127.0.0.1) [db]> explain select * from whh;
  2. +-----------+-----------------------------+
  3. | DATA_NODE | SQL |
  4. +-----------+-----------------------------+
  5. | dbdn1 | SELECT * FROM whh LIMIT 100 |
  6. | dbdn2 | SELECT * FROM whh LIMIT 100 |
  7. | dbdn3 | SELECT * FROM whh LIMIT 100 |
  8. +-----------+-----------------------------+
  9. 3 rows in set (0.01 sec)

Ⅲ、题外话

复杂查询不要用中间件去实现,如果选出来的结果集有50g,这意味着什么?意味着中间件需要50g的内存来存数据,比如做个order by什么的捞出来到中间件的数据很大,你有这么大的内存吗?

其实中间件对你的限制还是很多的,Mycat可以尝试用一下,这是开源社区里比较靠谱的一个中间件,但是olap场景下数据量太大,千万别用中间件,很多表关联,估计mycat都不支持这种语句

唉,分布式数据库运维很麻烦,sharding-jdbc吧,基于jdbc驱动层来做的分库分表,只支持java,不推荐,太老了,proxy吧不能实现分片,只能实现读写分离,简单的逻辑在业务里控制和在中间件没什么区别,复杂逻辑中间件也控制不了,反正不推荐中间件

Mycat了解下的更多相关文章

  1. 【无私分享:ASP.NET CORE 项目实战(第十三章)】Asp.net Core 使用MyCat分布式数据库,实现读写分离

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 MyCat2.0版本很快就发布了,关于MyCat的动态和一些问题,大家可以加一下MyCat的官方QQ群:106088787.我 ...

  2. MyCAT安装指南

    MyCAT安装指南 MyCAT 1.2版本 快速上手-安装指南(安装单机) Mycat的server和mysql位于同一台服务器,centos6.2.4环境 Mycat:10.191.116.175 ...

  3. net Core 使用MyCat分布式数据库,实现读写分离

    net Core 使用MyCat分布式数据库,实现读写分离 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 MyCat2.0版本很快就发布了,关于MyCat的动态和一些问题, ...

  4. MyCat 安装部署,实现数据库分片存储

    一.安装MySQL或MariaDB(本文以MariaDB为例) MySQL手动安装方法:点击查看 MariaDB安装: 1.下载MariaDB的repo $ vi /etc/yum.repos.d/M ...

  5. 分布式mysql中间件(mycat)

    1.   MyCAT概述 1.1 背景 随着传统的数据库技术日趋成熟.计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上.这时集中式数据库系统表现出它的不足: (1)集中 ...

  6. Mycat 分片规则详解--数据迁移及节点扩容

    使用的是 Mycat 提供的 dataMigrate 脚本进行对数据进行迁移和节点扩容,目前支持的 Mycat 是1.6 版本,由于 Mycat 是由 Java 编写的因此在做数据迁移及节点扩容时需要 ...

  7. Mycat对MySQL进行垂直水平分表分库,读写分离

    1.   MyCAT概述 1.1 背景 随着传统的数据库技术日趋成熟.计算机网络技术的飞速发展和应用范围的扩充,数据库应用已经普遍建立于计算机网络之上.这时集中式数据库系统表现出它的不足: (1)集中 ...

  8. mycat练习笔记

    学习要趁早,装逼莫等老. 刚刚开始接触到mycat, 当然要学习一下了.拿它来设置 mysql 的读写分离,分库分表,以及集群等. 官网: http://www.mycat.io/  有详情介绍,有G ...

  9. mycat数据中间件、nginx

      MyCat & Nginx  课程目标 目标1:理解MyCat分片,能够配置MyCat分片 目标2:掌握Nginx的安装与静态网站部署 目标3:掌握Nginx的静态网站部署 目标4:理解N ...

随机推荐

  1. JAVA中Integer的==和equals注意

    “equals”比较:equals(Object obj)方法,在equals(Object obj)方法中,会先判断参数中的对象obj是否是Integer类型的对象,如果是则判断值是否相同,值相同则 ...

  2. Could not resolve all dependencies for configuration ':classpath'

    我这里是copy过来的项目包名没有修改,导致依赖找不到

  3. Android内存泄漏杂谈

    内存泄漏:是指内存得不到GC的及时回收,从而造成内存占用过多.从而导致程序Crash,也就是常说的OOM. 一.static 先来看以下一段代码 public class DBHelper { pri ...

  4. Golang进程权限调度包runtime三大函数Gosched、Goexit、GOMAXPROCS

    转自:https://www.cnblogs.com/wt645631686/p/9656046.html runtime.Gosched(),用于让出CPU时间片,让出当前goroutine的执行权 ...

  5. Variable number of arguments (Varargs)

    A parameter of a function (normally the last one) may be marked with vararg modifier: fun <T> ...

  6. 下载Chrome商店和Youtube资源

    下载chrome浏览器插件 站点:http://cooal.cn/crx.php 操作步骤: 1.打开扩展介绍页面 (在 三道杠图标>工具>扩展程序 里相应扩展的"访问网站&qu ...

  7. android手机测试中如何查看内存泄露

    (一) 生成.hprof文件生成.hprof 文件的方法有很多,而且Android 的不同版本中生成.hprof 的方式也稍有差别,我使用的版本的是2.1,各个版本中生成.prof 文件的方法请参考: ...

  8. SpringBoot系统列 5 - 接口版本控制、SpringBoot FreeMarker模板引擎

    接着上篇博客的代码继续写 1.接口版本控制 一个系统上线后会不断迭代更新,需求也会不断变化,有可能接口的参数也会发生变化,如果在原有的参数上直接修改,可能会影响线上系统的正常运行,这时我们就需要设置不 ...

  9. HTML空格占位符

    == 普通的英文半角空格   ==   ==   == no-break space (普通的英文半角空格但不换行)   == 中文全角空格 (一个中文宽度)   ==   == en空格 (半个中文 ...

  10. Ubuntu下安装Kafka Manager

    参考 : kafka管理器kafka-manager部署安装 下载Kafka Manager,并进行打包,由于Kafka manager是由scala写的,所以需要由sbt的支持 git clone ...