Mycat 学习小结

2023-11-19

Mycat 学习小结


Mycat 是什么

Mycat 是一个彻底开源的面向企业应用开发的大数据库集群,支持事务,ACID,是可以替代Mysql 的加强版数据库 。Mycat被视为 Mysql 集群的企业级数据库,用来替代昂贵的 Oracle 集群。它是融合了内存缓存技术、HDFS大数据的新型SQL server,是结合了传统数据库和新型分布式数据仓库的新一代企业级数据库产品,是一个数据库中间件。

为什么需要分布式数据库

  • 透明性:用户不关心数据的逻辑分区和对应物理位置,即对应用的透明性
  • 数据冗余性: 分布式节点存在冗余数据,提高可靠性
  • 易于拓展:能够方便的通过水平/垂直拓展提高系统整体性能
  • 自治性:各节点的数据由本地DBMS管理

Mycat类似产品

  • Amoeba:一个以Mysql为底层数据存储,对应用提供Mysql 协议接口的Proxy。
  • Cobar:阿里对Amoeba的改进版,存在一些问题,从2013停止维护
  • Heisenberg:也源于Cobar
  • Atlas :360团队研发的数据库中间件,也是基于Mysql协议,但用户少
  • Mango:轻量级急速数据层访问框架

Mycat的优势 可以从上图看出来如下

  • 高可用性与Mysql读写分离 :当数据库服务器宕机,如果设置了writehost备用服务器,则会自动切换。高可用性也是建立在底层数据库的主从备份功能的开启;而对于读写分离,也是十分灵活,可以保证 增删改 以及建立存储过程在 主写数据库服务器,而根据(balance参数的设置)可以指定读请求到底发往那个(读 or 写)服务器,例如要求刚插入数据就要被查出来的时候,可以指定读请求发往刚刚写入数据的写服务器,来满足特殊需求。
  • 业务数据分级存储:可以将不同重要等级的数据 存储在不同类型的数据库(oracle,mysql,mongodb)
  • 支持水平和垂直分片
  • 数据库路由器:基于Mysql实例的连接池复用机制,可以让每个应用共享一个Mysql实例的所有连接池
  • 支持缓存配置(不用去数据库缓存,中间件缓存,支持ehcache,mapdb,leveldb)
  • 前后端使用了AIO/NIO技术
  • 使用ER分表策略

Mycat关键名词

  • 逻辑库:应用看到的数据库是一个整体的数据库
  • 逻辑表:类似于逻辑库的概念,应用所看到的表对象
  • 分片表:经过切分的表
  • 非分片表
  • ER表 :子表的记录与其所关联的父表的记录存放在同一个数据分片上,避免跨库查询
  • 全局表:每个数据节点都有的字典表,一般表中数据量不大,也很少修改
  • 分片节点(dataNode):表分片后所在的数据库
  • 节点主机(dataHost):分片节点最后物理上的位置信息

Mycat学习过程中的几个记录

  • 在实现分库分表的情况下,数据库自增主键如何保证是全局唯一的,Mycat提供了两种解决思路:(1)本地文件方式:即本地记录Id的增减情况,速度快,但会从在宕机后重启,ID又会从配置文件的初始值重新开始
    ,即出现重复(2)数据库方式记录主键自增情况
  • Mycat 分片规则十分灵活,足足有十几种,(相比Mongdb的分片规则,没法指定分片规则)
  • Mycat把自己包装成 Mysql的服务器端,可以通过Mysql命令行登录方式(9066管理端口)进行登录管理
  • Mycat 控制后台数据库 读写分离 和 负载均衡 由 balance属性决定,但是需要注意的是需要底层数据库 开启主从复制
  • Mycat 主从切换,是通过心跳反应监听,自动切换,需要注意的是readHost是从属于writeHost,一旦writeHost故障,对应readHost也会失效。而且原来主写节点失效了,恢复上线后,会作为备用写节点工作
  • Mycat 中的注解机制十分有意思(1)通过balance 注解指定负载均衡(2)通过master/slave注解指定语句在主/从哪个服务器上执行(3)SQL注解更加强大,通过注解语句指定在哪台具体机子上执行(注解语句中要求含有分片键)(4)schema 和DataNode注解(5)catlet注解用于跨库查询
  • Mycat 当前版本的事务是弱XA事务,也就是二阶段提交,一般情况下,和传统式事务性能差不多
  • Mycat 跨库Join的实现(1)全局表(每个节点都有数据备份)(2)E-R分片(3)catlet-HBT:自己去自定义查询细节(4)shareJoIn:(两表连接的一个查询策略)

Mycat总结

