CRL快速开发框架系列教程十一(大数据分库分表解决方案)
本系列目录
- CRL快速开发框架系列教程一(Code First数据表不需再关心)
- CRL快速开发框架系列教程二(基于Lambda表达式查询)
- CRL快速开发框架系列教程三(更新数据)
- CRL快速开发框架系列教程四(删除数据)
- CRL快速开发框架系列教程五(使用缓存)
- CRL快速开发框架系列教程六(分布式缓存解决方案)
- CRL快速开发框架系列教程七(使用事务)
- CRL快速开发框架系列教程八(使用CRL.Package)
- CRL快速开发框架系列教程九(导入/导出数据)
- CRL快速开发框架系列教程十(导出对象结构)
- CRL快速开发框架系列教程十一(大数据分库分表解决方案)
- CRL快速开发框架系列教程十二(MongoDB支持)
- 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方法
CRL快速开发框架系列教程十一(大数据分库分表解决方案)的更多相关文章
- CRL快速开发框架系列教程三(更新数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程四(删除数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程九(导入/导出数据)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十三(嵌套查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十(导出对象结构)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程七(使用事务)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程六(分布式缓存解决方案)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程五(使用缓存)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
随机推荐
- .NET Core系列 :4 测试
2016.6.27 微软已经正式发布了.NET Core 1.0 RTM,但是工具链还是预览版,同样的大量的开源测试库也都是至少发布了Alpha测试版支持.NET Core, 这篇文章 The Sta ...
- CLR 这些年有啥变化吗?
引言 首先想给初学者推荐下<CLR via C#>这本好书,做.Net开发的开发者应该都读一下.为避免广告之嫌,所以这里只提供豆瓣书评的链接. CLR 作为.Net 程序跨平台运行的载体, ...
- Sublime Text3配置在可交互环境下运行python快捷键
安装插件 在Sublime Text3下面写代码感觉很不错,但是写Python的时候遇到了一些问题. 用Sublime Text3打开python文件,或者在Sublime Text3下写好pytho ...
- Jquery的事件操作和文档操作
对于熟悉前端开发的小伙伴,相信对于Jquery一定不陌生,相对于JavaScript的繁琐,Jquery更加的简洁,当然简洁不意味着简单,我们可以使用Jquery完成我们想要实现全部功能,这里为小白们 ...
- webapp应用--模拟电子书翻页效果
前言: 现在移动互联网发展火热,手机上网的用户越来越多,甚至大有超过pc访问的趋势.所以,用web程序做出仿原生效果的移动应用,也变得越来越流行了.这种程序也就是我们常说的单页应用程序,它也有一个英文 ...
- C#——传值参数(2)
//我的C#是跟着猛哥(刘铁猛)(算是我的正式老师)<C#语言入门详解>学习的,微信上猛哥也给我讲解了一些不懂得地方,对于我来说简直是一笔巨额财富,难得良师! 这次与大家共同学习C#中的 ...
- 【读书】PHP程序员要读的书目(不断完善中)
本文地址 分享提纲: 1. PHP 2. Linux 3. Apache/Nginx 4. Mysql 5.设计模式/架构 6. 缓存并发 7. 其他语言 8. 代码基础 9. 大前端 10. 管理生 ...
- 多个ul中第一个li获取定位
如果我们只是获取一个ul中的第一个li的话,那么我们可以这样写: $("ul li:first"); $("ul li").eq(0); $("ul ...
- 记录在Windows上安装和使用Oracle数据库过程中的坑
1.安装Oracle Oracle软件是免费的,可以去官网下载相应的安装包.但是如果用于商业用途需要购买License.官网上针对各种平台,32位和64位都有,如果在Windows一般会下载到两个文件 ...
- 树莓派3B的食用方法-1(装系统 网线ssh连接)
首先要有一个树莓派3B , 在某宝买就行, 这东西基本上找到假货都难,另外国产和英国也没什么差别,差不多哪个便宜买哪个就行. 不要买店家的套餐,一个是配的东西有些不需要,有的质量也不好. 提示:除了G ...