zoukankan      html  css  js  c++  java
  • mycat-分库分表


    核心文件

    server.xml
    schema.xml
    rule.xml

    垂直拆分
    (1)将一个库中数据表拆分到对应的库中,完成垂直拆分
       比如原始项目库中包含用户、订单、商品模块的数据表,现在按照模块分别建立数据库,将数据库中
    数据表拆分到对应数据库中,完成垂直拆分(微服务模式就已经做了垂直拆分)
    (2)将一张有多个字段的表按照字段使用频率来拆分成多张表,完成垂直拆分

    水平拆分
    (1)将原始库进行复制多份(库表都是一样的),然后将数据按规则向这多个库进行存储,来达到水平拆分
       比如原始库需要存储1000w条数据,将库复制5份,那么每个库将分别存储200w数据,这样原始库就不会存储数据量将大大减轻

    分片
          根据分区规则字段进行分片存储,那么如果根据分区规则字段查询时,也会根据分区规则路由到对应的分片上

    全局表
      分析:在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关联,就成了比较棘手的问题
           采用全局表来解决该问题,它具有以下特性:

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

           全局表配置比较简单,不用写 Rule 规则,修改schema.xml,如下配置即可:
           <table name="company" primaryKey="id" type="global" dataNode="dn1,dn2" />

    联表操作
          分析:如果主表的数据在1分片,从表对应的数据在2分片,那么这一次联表查询就需要跨节点,性能严重损耗
          采用配置子表来解决该问题,修改schema.xml,如下配置即可:

      <table name="tab_user" dataNode="dn1,dn2" rule="mod-long">
          <childTable name="tab_orders"  joinKey="user_id" parentKey="id"/>
      </table>
    mycat将tab_orders的user_id和tab_user的id关联起来,在对orders表进行插入操作时,将会判断插入数据的user_id处于哪一个分片, 然后将数据插入该分片,这样便实现了将关联数据存放在一个分片的目的。当然,如果关联了更多的表,就继续在childTable下面配置childTable

    注意:使用mycat后,不能再使用数据库主键自增了

  • 相关阅读:
    Python基于正则表达式实现文件内容替换的方法
    python数据处理实战
    python数据处理实战
    Python命令行参数解析模块getopt使用实例
    Python命令行参数解析模块getopt使用实例
    python命令行参数解析OptionParser类用法实例
    vim中权限不足时不用退出而强制保存
    C++11 STL算法简介
    每天一个linux命令(6) ar命令
    mysql++ Query
  • 原文地址:https://www.cnblogs.com/yuefeng123/p/12725433.html
Copyright © 2011-2022 走看看