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快速开发框 ...
随机推荐
- 《Web 前端面试指南》1、JavaScript 闭包深入浅出
闭包是什么? 闭包是内部函数可以访问外部函数的变量.它可以访问三个作用域:首先可以访问自己的作用域(也就是定义在大括号内的变量),它也能访问外部函数的变量,和它能访问全局变量. 内部函数不仅可以访问外 ...
- ThreadLocal简单理解
在java开源项目的代码中看到一个类里ThreadLocal的属性: private static ThreadLocal<Boolean> clientMode = new Thread ...
- .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入
上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...
- HTML文档声明
前面的话 HTML文档通常以类型声明开始,该声明将帮助浏览器确定其尝试解析和显示的HTML文档类型.本文将详细介绍文档声明DOCTYPE 特点 文档声明必须是HTML文档的第一行.且顶格显示, ...
- Python自然语言处理工具小结
Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...
- TFS 测试用例步骤数据统计
TFS系统集成了一套BI系统,基于SQL Server的Analysis Service进行实现的.通过这几年的深入使用,能够感触到这个数据数据仓库模型是多么的优秀,和微软官方提供的数据仓库示例Adv ...
- BPM配置故事之案例5-必填与水印文本
物资申请表改好了,但是没过两天老李又找来了. 老李:这个表格每次都是各个部门发给我们,再由我们采购部来填,太影响效率了,以后要让他们自己填. 小明:那就让他们填呗,他们有权限啊. 老李:可是他们说不会 ...
- Android—应用程序开机自启
android开机时候会发送开机广播,我们想要收到广播知道手机开机,才能启动我们的应用程序. 首先要在配置文件中添加相应权限: <uses-permission android:name=&qu ...
- 好用的Markdown编辑器一览 readme.md 编辑查看
https://github.com/pandao/editor.md https://pandao.github.io/editor.md/examples/index.html Editor.md ...
- 项目管理_FindBugs的使用
本章将讲述如何在Myeclipse下,使用FindBugs,静态分析工具,无需开发人员费劲就能找出代码中已有的缺陷. 一:Myeclipse下如何安装FindBugs插件 1:FindBugs插件下载 ...