mycat 取模分片,ER分片

本文介绍了如何利用Mycat进行数据分片,主要针对用户表和商家订单表,根据user_id和seller_user_id进行取模分片。目的是实现用户查询自己的订单和商家查询购买订单的需求。配置中强调了表分片的全局唯一性,并提供了rule.xml的配置示例。
摘要由CSDN通过智能技术生成
1、业务场景:用户购物下单。

要求:把订单分片,商家要查询购买在订单,用户要查询自己的订单。

表设计:用户,商家订单,订单明细,买方订单

分片规则:

“用户表”---user_id 取模,“商家订单”----seller_user_id 取模

“订单明细”----“商家订单”ER 分片,“买家订单”----buyer_user_id 取模

2、表
CREATE TABLE tb_user (
login_name VARCHAR (32) comment '登录名',
user_id BIGINT comment '用户标识',
TYPE INT comment '用户类型 1 商家,2买家',
passwd VARCHAR (128) comment '密码',
primary key (user_id)
) ;
alter table tb_user comment '用户表';

CREATE TABLE tb_seller_order (
seller_user_id BIGINT comment '商家标识',
buyer_user_id BIGINT comment '用户标识',
order_id BIGINT comment '订单标识',
price BIGINT comment '价格',
STATUS INT comment '状态',
primary key (order_id)
);
alter table tb_seller_order comment '商家订单表';

CREATE TABLE tb_order_detail(
  seller_user_id BIGINT comment '商家标识',
  order_detail_id BIGINT comment '订单明细标识',
  order_id BIGINT comment '订单标识',
  goods_id BIGINT comment '标识',
  goods_name VARCHAR(32) comment '商品名称',
  cnt INT comment '数量',
  unit_price INT comment '单价',
  primary key (order_detail_id)
);
alter table tb_order_detail comment '订单明细';

CREATE TABLE tb_buyer_order (
  buyer_user_id BIGINT comment '用户标识',
  seller_user_id BIGINT comment '商家标识',
  order_id BIGINT comment '订单标识',
  price BIGINT comment '价格',
  STATUS INT comment '状态',
  primary key (order_id)
);
alter table tb_buyer_order comment '买家订单';

3、服务器分配:

mysql:
192.168.109.128    备192.168.109.130
主     192.168.109.131
主     192.168.109.132

mycat:

192.168.109.129


4、表主键生成策略使用mycat全局序列生成(mycat 全局序列号:http://blog.csdn.net/convict_eva/article/details/51917499)

添加mycat全局序列号:

USER_ID_SQUE=dn_master
ORDER_ID_SQUE=dn_master
DETAIL_ID_SQUE=dn_master
在dn_master结点执行:
insert into MYCAT_SEQUENCE(NAME,current_value,increment) 
values('USER_ID_SQUE',1,100),('ORDER_ID_SQUE',1,100),('DETAIL_ID_SQUE',1,100);

重启mycat测试:
SELECT NEXT VALUE FOR MYCATSEQ_USER_ID_SQUE;
SELECT NEXT VALUE FOR MYCATSEQ_ORDER_ID_SQUE;
SELECT NEXT VALUE FOR MYCATSEQ_DETAIL_ID_SQUE;
5、配置分片规则
在mycat conf 目录下的rule.xml 是分片规则的配置文件。
5.1 配置function 标签,找到function 标签name="mod-long" 的function 配置,修改总结点数为3(和使用的mysql 结点数一致)。
    <function name="mod-long" class="org.opencloudb.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">3</property>
    </function>

5.2 配置表分片(name 要全局唯一),rule.xml 配置添加如下配置

        <!-- user分片规则 -->
        <tableRule name="tb_user_mod-long">

                <rule>

                        <!--  分片使用的字段  -->

                        <columns>user_id</columns>

                        <!--  分片使用的方法,对应function 名称  -->

                        <algorithm>mod-long</algorithm>
                </rule>
         </tableRule>


        <!-- 卖家订单分片规则 -->
        <tableRule name="seller_order_mod-long">
                <rule>
                        <columns>seller_user_id</columns>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值