Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 594|回复: 0

CRL快速开发框架系列教程十一(大数据分库分表解决方案)

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-7-21 17:29:45 | 显示全部楼层 |阅读模式

    本系列目录

    1. CRL快速开发框架系列教程一(Code First数据表不需再关心)
    2. CRL快速开发框架系列教程二(基于Lambda表达式查询)
    3. CRL快速开发框架系列教程三(更新数据)
    4. CRL快速开发框架系列教程四(删除数据)
    5. CRL快速开发框架系列教程五(使用缓存)
    6. CRL快速开发框架系列教程六(分布式缓存解决方案)
    7. CRL快速开发框架系列教程七(使用事务)
    8. CRL快速开发框架系列教程八(使用CRL.Package)
    9. CRL快速开发框架系列教程九(导入/导出数据)
    10. CRL快速开发框架系列教程十(导出对象结构)
    11. CRL快速开发框架系列教程十一(大数据分库分表解决方案)
    12. CRL快速开发框架系列教程十二(MongoDB支持)
    13. CRL快速开发框架系列教程十三(嵌套查询)

     正文

    使用CRL可以简单实现大数据分库分表方案,之前整理过<重磅来袭,使用CRL实现大数据分库分表方案>

    记得有一次面试,说现在数据量越来越大,需要分库分表,然后给我讲了京东怎么做的,问有解决方案没,我说暂时没有,后来就没有然后了!-_

    回来想了想,用CRL实现也不难,不就是动态切换库表么,这些CRL本来就支持,然后用CRL简单实现了

    分库分表数据结构

    数据结构

    以订单为例,此结构需要一个唯一主数据编号会员ID,订单表作为关联表,一个订单表存放完整的会员订单

    在按指定会员ID查询数据时,按库设置,找到会员表所在的库,再按订单表设置,找到订单所在的表

    库表结构配置

    进行操作时,需要知道这个数据放在哪个库,哪个表,因此需要把这个划分结构做成可配置,需要配置有:

    • 数据库:一共划分为几个库,主索引区间是多少
    • 数据表:一共有几个分表,每个分表容量是多少
    • 数据表分表:属于哪个表,主索引区间是多少

    初始数据库配置

    以下设置一个库容量为10,单个订单表容量为5

    //创建库分组
                var db = new CRL.Sharding.DB.DataBase();
                db.Name = "db1";
                db.MaxMainDataTotal = 10;
                CRL.Sharding.DB.DataBaseManage.Instance.Create(db);
                //创建表
                var dbList = CRL.Sharding.DB.DataBaseManage.Instance.QueryList();
                foreach(var item in dbList)
                {
                    var table = new CRL.Sharding.DB.Table();
                    table.TableName = "MemberSharding";
                    table.IsMainTable = true;
                    CRL.Sharding.DB.TableManage.Instance.Create(item, table, out error);
    
                    var table2 = new CRL.Sharding.DB.Table();
                    table2.TableName = "OrderSharding";
                    table2.IsMainTable = false;
                    table2.MaxPartDataTotal = 5;
                    CRL.Sharding.DB.TableManage.Instance.Create(item, table2, out error);
    
                    //创建分区
                    CRL.Sharding.DB.TablePartManage.Instance.Create(table2, out error);
                }
    

    生成数据为(依次为,库,表,表分区)

    分库分表唯一关键点是需要定位数据,CRL提供了SetLocation(id)方法,以确定库位置

    插入会员数据

    按上面配置,ID为3数据会插入到库DB1,表MemberSharding

    var m = new Code.Sharding.MemberSharding();
    m.Id =3;
    m.Name ="member3";
    Code.Sharding.MemberManage.Instance.SetLocation(m.Id).Add(m);
    

    插入订单

    这里定位按会员ID来算

    同样,按上面配置,订单会插入到库DB1,表OrderSharding_1

    var order = new Code.Sharding.OrderSharding();
                order.MemberId = 3;
                order.Remark ="order3";
                Code.Sharding.OrderManage.Instance.SetLocation(3).Add(order);
    

    查询订单

    定位到库DB1,表OrderSharding_1

    var list = Code.Sharding.MemberManage.Instance.SetLocation(3).QueryList(b => b.MemberId==3);
    

    联合查询当前库

    var orderManage = Code.Sharding.OrderManage.Instance.SetLocation(3);
                var query = orderManage.GetLambdaQuery();
                query.ShardingUnion(UnionType.UnionAll);
                query.Where(b=>b.MemberId<5);
                var list = query.ToList();
    

    调用很简单,只比一般调用多了SetLocation方法

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-27 07:06 , Processed in 0.074989 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表