之前的文章“分而治之”在介绍大表分区时,作者尚未实现不同的分区策略,即只能按指定的分区键进行分区。这次作者完善了一下分区策略,在规划大表分区时可以按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种策略的更多相关文章

  1. SqlServer2005 海量数据 数据表分区解决难题

    超大型数据库的大小常常达到数百GB,有时甚至要用TB来计算.而单表的数据量往往会达到上亿的记录,并且记录数会随着时间而增长.这不但影响着数据库的运行效率,也增大数据库的维护难度.除了表的数据量外,对表 ...

  2. 3dTiles 数据规范详解[3] 内嵌在瓦片文件中的两大数据表

    转载请声明出处:全网@秋意正寒 零.本篇前言 说实话,我很纠结是先介绍瓦片的二进制数据文件结构,还是先介绍这两个重要的表.思前想后,我决定还是先介绍这两个数据表. 因为这两个表不先给读者灌输,那么介绍 ...

  3. 浅谈利用PLSQL的多线程处理机制,加快处理大数据表的效率

    我们在处理大数据表的时候经常会感觉的处理速度不够快,效率不够高,那么今天下面我就来简单实现下PLSQL的多线程编程处理数据: 我模拟一个简单的场景,把某一张表中的数据(当然这张表的数据非常大)同步到目 ...

  4. Oracle大数据表的分表处理

    1.首先给大数据表创建rownum序列号 --增加序列号字段 alter table TEST add xlh number; --填充序列号 update TEST set xlh = rownum ...

  5. MySQL大数据表水平分区优化的详细步骤

    将运行中的大表修改为分区表 本文章代码仅限于以数据时间按月水平分区,其他需求可自行修改代码实现 1. 创建一张分区表 这张表的表字段和原表的字段一摸一样,附带分区 1 2 3 4 5 6 7 8 9 ...

  6. Mysql大数据表优化处理

    原文链接: https://segmentfault.com/a/1190000006158186 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表 ...

  7. Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区(转载)

    一:范围分区 就是根据数据库表中某一字段的值的范围来划分分区,例如: 1 create table graderecord 2 ( 3 sno varchar2(10), 4 sname varcha ...

  8. 示例讲解PostgreSQL表分区的三种方式

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案.一般建议 ...

  9. mysql开启远程登陆(修改数据表和授权两种方法)

    一.确认防火墙没有阻止3306端口(一般服务器默认会屏蔽掉) windows防火墙例外设置方法 控制面板(右上角选择查看方式为大图标)---防火墙---高级设置---高级设置---出站规则---最右边 ...

随机推荐

  1. 浅谈java枚举类

    一.什么情况下使用枚举类? 有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便? 二.为什么不用静态常量来替代枚举类呢? public static final int SEASO ...

  2. 10.24的注意事项——解决linux_jni编译错误的问题

    公司以opus开源库.因此,我们遇到了一些问题. 我将新下载的opus1.1替换掉老版本号之后,单独编译opus没问题.但是编译相关的文件就会报错. 错误信息例如以下: g++ -Wall -fPIC ...

  3. hibernate validator 专题

    JSR-303 原生支持的限制有如下几种 : 限制 说明 @Null 限制只能为 null @NotNull 限制必须不为 null @AssertFalse 限制必须为 false @AssertT ...

  4. WPF中,怎样将XAML代码加载为相应的对象?

    原文:WPF中,怎样将XAML代码加载为相应的对象? 在前面"在WPF中,如何得到任何Object对象的XAML代码?"一文中,我介绍了使用System.Windows.Marku ...

  5. WPF应用程序顶级标签一定是Window吗?

    原文:WPF应用程序顶级标签一定是Window吗? WPF应用程序顶级标签一定是Window吗? 很多人误以为是.可是,答案却是否定的.我们不妨来测试一下. 首先使用顶级标签为Window,这是最普通 ...

  6. Python 爬虫 —— BeautifulSoup

    from bs4 import BeautifulSoup % 首字母大写,显然这是一个类 1. BeautifulSoup 类 HTML 解析类(parser) r = requests.get(. ...

  7. python两个整数和浮点的方法来获取值

    /*********************************************************************  * Author  : Samson  * Date   ...

  8. [WPF疑难]ErrorTemplate显示与隐藏问题

    原文:[WPF疑难]ErrorTemplate显示与隐藏问题 [WPF疑难]ErrorTemplate显示与隐藏问题                                         周 ...

  9. JS判断android/IOS,并执行回调函数

    判断类型: var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') ...

  10. XF 进度条和指示器

    <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http:/ ...