Mycat是一个很好的中间件,对应用隐藏了分布式数据库的细节,但是也存在着一些弊端

  • Mycat文档中要求我们尽量能不分片就不分片,1000万以内的表,不建议分片,通过合适的索引,读写分离等方式,可以很好的解决性能问题
  • 分片数量尽量少,分片尽量均匀分布在多个DataHost上,因为一个查询SQL跨分片越多,则总体性能越差,虽然要好于所有数据在一个分片的结果,只在必要的时候进行扩容,增加分片数量
  • 分片规则需要慎重选择,分片规则的选择,需要考虑数据的增长模式,数据的访问模式,分片关联性问题,以及分片扩容问题,最近的分片策略为范围分片,枚举分片,一致性Hash分片,这几种分片都有利于扩容
  • 批量插入时,如果根据分片键发送到太多个分片,性能也会下降,比如10个分片(分片函数为%10)
  • 对于如何分库分表,需要架构师对于业务十分熟悉,根据业务来具体对待问题。
  • 非分片字段查询查询问题,如果Mycat不知道往哪个分片上发送查询,就会往所有分片上发送,性能下降,所以建议查询语句条件中包含分片键!
  • 分页排序问题:当table表有多个分片时,语句为select * from table limit 2;返回结果依赖于每个分片的数据包达到顺序,所以不确定;当语句为select * from table order by id limit m,n;MYCAT内部为了保证数据的查询正确性,会将语句改写为select * from table order by id limit 0,m+n,可以看出当m,n很大时,在每个节点执行的话,对性能影响之大,具体参考http://blog.csdn.net/u013235478/article/details/53178657这篇博客。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mycat 学习小结 的相关文章

  • ADC 读取电位器旋钮,用回差消除临界值档位跳动

    就是比如 用电位器当旋钮做风扇调速 划分出10 个速度档位 对应10 个ADC 转换结果的阈值 如果直接比较阈值 当旋钮拧到临近阈值的地方时 ADC 结果的微小跳动会导致风扇档位在两个级别之间不停左右横跳 因此想到了利用回差来消除抖动 回差
  • Pycharm官网下载安装

    下载链接 pycharm官网 https www jetbrains com pycharm 然后来到这个界面 点击Download 下载按钮 然后点击开源版本 Community 下载安装就好了 接下来就创建项目 点击Create 这样就
  • FISCO BCOS 2.0新特性解读

    FISCO BCOS是完全开源的联盟区块链底层技术平台 由金融区块链合作联盟 深圳 简称金链盟 成立开源工作组通力打造 开源工作组成员包括博彦科技 华为 深证通 神州数码 四方精创 腾讯 微众银行 亦笔科技和越秀金科等金链盟成员机构 代码仓
  • Nacos、ZooKeeper和Dubbo的区别

    Nacos ZooKeeper和Dubbo是三个不同的分布式系统组件 它们之间有以下几点区别 功能定位 Nacos主要提供服务发现 配置管理和服务治理等功能 而ZooKeeper主要是分布式协调服务 提供了分布式锁 分布式队列等原语 Dub

