一种数据库单表分组扫描方法技术

技术编号:39573696 阅读:6 留言:0更新日期:2023-12-03 19:25
本发明专利技术公开一种数据库单表分组扫描方法,包括:步骤

【技术实现步骤摘要】
一种数据库单表分组扫描方法


[0001]本专利技术涉及数据库
,特别涉及一种数据库单表分组扫描方法


技术介绍

[0002]随着大数据时代的到来,存储在数据库中的数据量越来越大,按现有的扫描方式,在表数据达到
TB
时,至少需要
125,000,000
个数据页面,假定每个页面存储了
20
行数据,那么服务器需要顺序迭代
125,000,000*20
次才能将所有行全部返回,为了能够快速读取数据,通常需要采用并行的方案,但是由于单表数据无法分区获取,只能采用多个
Limit offset
的方式进行分批获取,而
limit offset
在获取后面的数据时,要先按行定位到开始位置需要扫描前面的每个数据页面,产生了大量损耗,影响并行效果


技术实现思路

[0003]为了解决上述问题,本专利技术设计了一种数据库单表分组扫描方法,可以对表中数据进行跳跃式的分组访问,为应用并行获取数据库单表数据提供基础支撑

[0004]为实现以上目的,本专利技术的技术方案为:一种数据库单表分组扫描方法,包括以下步骤:步骤
S1
:在
SQL
语句中提供分组数量和当前要获取的分组序号;步骤
S2
:启动分组扫描
begin
阶段,得到当前
PI
页面;步骤
S3
:启动分组扫描
next
阶段,从分组扫描获取
PFS
页面;步骤
S4
:分组扫描返回有效
PFS
页面则执行步骤
S6
,否则执行步骤
S5
;步骤
S5
:分组扫描已经结束,结束堆扫描;步骤
S6
:当前
PFS
页面是否存在下一个有效范围,是则继续,否则继续执行步骤
S3
;步骤
S7
:获取有效范围,解析8个页面上的所有行,并将所有行放到待发送缓冲区;步骤
S8
:将缓冲区中的数据发送给前端,并回到步骤
S6
;页面(
page
)是操作系统,数据库存储的最小单位,一个页面为 8 k
,每个页面都有唯一的页面号,页面号由文件号以及文件内偏移组成,根据页面号,可以获取指定页面内容,同理获取到页面内容后,也可以获取本页面的页面号,虽然页面固定为
8k
,但是根据页面用途的不同划分了不同的页面类型,比如存储表中的数据的页面称为数据页面,而管理数据页面的页面是
PFS
页面,而
PI
页面可以管理
PI
页面或者
PFS
页面,范围(
extent
)是数据库分配空间的最小单位,一个范围由8个连续的页面组成,段(
segment
)是逻辑对象的物理载体,每个表对应唯一的段,段由
n
多个
extent
组成,堆组织表是一种无序存储数据的多路树结构,树的叶子节点为
PFS
页面,
PFS
页面存储
200
个范围
id
,也就是
1600
个数据页面

