Mycat-水平分库(五)

524人浏览 / 0人评论
  • 使用场景:一般在垂直切分之后、有上亿数据,加了索引读取也非常慢,一般订单详情和订单主表和业务息息相关,像日志就不需要水平切分了,日志归档即可
  • 原则:能不切分就不要切分,选择合适切分规则和切分键,尽量避免关联join操作
  • 水平切分的步骤
  1. 根据业务状态确定要进行水平切分的表
  2. 分析业务模型选择分片键及分片算法
  3. 使用Mycat部署分片集群
  4. 测试分片集群
  5. 业务及数据迁移
  • 分片键怎么选
  1. 一般选择查询字段频率最高,查询对分片键影响最大
  2. 尽可能的比较均匀分布数据到各个节点上
  • 使用Mycat部署分片集群
  1. 使用schema.xml配置逻辑库及逻辑表
  2. 使用rule.xml配置分片表的分片规则
  3. 使用server.xml配置用户和权限信息
  • 注意:水平切分时候,主要主键ID自增长问题,可以使用redis,或者数据库,或者mycat自带自增id
  1. 如果是用数据库,则server.xml修改以下参数
<property name="sequnceHandlerType">1</property><!-- 0 本地文件1数据库方式2时间戳3zookeeper方式 -->
  1. 在数据库执行 /conf/dbseq.sql 脚本,并赋予mysql账号执行脚本权限
#导入sql
mysql -uroot -p mycat<dbseq.sql
#sql取模
select mod(n1,4) from table
#查询权限信息
show grants for root@'127.0.0.%'
#配置执行函数权限
grants execute on *.* to root@'127.0.0.%';
  1. 在数据库插入需要自增的表序列
#在MYCAT_SEQUENCE新增ORDER_MASTER自增记录 表名和conf配置都要使用大写
insert int MYCAT_SEQUENCE values('ORDER_MASTER',1,1);
  1. 在schema.xml增加autoIncrement="true" 参数
<table name="order_master" dataNode="orderdb01,orderdb02,orderdb03,orderdb04" rule="order_master" primaryKey="order_id" autoIncrement="true">
  1. vim /conf/sequence_conf.properties 配置序列自增表
#配置文件的schema.xml上dataNode数据节点名
GLOBAL=mycat
#对应主键表和使用自增的节点名
ORDER_MASTER=mycat

 

  • 如果水平切分表有关联表
  1. 配置schema.xml的水平关联childTable信息,然后删除对应table节点信息
 <table name="order_master" dataNode="orderdb01,orderdb02,orderdb03,orderdb04" rule="order_master" primaryKey="order_id" autoIncrement="true">
            <!--select * from order_master 1 join order_detail b on a.order_id=b.order_id; 关联分片语句 -->
             <childTable name="order_detail" joinKey="order_id" parentKey="order_id" primaryKey="order_detail_id" autoIncrement="true"/>
        </table>

 

支付宝扫码打赏 微信打赏

如果文章对您有帮助,欢迎移至上方按钮打赏,非常感谢你的支持!

全部评论