前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mycat++ 分库分表扩展实践

Mycat++ 分库分表扩展实践

原创
作者头像
马说
修改2022-02-17 16:34:56
4060
修改2022-02-17 16:34:56
举报
文章被收录于专栏:Java 汇总Java 汇总
代码语言:javascript
复制
MyCat++
分库分表:以空间换取时间
1.通过查询mysql中的数据库表([1]),和 mycat中配置的schema([2]) 和 rule([3]) 信息,构建一个路由图
  并根据路由规则自动创建子表,mycat server 保存着分库分表的元数据信息,这些元数据信息
  可根据[1],[2],[3]进行重建;
  dataBase-hostNode 分配策略;数据库应该分配在哪台mysql服务器上;
  table-dataBase 分配策略;表应该分到哪个database里。
  分配算法:顺序分配,随机分配,hash分配,负载最小优先分配等

2.路由图:
  涉及概念表:全局表,er关系表(保持相同)
  全局表:在所有服务器都存在
  关系表:根据shema的配置信息,构建一个依赖图,将数据冗余的放入到对应的数据库中
  A-->B-->C
  A-->D-->C
  A-->F-->D

3.reverse rule  
  在服务启动后,根据每次查询后的结果进行构建
  根据schema table中的配置,配置逻辑索引,构建倒排路由表,根据查询中的非路由列的值,查询倒排路由表,
  查找最终路由到的物理表。
  key为字符串时,倒排表中的key使用radix tree 构建,减少内存空间
  key为数值型,为每个分片表的索引列构建一个bitmap,用于快速判断数据是否在该分片中
  
4.mycatMonitor
  在每台mysql服务器上安装 mycatMonitor,设置配置中心的地址,该进程用于搜索本地的mysql服务,并汇报到配置中心,
  汇报信息:地址,端口,主从标识,数据库,数据库中的表。
  mycatServer 在监听到配置中心的信息后,构建内部数据,dataHost-物理机地址,对于表应该落在那个dataNode中,
  是根据monitor汇报的信息,反向构建的。
        schema 配置的是实际的数据库名
       <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
           配置该数据库下要代理的表
      <table name="travelrecord,address" rule="auto-sharding-long" splitTableNames ="true"/>
       </schema>
        根据monitor汇报的 地址,端口,数据库,表,就可以知道该表应该落在哪几个节点上。
  需要扩容时,安装mysql数据库,定义数据库名,mycat自动创建对应的表。
  (后期加入docker,自动安装配置mysql服务器,自动扩容)

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
TDSQL MySQL 版
TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档