💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# **诞生背景** ## **海量数据的存储问题** ``` 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数 据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对 事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合NoSQL一些折中是无法满足使用场景的,就比如 有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库。如果使用关 系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存 储。 ``` ## **什么是数据库分片** ``` 简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散 单台设备负载的效果。数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者 Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分 ``` **数据的垂直(纵向)切分示意图** :-: ![](https://img.kancloud.cn/39/85/3985c656e92fa6fd9b888efd59b54da3_438x331.png) ``` 另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为 数据的水平(横向)切分。 ``` **如何实现数据库分片** ``` 当数据库分片后,数据由一个数据库分散到多个数据库中。此时系统要查询时需要切换不同的数据库进行查询,那么系统如何知 道要查询的数据在哪个数据库中?当添加一条记录时要向哪个数据库中插入呢?这些问题处理起来都是非常的麻烦。这种情况下 可以使用一个数据库中间件mycat来解决相关的问题。接下来了解一下什么是mycat。 ``` ## **什么是Mycat** ``` Mycat 背后是阿里曾经开源的知名产品——Cobar。Cobar 的核心功能和优势是 MySQL 数据库分片,此产品曾经广为流传,据 说最早的发起者对 Mysql 很精通,后来从阿里跳槽了,阿里随后开源的 Cobar,并维持到 2013 年年初,然后,就没有然后 了。Cobar 的思路和实现路径的确不错。基于 Java 开发的,实现了 MySQL 公开的二进制传输协议,巧妙地将自己伪装成一 MySQL Server,目前市面上绝大多数 MySQL 客户端工具和应用都能兼容。比自己实现一个新的数据库协议要明智的多, 因为生态环境在哪里摆着。Mycat 是基于 cobar 演变而来,对cobar 的代码进行了彻底的重构,使用 NIO 重构了网络模块, 并且优化Buffer内核,增强了聚合,Join 等基本特性,同时兼容绝大多数数据库成为通用的数据库中间件。简单的说, MyCAT就是:一个新颖的数据库中间件产品支持mysql集群,或者mariadb cluster,提供高可用性数据分片集群。你可以 像使用mysql一样使用mycat。对于开发人员来说根本感觉不到mycat的存在 ``` ![](https://img.kancloud.cn/99/db/99dbfdf65a693b084acfe27d5f857a41_554x380.png) ## **Mycat支持的数据库** ![](https://img.kancloud.cn/c8/4c/c84c45225de63aca07c6c1461d7adc03_602x225.png) ## **关键特性** ![](https://img.kancloud.cn/e4/52/e4526bad2a5545e704d8bac7534149c2_1018x440.png)