前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyCat11——分片技术之全局表

MyCat11——分片技术之全局表

原创
作者头像
用户8100582
发布2023-11-28 20:47:09
2160
发布2023-11-28 20:47:09
举报
文章被收录于专栏:Java多线程Java多线程

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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 问题
  • 2 全局表
  • 3 实施
    • 3.1 修改 schema.xml 配置
      • 3.2 重启mycat服务
        • 3.3 创建字典表
          • 3.4 插入数据
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档