随机推荐

  • 本地部署LLaMA-中文LoRA部署详细说明

    在Ubuntu18 04 部署中文LLaMA模型 环境准备 硬件环境 AMD 5950X 128GB RAM RTX 3090 24G VRAM 操作系统 Ubuntu 18 04 编译环境 可选 llama cpp 编译 cd llama
  • GoJS学习

    简介 GoJS是一个可视化JavaScript库 用于浏览器中创建交互图形 比如流程图 树图 关系图 力导图等等 GoJS不依赖于任何JS库或框架 例如bootstrap jquery等 可与任何HTML或JS框架配合工作 甚至可以不用框架
  • Cuda 代码中的 函数前缀 device global host 使用

    众所周知 CUDA并行可以使代码加速很多倍 其文件类型为 cu 结尾 在编写cu 文件时 常用的函数前缀关键字有 device global host host C或者C 中相同 是由CPU调用 由CPU执行的函数 global 表示一个内
  • 为啥国内互联网公司都用centos而不是ubuntu?

    一直以来都很好奇ubuntu和centos有啥区别 上学时接触的都是ubuntu 自己每次装virtual box的时候都会下个ubuntu 但是公司的服务器上装的都是centos 今天查了下知乎网友的精彩回答 呵呵 简单总结下主要有几个原
  • 解释执行与编译执行语言有什么区别?

    一 主体不同 1 编译执行 由编译程序将目标代码一次性编译成目标程序 再由机器运行目标程序 2 解释执行 将源语言直接作为源程序输入 解释执行 解释一句后就提交计算机执行一句 并不形成目标程序 二 优势不同 1 编译执行 相比解释执行编译执
  • 常用的偏微分方程

    偏微分方程通常包含两个以上的自变量 若自变量同时间相关 或者无关 称其为发展型 或者稳态 的 下面 我们罗列出一些典型的偏微分方程 如 热传导方程 一阶双曲守恒律方程 二阶波动方程 椭圆型偏微分方程等 抛物型偏微分方程通常刻画 个物理系统的
  • 前端学科面试题大全

    作用域和值类型引用类型的传递 变量作用域 作用域变量访问区域 变量值存在栈中 变量赋值相当于值赋值 值传递与引用传递有哪些区别 函数内部 变量会先声明 形式参数变量声明提升 整个函数体有var声明的变量 如果没有访问全局定义的num2 函数
  • 服务器环境初始化配置

    工程实践经验积累 服务器环境初始化配置 1 新建环境 新建环境 是为了使自己的程序在一个相对独立的环境中运行 不影响服务器上其他用户 并不受其他用户影响 新建环境的语句为 conda create n your env name pytho
  • 【Unity Shader】屏幕后处理1.0:调整亮度/饱和度/对比度

    1 Unity中实现屏幕特效的基本步骤 什么叫屏幕后处理 Screen post processing effects 渲染完整个场景得到屏幕图像后对图像进行一系列操作 实现各种屏幕特效 这一步我们可以添加很多例如景深 Depth of F
  • session销毁

    session invalidate session invalidate的销毁是把这个session所带的用户彻底的销毁 这个session跟用户已经紧密联合在一起 所以就一起销毁了 这样就算换了个session 也是登陆不了的 以前我的
  • 设计模式之享元模式

    享元模式 就是共享技术 对于系统中存在大量相同的对象 把他们抽取成一个对象放在缓存中进行使用 这样可以大大节省系统资源 例如 围棋棋盘上有两种棋子 一个是黑子 一个是白子 如果在下棋的时候每下一个棋子就要new一个棋子对象 那么就会有大量的
  • C#比较两个list集合,两集合同时存在或A集合存在B集合中无

    using System using System Collections Generic using System Linq using System Text using System Threading using System Th
  • iOS灵动岛【电商秒杀】开发实践

    一 基本概述 名词基础知识 苹果在 iPhone 14 Pro 系列中增加一个灵动岛 主要目的是隐藏挖孔造型的高端 感叹号屏 通过动画的视觉差异 用户找不到原来的挖孔屏 灵动岛是一种巧妙的设计 模糊了软件和硬件之间的界限 它可以在锁屏的情况
  • Python: 转换文本编码

    最近在做周报的时候 需要把csv文本中的数据提取出来制作表格后生产图表 在获取csv文本内容的时候 基本上都是用with open filename encoding UTF 8 as f 来打开csv文本 但是实际使用过程中发现有些csv
  • python网络爬虫实战——实时抓取西刺免费代理ip

    参考网上高手示例程序 利用了多线程技术 Python版本为2 7 coding utf8 import urllib2 import re import threading import time rawProxyList checkedP
  • Git切换分支报错:error: you need to resolve your current index first 以及needs merge

    当想从子分支切换到dev分支时git checkout dev 报错 error you need to resolve your current index first xxx java needs merge xxx xml needs
  • c#:ThreadPool实现并行分析,并实现线程同步结束

    背景 一般情况下 经常会遇到一个单线程程序时执行对CPU MEMORY IO利用率上不来 且速度慢下问题 那么 怎么解决这些问题呢 据我个人经验来说有以下两种方式 1 并行 多线程 Parallel Task ThreadPool 2 多进
  • phpstrom、laradock、xdebug 进行断点调试

    phpstrom laradock xdebug 进行断点调试 背景 laravel 框架封装太完善 经常搞不明白究竟用的是哪个类 复杂一点的算法 使用 dd方法调试时 需要疯狂dd 显得过于鸡肋 调试流程 发请求 跑调试代码 安装 xde
  • 决策树之用信息增益选择最优特征

    决策树之用信息增益选择最优特征 熵 熵的定义 熵 sh ng 热力学中表征物质状态的参量之一 用符号S表示 其物理意义是体系混乱程度的度量 在决策树中 信息增益是由熵构建而成 表示的是 随机变量的不确定性 不确定性越大 代表着熵越大 随机变
  • Mycat 学习小结

    Mycat 学习小结 Mycat 是什么 Mycat 是一个彻底开源的面向企业应用开发的大数据库集群 支持事务 ACID 是可以替代Mysql 的加强版数据库 Mycat被视为 Mysql 集群的企业级数据库 用来替代昂贵的 Oracle