树的非叶子节点为
PI
页面,
PI
页面存储
200
个子项位置,如果树为一层那么可以管理 200 * 8 个数据页面,如果是两层可以管理 200 * 200 * 8 个数据页面(
320M

。PFS
页面以及
PI
页面内容中记录了右侧页面的页面号,这样可以方便的查找同一层中的所有页面

数据库中的普通表就是堆组织表,定位到堆的根页面,根据根页面定位到树的最左侧的
PFS
页面,获

PFS
页面中记录的范围,根据范围中记录的页面号获取数据页面并将数据页面返回给堆扫描,通过
PFS
页面中记录的右侧页面号找到右侧
PFS
页面,同理可以获取右侧
PFS
页面中记录的数据页面,直到整个树的最右侧
PFS


此过程为段扫描,段扫描负责收集数据页面,向堆扫描返回数据页面,堆扫描使用段扫描获取一个数据页面,获取数据页面上的有效行,每解析一行后返回给前端,然后继续解析下一行

页面遍历完毕后,继续向段扫描获取下一个数据页面,直到段扫描结束

[0005]优选的:所述
SQL
语句的语法如下:
DIRECTEXTENTcolumnFROMtGROUPcountByn
;其中,
DIRECTEXTENT
:表示基于
EXTENT
返回数据,区别于
SELECT
语句,
column
:表示需要获取的投影列,
FROMt
:获取
t
表中的数据,
GROUPcount

GROUP
关键字表示分组,分成
count
组,
Byn

By
表示获取第
n
组,使用
PFS
页面号与
count
取模,如果值等于
n
则说明需要获取该页面,否则不获取本
PFS


[0006]优选的:所述
SQL
语句语法预期结果为:
DIRECTEXTENTcolumnFROMtGROUP2By0;
合并上
DIRECTEXTENTcolumnFROMtGROUP2By1;
数据结果等于
SELECTCOLUMNfromt。
[0007]优选的:所述分组扫描
begin
阶段包括以下步骤:步骤
S21
:根据表名字定位到堆根页面,设置根页面为当前页面;步骤
S22
:获取当前页面管理的第一个子项页面,判断子项页面类型是否为
PFS
页面,如果是则执行步骤
S24
,如果不是则执行步骤
S23
;步骤
S23
:如果不是
PFS
页面则为
PI
页面,获取
PI
页面,并将其设置为当前页面,并跳转到步骤
S22
;步骤
S24
:返回当前页面

[0008]优选的:所述步骤
S24
中的当前页面是树的倒数第二层
...

【技术保护点】

【技术特征摘要】
1.
一种数据库单表分组扫描方法,其特征在于,包括以下步骤:步骤
S1
:在
SQL
语句中提供分组数量和当前要获取的分组序号;步骤
S2
:启动分组扫描
begin
阶段,得到当前
PI
页面;步骤
S3
:启动分组扫描
next
阶段,从分组扫描获取
PFS
页面;步骤
S4
:分组扫描返回有效
PFS
页面则执行步骤
S6
,否则执行步骤
S5
;步骤
S5
:分组扫描已经结束,结束堆扫描;步骤
S6
:当前
PFS
页面是否存在下一个有效范围,是则继续,否则继续执行步骤
S3
;步骤
S7
:获取有效范围,解析8个页面上的所有行,并将所有行放到待发送缓冲区;步骤
S8
:将缓冲区中的数据发送给前端,并回到
S6。2.
如权利要求1所述的一种数据库单表分组扫描方法,其特征在于:所述
SQL
语句的语法如下:
DIRECTEXTENTcolumnFROMtGROUPcountByn
;其中,
DIRECTEXTENT
:表示基于
EXTENT
返回数据,区别于
SELECT
语句,
column
:表示需要获取的投影列,
FROMt
:获取
t
表中的数据,
GROUPcount

GROUP
关键字表示分组,分成
count
组,
Byn

By
表示获取第
n
组,使用
PFS
页面号与
count
取模,如果值等于
n
则说明需要获取该页面,否则不获取本
PFS

。3.
如权利要求2所述的一种数据库单表分组扫描方法,其特征在于:所述
SQL
语句的语法预期结果为:
DIRECTEXTENTcolumnFROMtGROUP2By0;
合并上
DIRECTEXTENTcolumnFROMtGROUP2By1;
数据结果等于
SELECTCOLUMNfromt。4.
如权利要求1所述的一种数据库单表分组扫描方法,其特征在于:所述分组扫描
begin
阶段包括以下步骤:步骤
S21
:根据表名字定位到堆根页面,设置根页面为当前页面;步骤
S22
:获取当前页面管理的第一个子项页面,判断子项页面类型是否为
PFS
页面,如果是则执行步骤
S24
,如果不是则执行步骤
S23
...

【专利技术属性】
技术研发人员:李彬何清法刘碧楠周丽霞马岳刘爱莉顾云苏吴嵩赵冬伟胡薇
申请(专利权)人:天津神舟通用数据技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1