MyCat11——分片技术之全局表

2023-11-28 20:47:09 浏览数 (2)

1 问题

在实际的业务中,有些表中的数据非常稳定,几乎不会发生更新,比如用来存储行政区划数据,或者国家地区数据,这些数据稳定的表,也被称为字典表。

字典表的特征:

  • 变动不频繁
  • 总体数据量变化不大
  • 数据规模不大,一般多在十万条以内

那么在实现了分片的情况时,对业务数据进行分片后,业务表与这些字典表之间如果需要进行关联查询,此时就成为了一个亟需解决的问题。

2 全局表

为了解决上述问题,在Mycat中引入了全局表。

全局表在mycat中的特征:

  • 全局表的插入更新等操作,会实时在所有节点上执行,保持各个分片的数据一致
  • 全局表的查询操作,仅从一个节点执行
  • 全局表可以和任何一个表进行JOIN操作

通过全局表以上特征,不难看出,通过全局表的使用,也能很好的解决分片数据在查询中遇到的 JOIN 难题。通过全局表和ER表的分片策略,可以解决工作中遇到的绝大多数问题。

3 实施

3.1 修改 schema.xml 配置

在 schema.xml 中配置全局表信息。

在 xml 文件中 schema 节点下增加如下一行配置信息:

<table name="dict_order_type" dataNode="dn1,dn2" type="global"></table>

配置信息中

  • name 要配置的全局表的名称
  • dataNode 希望全局表保存到哪些分片
  • type 数据表的类型,全局表类型为 global

修改后的配置文件如下

3.2 重启mycat服务

mycat restart

3.3 创建字典表

因为在配置中定义的字典表 dict_order_type 之前不存在,现在需要把它创建出来。

登录到mycat数据端口

mysql -uroot -p123456 -h192.168.137.3 -P8066

选择 TESTDB 数据库

use TESTDB;

创建字典表

create table dict_order_type(id int auto_increment primary key, order_type varchar(200));

在mycat中创建该表后,将在两个节点中同时创建出该表。

注意:

由mycat创建的数据表,在mysql中表名为全大写。在查询时,表名也需要全大写,否则查询报错。

mycat中的数据表

dn1中的数据表

dn2中的数据表

3.4 插入数据

在mycat中执行数据插入操作

insert into DICT_ORDER_TYPE values(1, "Order");

insert into DICT_ORDER_TYPE values(2, "Refund");

插入后,进行查询

在mycat中的查询结果

dn1中的查询结果

dn2中的查询结果

可以发现,作为全局表,它的数据将被插入到配置文件中配置的所有分片中。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