AppBoxFuture: 大数据表分区的3种策略
之前的文章“分而治之”在介绍大表分区时,作者尚未实现不同的分区策略,即只能按指定的分区键进行分区。这次作者完善了一下分区策略,在规划大表分区时可以按Hash或者时间范围进行分区,所以本篇介绍不同的分区策略适用的场景,同时介绍一下表扫描时如何指定从特定分区查询数据。
一、分区策略及其适用场景:
在新建实体模型时,根据数据是否动态增长以及预估数据规模后确定合适的分区策略,另外根据作者虚拟机的配置单分区的记录数在100万内比较合适:
注意:实体成员作为分区键时是只读的,实体保存后不能修改分区键。
1. 指定键值分区
添加分区键时指定某个实体成员作为分区键,适用于:
- SaaS类应用按租户进行数据分区;
- 基础数据如商品按不同类型进行数据分区;
- 动态数据如结算单按不同账期进行数据分区。

2. 键值Hash分区
添加分区键时指定成员并指定Hash数量作为分区键,适用于基础数据需要分区,且分区的总数可以确定在一定范围内。
注意:Hash分区在查询数据指定分区谓词时只能进行相等判断

3. 时间范围分区
添加分区键时指定时间类型的成员并指定按年、月、日作为分区键,适用于动态增长的数据按时间范围进行分区,最简单的例子是订单按年分区存储。

4. 组合分区
可以添加多个分区键组合分区,如SaaS应用按租户然后按年进行分区。

二、如何从指定分区查询数据:
之前实现的TableScan在扫描表数据时,如果是分区表会依次扫描各个分区,这次作者完善了一下TableScan的实现,在明确知道数据在哪个分区或分区范围内时,可以指定分区谓词,从而从指定的表分区内扫描数据。示例代码如下:
var q = new TableScan<Entities.VehicleState>();
q.Partitions.Equal(t => t.VehicleId, 1); //指定分区谓词1
q.Partitions.Equal(t => t.CreateTime, new DateTime(2019, 6, 29)); //指定分区谓词2
return await q.ToListAsync(); //从指定分区扫描数据
注意:目前仅实现谓词的相等判断且必须指定全部分区键谓词(即目前只能从确定分区内扫描),>, >=, <, <=, Between尚未实现。
三、小结:
本篇主要介绍了大表分区的策略及其适用场景,Github上的运行时已经更新可测试,如果您有问题或Bug报告,请留言或提交Issue。另外您的关注与点赞将是作者最大的动力,以驱动作者全力以赴完成这个框架。
AppBoxFuture: 大数据表分区的3种策略的更多相关文章
- SqlServer2005 海量数据 数据表分区解决难题
超大型数据库的大小常常达到数百GB,有时甚至要用TB来计算.而单表的数据量往往会达到上亿的记录,并且记录数会随着时间而增长.这不但影响着数据库的运行效率,也增大数据库的维护难度.除了表的数据量外,对表 ...
- 3dTiles 数据规范详解[3] 内嵌在瓦片文件中的两大数据表
转载请声明出处:全网@秋意正寒 零.本篇前言 说实话,我很纠结是先介绍瓦片的二进制数据文件结构,还是先介绍这两个重要的表.思前想后,我决定还是先介绍这两个数据表. 因为这两个表不先给读者灌输,那么介绍 ...
- 浅谈利用PLSQL的多线程处理机制,加快处理大数据表的效率
我们在处理大数据表的时候经常会感觉的处理速度不够快,效率不够高,那么今天下面我就来简单实现下PLSQL的多线程编程处理数据: 我模拟一个简单的场景,把某一张表中的数据(当然这张表的数据非常大)同步到目 ...
- Oracle大数据表的分表处理
1.首先给大数据表创建rownum序列号 --增加序列号字段 alter table TEST add xlh number; --填充序列号 update TEST set xlh = rownum ...
- MySQL大数据表水平分区优化的详细步骤
将运行中的大表修改为分区表 本文章代码仅限于以数据时间按月水平分区,其他需求可自行修改代码实现 1. 创建一张分区表 这张表的表字段和原表的字段一摸一样,附带分区 1 2 3 4 5 6 7 8 9 ...
- Mysql大数据表优化处理
原文链接: https://segmentfault.com/a/1190000006158186 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表 ...
- Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区(转载)
一:范围分区 就是根据数据库表中某一字段的值的范围来划分分区,例如: 1 create table graderecord 2 ( 3 sno varchar2(10), 4 sname varcha ...
- 示例讲解PostgreSQL表分区的三种方式
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案.一般建议 ...
- mysql开启远程登陆(修改数据表和授权两种方法)
一.确认防火墙没有阻止3306端口(一般服务器默认会屏蔽掉) windows防火墙例外设置方法 控制面板(右上角选择查看方式为大图标)---防火墙---高级设置---高级设置---出站规则---最右边 ...
随机推荐
- WPF--3Dmax+blend+WPF综合运用
引自:http://blog.sina.com.cn/s/blog_95dbdf9e0100we3z.html 本人小菜,WPF刚入门,只是写一下最近的项目心得.欢迎各位前辈们前来拍砖指正,感激不敬! ...
- Android实现图片滚动控件,含页签功能,让你的应用像淘宝一样炫起来
首先题外话,今天早上起床的时候,手滑一下把我的手机甩了出去,结果陪伴我两年半的摩托罗拉里程碑一代就这么安息了,于是我今天决定怒更一记,纪念我死去的爱机. 如果你是网购达人,你的手机上一定少不了淘宝客户 ...
- 如何使用GDI绘制半透明矩形
/*使用GDI绘制半透明矩形*/ void CDirectXDraw::DrawHalfOpacityRect(HDC hdc,CRect rect) { CDC dc; dc.Attach(hdc) ...
- WPF 实现拖动工具箱效果
原文:WPF 实现拖动工具箱效果 1.效果 点击左边的矩形拖动到右边canvas面板,右边面板添加矩形 2.布局 左边是个StockPanel,上面有个矩形,右边是个Canvas面板. 矩形是源,Ca ...
- ShopNC本地生活o2o网站的源代码,没有域名限制
较前某VIP源代码论坛分享了套ShopNC本地生活o2o站点系统.下载过来却发现根本不能用,所以一直没分享出来.今天咱们这边分享的这套ShopNC本地生活o2o站点源代码,无不论什么的限制,直接ins ...
- 编写可移植C/C++程序的要点(12条)
1.分层设计,隔离平台相关的代码.就像可测试性一样,可移植性也要从设计抓起.一般来说,最上层和最下层都不具有良好的可移植性.最上层是GUI,大多数GUI都不是跨平台的,如Win32 SDK和MFC.最 ...
- x86汇编指令脚本虚拟机
简介 这是一个可以直接解释执行从ida pro里面提取出来的x86汇编代码的虚拟机. 非常精简,整体架构上不能跟那些成熟的虚拟机相比,主要目标是够用.能用.轻量就行,如果觉得代码架构设计的不是很好的话 ...
- Xamarin简介
简介 简单来说,Xamarin提供了使用C#完成iOS,Android和Windows Phone三个移动平台开发的可能性Xamarin包括Xamarin.Andriod.Xamarin.IOS.Xa ...
- 【剑指Offer学习】【面试题4 : 替换空格】
题目: 请实现一个函数,把字符串中的每个空格替换成"%20",例如“We are happy.”,则输出“We%20are%20happy.”. 以下代码都是通过PHP代码实现. ...
- WPF Dispatcher的使用
<Window x:Class="DispatcherExam.MainWindow" xmlns="http://schemas.micro ...