分区分裂方法、装置、电子设备及可读存储介质.pdf

上传人:奶盖 文档编号:11653206 上传时间:2021-10-13 格式:PDF 页数:22 大小:695.62KB
收藏 版权申诉 举报 下载
分区分裂方法、装置、电子设备及可读存储介质.pdf_第1页
第1页 / 共22页
分区分裂方法、装置、电子设备及可读存储介质.pdf_第2页
第2页 / 共22页
分区分裂方法、装置、电子设备及可读存储介质.pdf_第3页
第3页 / 共22页
文档描述:

《分区分裂方法、装置、电子设备及可读存储介质.pdf》由会员分享,可在线阅读,更多相关《分区分裂方法、装置、电子设备及可读存储介质.pdf(22页完成版)》请在专利查询网上搜索。

1、(19)中华人民共和国国家知识产权局 (12)发明专利申请 (10)申请公布号 (43)申请公布日 (21)申请号 201910080122.9 (22)申请日 2019.01.28 (71)申请人 阿里巴巴集团控股有限公司 地址 英属开曼群岛大开曼资本大厦一座四 层847号邮箱 (72)发明人 李晨曦赵裕众徐虎 (74)专利代理机构 北京众达德权知识产权代理 有限公司 11570 代理人 刘杰 (51)Int.Cl. G06F 16/21(2019.01) G06F 16/22(2019.01) G06F 16/18(2019.01) (54)发明名称 分区分裂方法、 装置、 电子设备及可读。

2、存储 介质 (57)摘要 本说明书实施例提供了一种分区分裂方法, 通过将目标源分区中的数据文件划分为两个以 上数据组, 先将其中一个数据组作为目标分裂数 据组, 按照预设分裂规则将目标分裂数据组分裂 后赋给相应的新分区, 待该目标分裂数据组分裂 完成后, 再重新从剩余数据组中选取一个数据组 作为目标分裂数据组, 经过多轮完成所有数据组 的分裂, 将分区分裂对资源的消耗分散到多个时 间段, 节省了分裂过程占用的CPU、 IO和磁盘空间 等资源。 权利要求书4页 说明书14页 附图3页 CN 110032549 A 2019.07.19 CN 110032549 A 1.一种分区分裂方法, 包括:。

3、 针对目标源分区创建两个以上新分区; 将所述目标源分区中的数据文件划分为两个以上数据组, 从所述两个以上数据组中选 取一个数据组作为目标分裂数据组, 对所述目标分裂数据组执行分裂步骤, 待所述目标分 裂数据组分裂完成后, 重新在所述两个以上数据组中, 除分裂完成的数据组以外的其余数 据组中选取一个数据组作为目标分裂数据组, 直至将所述两个以上数据组均分裂完毕; 其中, 所述分裂步骤包括: 根据预设的分裂规则将所述目标分裂数据组分裂为多个子 数据组, 且每个子数据组对应于一个新分区, 将所述每个子数据组分别赋给与该子数据组 对应的新分区。 2.根据权利要求1所述的方法, 所述将所述每个子数据组分。

4、别赋给与该子数据组对应 的新分区之后, 还包括: 将分裂完成的目标分裂数据组从所述目标源分区中删除。 3.根据权利要求1所述的方法, 所述将所述目标源分区中的数据文件划分为两个以上 数据组, 从所述两个以上数据组中选取一个数据组作为目标分裂数据组, 对所述目标分裂 数据组执行分裂步骤之前, 还包括: 针对所述目标源分区中存储的数据文件, 在每个新分区中创建引用文件, 所述引用文 件用于引用所述数据文件; 所述将所述每个子数据组分别赋给与该子数据组对应的新分区之后, 还包括: 当所述引用文件对应的数据均被分裂完成后, 将所述引用文件从所述新分区中删除。 4.一种分区分裂方法, 应用于采用日志结构。

5、合并树LSM tree的数据库系统, 包括: 针对目标源分区创建两个以上新分区, 所述目标源分区中存储有第一数据文件, 所述 第一数据文件为数据量超过预设值的数据文件; 对所述第一数据文件执行第一分裂步骤, 以将所述第一数据文件分裂到所述两个以上 新分区中, 其中, 所述第一分裂步骤包括: 将所述第一数据文件划分为两个以上第一数据组, 从所述两个以上第一数据组中选取 一个第一数据组作为目标分裂数据组; 根据预设的分裂规则将所述目标分裂数据组分裂为多个第二数据组, 且每个第二数据 组对应于一个新分区, 将所述每个第二数据组分别赋给与该第二数据组对应的新分区, 并 对所述新分区中的目标数据进行合并。

6、处理; 重新在所述两个以上第一数据组中, 除分裂完成的第一数据组以外的其余第一数据组 中选取一个第一数据组作为目标分裂数据组, 直至将所述两个以上第一数据组均分裂完 毕。 5.根据权利要求4所述的方法, 所述目标源分区中还存储有第二数据文件, 所述第二数 据文件为数据量不超过所述预设值的数据文件, 所述方法还包括: 对所述第二数据文件执行第二分裂步骤, 以将所述第二数据文件分裂到所述两个以上 新分区中, 其中, 所述第二分裂步骤包括: 根据预设的分裂规则将所述第二数据文件分裂为多个 第三数据组, 且每个第三数据组对应于一个新分区; 将所述每个第三数据组分别赋给与该 第三数据组对应的新分区。 权。

7、利要求书 1/4 页 2 CN 110032549 A 2 6.根据权利要求4所述的方法, 所述第一数据文件为基线数据文件, 所述目标数据包括 所述新分区中的基线数据和转储数据, 其中, 所述基线数据包括对当前目标分裂数据组进行分裂得到的数据以及对上一个目 标分裂数据组进行分裂且合并后得到的数据, 所述转储数据包括对所述目标源分区中的转 储数据文件进行分裂得到的数据和/或对写入所述新分区的新数据进行冻结以及转储处理 后得到的数据。 7.根据权利要求4所述的方法, 所述目标数据包括所述新分区中的基线数据和转储数 据, 所述基线数据和转储数据均包括多个数据块, 每个数据块包括多个数据条目, 所述对。

8、所 述新分区中的目标数据进行合并处理, 包括: 在所述新分区中构建一个目标文件; 判断所述目标数据包含的数据块之间是否存在交集; 若不存在, 则将所述基线数据包含的所有数据块均直接放入所述目标文件中, 并将所 述转储数据的每个数据条目依次迭代到所述目标文件中; 若存在, 则分别将所述基线数据和转储数据中每个数据块的每个数据条目依次迭代到 所述目标文件中, 并在迭代过程中, 将相交的数据条目融合成一条新的数据条目再放入所 述目标文件中。 8.根据权利要求4所述的方法, 所述将所述每个第二数据组分别赋给与该第二数据组 对应的新分区之后, 还包括: 将分裂完成的目标分裂数据组从所述目标源分区中删除。。

9、 9.根据权利要求4所述的方法, 所述对所述第一数据文件执行第一分裂步骤之前, 还包 括: 针对所述目标源分区中存储的每个数据文件, 在每个新分区中创建相应的引用文件, 每个所述引用文件用于引用相应的数据文件; 所述将所述每个第二数据组分别赋给与该第二数据组对应的新分区之后, 还包括: 当所述引用文件对应的数据文件被分裂完成后, 将所述引用文件从所述新分区中删 除。 10.根据权利要求9所述的方法, 所述对所述第一数据文件执行第一分裂步骤, 以将所 述第一数据文件分裂到所述两个以上新分区中之前, 还包括: 判断所述目标源分区是否满足预设的转储条件, 若是, 对所述目标源分区中的数据进 行转储处。

10、理; 待所述目标源分区转储完成后, 对所述目标源分区对应的每个新分区中的引用文件进 行更新。 11.一种分区分裂装置, 包括: 第一创建模块, 用于针对目标源分区创建两个以上新分区; 第一分裂模块, 用于将所述目标源分区中的数据文件划分为两个以上数据组, 从所述 两个以上数据组中选取一个数据组作为目标分裂数据组, 对所述目标分裂数据组执行分裂 步骤, 待所述目标分裂数据组分裂完成后, 重新在所述两个以上数据组中, 除分裂完成的数 据组以外的其余数据组中选取一个数据组作为目标分裂数据组, 直至将所述两个以上数据 组均分裂完毕; 权利要求书 2/4 页 3 CN 110032549 A 3 其中,。

11、 所述分裂步骤包括: 根据预设的分裂规则将所述目标分裂数据组分裂为多个子 数据组, 且每个子数据组对应于一个新分区, 将所述每个子数据组分别赋给与该子数据组 对应的新分区。 12.根据权利要求11所述的装置, 还包括: 第一数据删除模块, 用于将分裂完成的目标分裂数据组从所述目标源分区中删除。 13.根据权利要求11所述的装置, 还包括: 第一引用模块, 用于针对所述目标源分区中存储的数据文件, 在每个新分区中创建引 用文件, 所述引用文件用于引用所述数据文件; 第一引用删除模块, 用于当所述引用文件对应的数据均被分裂完成后, 将所述引用文 件从所述新分区中删除。 14.一种分区分裂装置, 应。

12、用于采用日志结构合并树LSM tree的数据库系统, 包括: 第二创建模块, 用于针对目标源分区创建两个以上新分区, 所述目标源分区中存储有 第一数据文件, 所述第一数据文件为数据量超过预设值的数据文件; 第二分裂模块, 用于对所述第一数据文件执行第一分裂步骤, 以将所述第一数据文件 分裂到所述两个以上新分区中, 其中, 所述第一分裂步骤包括: 将所述第一数据文件划分为两个以上第一数据组, 从所述两个以上第一数据组中选取 一个第一数据组作为目标分裂数据组; 根据预设的分裂规则将所述目标分裂数据组分裂为多个第二数据组, 且每个第二数据 组对应于一个新分区, 将所述每个第二数据组分别赋给与该第二数。

13、据组对应的新分区, 并 对所述新分区中的目标数据进行合并处理; 重新在所述两个以上第一数据组中, 除分裂完成的第一数据组以外的其余第一数据组 中选取一个第一数据组作为目标分裂数据组, 直至将所述两个以上第一数据组均分裂完 毕。 15.根据权利要求14所述的装置, 所述目标源分区中还存储有第二数据文件, 所述第二 数据文件为数据量不超过所述预设值的数据文件, 所述装置还包括: 第三分裂模块, 用于对所述第二数据文件执行第二分裂步骤, 以将所述第二数据文件 分裂到所述两个以上新分区中, 其中, 所述第二分裂步骤包括: 根据预设的分裂规则将所述第二数据文件分裂为多个 第三数据组, 且每个第三数据组对。

14、应于一个新分区; 将所述每个第三数据组分别赋给与该 第三数据组对应的新分区。 16.根据权利要求14所述的装置, 所述第一数据文件为基线数据文件, 所述目标数据包 括所述新分区中的基线数据和转储数据, 其中, 所述基线数据包括对当前目标分裂数据组进行分裂得到的数据以及对上一个目 标分裂数据组进行分裂且合并后得到的数据, 所述转储数据包括对所述目标源分区中的转 储数据文件进行分裂得到的数据和/或对写入所述新分区的新数据进行冻结以及转储处理 后得到的数据。 17.根据权利要求14所述的装置, 所述目标数据包括所述新分区中的基线数据和转储 数据, 所述基线数据和转储数据均包括多个数据块, 每个数据块。

15、包括多个数据条目, 所述第 二分裂模块包括: 权利要求书 3/4 页 4 CN 110032549 A 4 构建子模块, 用于在所述新分区中构建一个目标文件; 判断子模块, 用于判断所述目标数据包含的数据块之间是否存在交集; 第一写入子模块, 用于当所述判断子模块判定不存在交集时, 则将所述基线数据包含 的所有数据块均直接放入所述目标文件中, 并将所述转储数据的每个数据条目依次迭代到 所述目标文件中; 第二写入子模块, 用于当所述判断子模块判定存在交集时, 则分别将所述基线数据和 转储数据中每个数据块的每个数据条目依次迭代到所述目标文件中, 并在迭代过程中, 将 相交的数据条目融合成一条新的数。

16、据条目再放入所述目标文件中。 18.根据权利要求14所述的装置, 还包括: 第二数据删除模块, 用于将分裂完成的目标分裂数据组从所述目标源分区中删除。 19.根据权利要求14所述的装置, 还包括: 第二引用模块, 用于针对所述目标源分区中存储的每个数据文件, 在每个新分区中创 建相应的引用文件, 每个所述引用文件用于引用相应的数据文件; 第二引用删除模块, 用于当所述引用文件对应的数据文件被分裂完成后, 将所述引用 文件从所述新分区中删除。 20.根据权利要求19所述的装置, 还包括: 转储判断模块, 用于判断所述目标源分区是否满足预设的转储条件, 若是, 对所述目标 源分区中的数据进行转储处。

17、理; 待所述目标源分区转储完成后, 对所述目标源分区对应的 每个新分区中的引用文件进行更新。 21.一种电子设备, 包括: 存储器; 一个或多个处理器; 及 权利要求11-20中任一项所述的分区分裂装置, 存储于所述存储器中并被配置成由一 个或多个处理器执行。 22.一种计算机可读存储介质, 其上存储有计算机程序, 该程序被处理器执行时实现权 利要求1-10中任一项所述方法的步骤。 权利要求书 4/4 页 5 CN 110032549 A 5 分区分裂方法、 装置、 电子设备及可读存储介质 技术领域 0001 本说明书实施例涉及数据库技术领域, 尤其涉及一种分区分裂方法、 装置、 电子设 备及。

18、可读存储介质。 背景技术 0002 数据库分区是一种物理数据库设计技术, 当单个分区数据量过大时, 需要对分区 进行分裂。 分区分裂是通过将一个分区分裂成多个分区后, 下线原始的分区, 使分裂出的新 分区上线的服务, 使得原始分区的写入读取压力分摊到不同的分区上, 突破单分区处理能 力的极限。 然而, 由于某些数据库中单个分区过大, 在对其进行分区分裂时会存在需要消耗 大量CPU、 IO以及磁盘空间等资源的问题。 发明内容 0003 本说明书实施例提供了一种分区分裂方法、 装置、 电子设备及可读存储介质。 0004 第一方面, 本说明书实施例提供了一种分区分裂方法, 包括: 针对目标源分区创建。

19、 两个以上新分区; 将所述目标源分区中的数据文件划分为两个以上数据组, 从所述两个以 上数据组中选取一个数据组作为目标分裂数据组, 对所述目标分裂数据组执行分裂步骤, 待所述目标分裂数据组分裂完成后, 重新在所述两个以上数据组中, 除分裂完成的数据组 以外的其余数据组中选取一个数据组作为目标分裂数据组, 直至将所述两个以上数据组均 分裂完毕。 其中, 所述分裂步骤包括: 根据预设的分裂规则将所述目标分裂数据组分裂为多 个子数据组, 且每个子数据组对应于一个新分区, 将所述每个子数据组分别赋给与该子数 据组对应的新分区。 0005 第二方面, 本说明书实施例提供了一种分区分裂方法, 应用于采用日。

20、志结构合并 树LSM tree的数据库系统, 包括: 针对目标源分区创建两个以上新分区, 所述目标源分区中 存储有第一数据文件, 所述第一数据文件为数据量超过预设值的数据文件; 对所述第一数 据文件执行第一分裂步骤, 以将所述第一数据文件分裂到所述两个以上新分区中。 其中, 所 述第一分裂步骤包括: 将所述第一数据文件划分为两个以上第一数据组, 从所述两个以上 第一数据组中选取一个第一数据组作为目标分裂数据组; 根据预设的分裂规则将所述目标 分裂数据组分裂为多个第二数据组, 且每个第二数据组对应于一个新分区, 将所述每个第 二数据组分别赋给与该第二数据组对应的新分区, 并对所述新分区中的目标数。

21、据进行合并 处理; 重新在所述两个以上第一数据组中, 除分裂完成的第一数据组以外的其余第一数据 组中选取一个第一数据组作为目标分裂数据组, 直至将所述两个以上第一数据组均分裂完 毕。 0006 第三方面, 本说明书实施例提供了一种分区分裂装置, 包括: 第一创建模块, 用于 针对目标源分区创建两个以上新分区; 第一分裂模块, 用于将所述目标源分区中的数据文 件划分为两个以上数据组, 从所述两个以上数据组中选取一个数据组作为目标分裂数据 组, 对所述目标分裂数据组执行分裂步骤, 待所述目标分裂数据组分裂完成后, 重新在所述 说明书 1/14 页 6 CN 110032549 A 6 两个以上数据。

22、组中, 除分裂完成的数据组以外的其余数据组中选取一个数据组作为目标分 裂数据组, 直至将所述两个以上数据组均分裂完毕。 其中, 所述分裂步骤包括: 根据预设的 分裂规则将所述目标分裂数据组分裂为多个子数据组, 且每个子数据组对应于一个新分 区, 将所述每个子数据组分别赋给与该子数据组对应的新分区。 0007 第四方面, 本说明书实施例提供了一种分区分裂装置, 应用于采用日志结构合并 树LSM tree的数据库系统, 包括: 第二创建模块, 用于针对目标源分区创建两个以上新分 区, 所述目标源分区中存储有第一数据文件, 所述第一数据文件为数据量超过预设值的数 据文件; 第二分裂模块, 用于对所述。

23、第一数据文件执行第一分裂步骤, 以将所述第一数据文 件分裂到所述两个以上新分区中。 0008 其中, 所述第一分裂步骤包括: 0009 将所述第一数据文件划分为两个以上第一数据组, 从所述两个以上第一数据组中 选取一个第一数据组作为目标分裂数据组; 0010 根据预设的分裂规则将所述目标分裂数据组分裂为多个第二数据组, 且每个第二 数据组对应于一个新分区, 将所述每个第二数据组分别赋给与该第二数据组对应的新分 区, 并对所述新分区中的目标数据进行合并处理; 0011 重新在所述两个以上第一数据组中, 除分裂完成的第一数据组以外的其余第一数 据组中选取一个第一数据组作为目标分裂数据组, 直至将所。

24、述两个以上第一数据组均分裂 完毕。 0012 第五方面, 本说明书实施例提供了一种电子设备, 包括: 存储器; 一个或多个处理 器; 及上述第三方面提供的分区分裂装置或上述第四方面提供的分区分裂装置, 存储于所 述存储器中并被配置成由一个或多个处理器执行。 0013 第六方面, 本说明书实施例提供了一种计算机可读存储介质, 其上存储有计算机 程序, 该程序被处理器执行时实现上述第一方面提供的分区分裂方法或第二方面提供的分 区分裂方法的步骤。 0014 本说明书实施例有益效果如下: 0015 本说明书实施例提供的分区分裂方法, 通过将目标源分区中的数据文件划分为两 个以上数据组, 先将其中一个数。

25、据组作为目标分裂数据组, 按照预设分裂规则将目标分裂 数据组分裂后赋给相应的新分区, 待该目标分裂数据组分裂完成后, 再重新从剩余数据组 中选取一个数据组作为目标分裂数据组, 经过多轮分裂, 直至将所有的数据组均分裂完成。 这样通过多轮完成对分区的分裂, 将分区分裂对资源的消耗分散到多个时间段, 有效地节 省了分裂过程在同一时间段内占用的CPU, IO和磁盘空间等资源, 提高了分裂性能。 附图说明 0016 图1为本说明书实施例第一方面提供的分区分裂方法的流程图; 0017 图2为本说明书实施例第二方面提供的分区分裂方法的流程图; 0018 图3为本说明书实施例第二方面提供的第一分裂步骤的步骤。

26、流程图; 0019 图4为本说明书实施例第二方面提供的一种渐进分裂的简化模型示例图; 0020 图5为本说明书实施例第三方面提供的分区分裂装置的模块框图; 0021 图6为本说明书实施例第四方面提供的分区分裂装置的模块框图; 说明书 2/14 页 7 CN 110032549 A 7 0022 图7为本说明书实施例第五方面提供的一种存储服务器的结构示意图。 具体实施方式 0023 为了更好的理解上述技术方案, 下面通过附图以及具体实施例对本说明书实施例 的技术方案做详细的说明, 应当理解本说明书实施例以及实施例中的具体特征是对本说明 书实施例技术方案的详细的说明, 而不是对本说明书技术方案的限。

27、定, 在不冲突的情况下, 本说明书实施例以及实施例中的技术特征可以相互组合。 需要说明的是, 本说明书实施例 中, 术语 “两个以上” 包括两个或大于两个的情况; 术语 “和/或” , 仅仅是一种描述关联对象 的关联关系, 表示可以存在三种关系, 例如, M和/或N, 可以表示: 单独存在M, 同时存在M和N, 单独存在N这三种情况。 0024 在本说明书实施例中, 分区分裂使一个分区变成多个新分区, 并将原分区中的数 据按照预设分裂规则分配到多个新分区中, 被各个新分区所有, 能够解决一个分区的访问 超过单台机器(存储服务器)处理能力的问题。 另外, 分区分裂的方式可以有多种, 例如, 可 。

28、以采用Range(范围)分裂或Hash(哈希)分裂。 其中, Range分裂是把原分区中的数据划分为 几个不重复的范围, 赋给相应的新分区, 不需要重新划分每一行数据; Hash分裂是指根据原 分区中数据的hash值划分数据, 需要对每一行数据求hash后重新分配。 0025 需要说明的是, 本说明书实施例提供的分区分裂方法应用于数据库系统中, 具体 可以由数据库系统中的存储设备或管理设备执行, 例如, 可以由数据库系统中的存储服务 器执行。 0026 第一方面, 本说明书实施例提供了一种分区分裂方法。 如图1所示, 该方法包括步 骤S101-步骤S103。 0027 步骤S101, 针对目标。

29、源分区创建两个以上新分区。 0028 本实施例中, 可以根据具体数据库的存储要求, 将数据库中满足预设的分裂条件 的分区作为目标源分区, 针对目标源分区创建两个以上新分区, 进而对分区进行分裂。 每个 目标源分区对应创建的新分区数量可以根据实际需求设置, 例如, 可以为2个、 5个、 10个或 100个等。 举例来讲, 当需要将目标源分区F分裂为两个分区时, 则需要针对目标源分区F创 建两个新分区F1和F2。 0029 步骤S102, 将所述目标源分区中的数据文件划分为两个以上数据组。 0030 在本实施例中, 数据文件是指物理文件, 是分区中实际存在的真实文件, 即是分区 在创建后写入并存储。

30、在分区内的数据文件。 例如, 在以键值(Key-Value)格式进行数据存储 的数据库中, 由键(Key)和值(Value)构成的数据文件, 其中, 逻辑上Key和Value是一对一的 关系, Key相当于数据文件的索引, Value是Key对应的数值。 0031 具体来讲, 可以根据实际需要预先配置目标源分区中的数据文件具体需要划分的 数据组数量。 例如, 可以由用户预先配置, 或者, 也可以由服务器根据资源占用情况来预先 配置。 所划分的数据组数量决定了以下步骤S103中需要分裂的轮数。 0032 步骤S103, 从所述两个以上数据组中选取一个数据组作为目标分裂数据组, 对所 述目标分裂数。

31、据组执行分裂步骤, 待所述目标分裂数据组分裂完成后, 重新在所述两个以 上数据组中, 除分裂完成的数据组以外的其余数据组中选取一个数据组作为目标分裂数据 组, 直至将所述两个以上数据组均分裂完毕。 说明书 3/14 页 8 CN 110032549 A 8 0033 具体来讲, 步骤S103所述的分裂步骤可以包括: 根据预设的分裂规则将所述目标 分裂数据组分裂为多个子数据组, 且每个子数据组对应于一个新分区, 将所述每个子数据 组分别赋给与该子数据组对应的新分区。 需要说明的是, 子数据组的数量与步骤S101创建 的新分区的数量相同。 0034 在本实施例中, 分裂规则可以预先根据实际需要以及。

32、预设的分裂方式设置, 举例 来讲, 当采用Range分裂时, 分裂规则可以用于将目标分裂数据组划分为几个不重复的范 围, 分别将每个范围的数据赋给相应的新分区; 当采用Hash分区时, 分裂规则可以为基于用 户定义的表达式的返回值来对目标分裂数据组中的数据进行分裂。 其中, 表达式可以根据 实际需要设置。 例如, 当目标分裂数据组中的数据为行数据时, 每一行数据包括两列, 其中 一列为主键(key), 另一列为与主键对应的值, 分裂规则可以为: key2, 即对主键求2的余 数, 假设需要将目标源分区分裂为两个新分区, 则可以将返回值为奇数的行数据赋给其中 一个新分区, 将返回值为偶数的行数据。

33、赋给另外一个新分区。 当然, 除了上述两种分裂方式 外, 也可以采用其他分裂方式。 0035 举例来讲, 假设需要将目标源分区F分裂为两个新分区F1和F2, 且目标源分区F中 存储有数据文件: A、 B、 C和D, 假设将这些数据文件划分为四个数据组, 且一个文件作为一个 数据组。 在实际应用中, 可以按照数据存储顺序, 分四轮依次对每个数据组进行分裂, 即先 将文件A作为目标分裂数据组, 按照预设的分裂规则将文件A分裂为子数据组A1和子数据组 A2, 将子数据组A1赋给新分区F1, 将子数据组A2赋给新分区F2; 待文件A分裂完成后, 重新将 文件B作为目标分裂数据组, 按照上述分裂规则将文。

34、件B分裂为子数据组B1和子数据组B2, 将子数据组B1赋给新分区F1, 将子数据组B2赋给新分区F2; 待文件B分裂完成后, 重新将文 件C作为目标分裂数据组, 按照上述分裂规则将文件C分裂为子数据组C1和子数据组C2, 将 子数据组C1赋给新分区F1, 将子数据组C2赋给新分区F2; 待文件C分裂完成后, 按照上述分 裂规则将文件D分裂为子数据组D1和子数据组D2, 将子数据组D1赋给新分区F1, 将子数据组 D2赋给新分区F2, 从而完成对目标源分区的数据分裂。 0036 本实施例通过渐进分裂的方式, 即将目标源分区中存储的数据分多轮进行分裂, 每轮只分裂目标源分区中存储的一部分数据, 从。

35、而将分区分裂对资源的消耗分散到多个时 间段, 有效地节省了分裂过程在同一时间段内占用的CPU, IO和磁盘空间等资源。 0037 另外, 在本说明书一实施例中, 为了进一步减少分区分裂过程消耗的资源, 在上述 步骤S103所述的渐进分裂过程中, 在完成每一轮分裂后, 即针对当前的目标分裂数据组, 将 每个子数据组分别赋给与该子数据组对应的新分区之后, 还可以包括: 将分裂完成的目标 分裂数据组从目标源分区中删除, 这样就可以在分区分裂过程中释放这部分数据占用的空 间资源, 节省了磁盘空间资源。 0038 例如, 在上述示例中, 可以在分区分裂过程中, 完成了文件A的分裂后, 就可以将文 件A从。

36、目标源分区中删除, 完成了文件B的分裂后, 就可以将文件B从目标源分区中删除, 完 成了文件C的分裂后, 就可以将文件C从目标源分区中删除, 完成了文件D的分裂后, 就可以 将文件D从目标源分区中删除, 而不用等到将目标源分区的数据均分裂完成后, 再删除目标 源分区中的数据文件, 有效地节省了磁盘空间资源。 0039 在本实施例中, 上述步骤S102和步骤S103是对新分区进行物理分裂的过程。 可以 理解的是, 为了便于分区分裂过程中用户能够正常执行查询操作, 在本说明书一实施例中, 说明书 4/14 页 9 CN 110032549 A 9 在对新分区进行物理分裂之前, 还需要先进行逻辑分裂。

37、。 也就是说, 在将所述目标源分区中 的数据文件划分为两个以上数据组, 从所述两个以上数据组中选取一个数据组作为目标分 裂数据组, 对所述目标分裂数据组执行分裂步骤之前, 还可以包括: 针对所述目标源分区中 存储的数据文件, 在每个新分区中创建引用文件, 所述引用文件用于引用所述数据文件。 0040 需要说明的是, 引用文件是逻辑文件, 用于指向目标源分区中被引用的数据文件。 在本实施例中, 针对目标源分区中存储的每个数据文件, 均创建相应的引用文件。 例如, 在 上述示例中, 目标源分区F中存储有数据文件: A、 B、 C和D, 则需要在针对目标源分区F创建的 新分区F1和F2中分别生成指向。

38、A、 指向B、 指向C以及指向D的引用文件, 如在新分区F1中生成 引用文件a1、 b1、 c1和d1, 在新分区F2中生成引用文件a2、 b2、 c2和d2。 其中, a1、 a2均指向数 据文件A, b1、 b2均指向数据文件B, c1、 c2均指向数据文件C, d1、 d2均指向数据文件D。 0041 此时, 在将所述每个子数据组分别赋给与该子数据组对应的新分区之后, 还包括: 当所述引用文件对应的数据均被分裂完成后, 将所述引用文件从所述新分区中删除。 这样 就可以相应释放引用文件所占用的空间资源。 例如, 在上述示例中, 当数据文件A分裂完成 后, 就可以删除新分区F1中生成的引用文。

39、件a1和新分区F2中生成的引用文件a2。 0042 需要说明的是, 在完成新分区的逻辑分裂后, 且在对新分区进行物理分裂之前, 当 接收到用户的查询请求, 需要查询该新分区中的某些数据时, 根据查询请求在新分区引用 的数据文件以及新分区中新写入的数据中进行查询, 由于此时新分区是引用对应目标源分 区中的数据文件, 可能会查询出不属于该新分区的数据, 因此, 需要根据上述预设的分裂规 则对查询出来的数据进行过滤, 并将从新分区中新写入的数据中查询到的数据与上述过滤 后得到的数据进行合并, 将合并后的结果反馈给用户。 0043 例如, 在上述示例中, 目标源分区中存储的数据文件包括多个行数据, 且。

40、每个行数 据包括两列, 其中一列为主键(key), 另一列为与主键对应的值, 分裂规则可以为: key2, 将该表达式返回值为奇数的数据赋给新分区F1, 返回值为偶数的数据赋给新分区F2。 当用 户需要查询新分区F1中的值为1的数据时, 先根据查询请求从引用的数据文件中进行查询, 例如查询到的数据包括: (1, 1)和(2, 1), 则根据该分裂规则将不属于新分区F1的数据(2, 1) 过滤掉, 从而得到数据(1, 1)。 0044 本说明书实施例提供的分区分裂方法, 通过多轮完成对分区的分裂, 将分区分裂 对资源的消耗分散到多个时间段, 有效地节省了分裂过程在同一时间段内占用的CPU, IO。

41、和 磁盘空间等资源, 提高了分裂性能。 并且, 适用范围广, 能够适用于多种类型的分区如Range 分区、 Hash分区以及list分区等。 0045 第二方面, 本说明书实施例还提供了一种分区分裂方法, 应用于采用LSM tree (Log Structure Merge Tree, 日志结构合并树)的数据库系统, 例如, 可以应用于 OceanBase数据库、 Oracle数据库或MySQL数据库等。 下面主要以OceanBase数据库为例, 对 本实施例提供的分区分裂方法进行描述。 需要说明的是, 本实施例中对于与上述第一方面 提供的实施例相同或相似的部分不作详细描述, 具体可以参考上述。

42、第一方面的相应描述。 0046 如图2所示, 本实施例提供的分区分裂方法至少可以包括以下步骤S201至步骤 S202。 0047 步骤S201, 针对目标源分区创建两个以上新分区, 所述目标源分区中存储有第一 数据文件, 所述第一数据文件为数据量超过预设值的数据文件; 说明书 5/14 页 10 CN 110032549 A 10 0048 需要说明的是, LSM tree为由多层独立的数据结构组成的数据存储结构。 采用LSM tree结构的数据库中的分区通常由多个静态的sstable、 冻结memtable和一个活跃 memtable组成。 采用LSM tree结构的数据库中分区的数据需要定。

43、期进行合并, 释放内存, 引 入分区分裂后, 两者都会消耗大量的资源, 可能会对在线业务造成严重影响, 因此需要协调 分裂与合并的时机。 0049 以OceanBase数据库为例, 活跃memtable是LSM tree中的内存数据结构, 负责新数 据的写入; 冻结memtable是由活跃memtable冻结而来, 不能有新数据写入; 静态的sstable 包括转储sstable和基线sstable, 转储sstable是LSM tree中持久化在磁盘中的数据结构, 由冻结memtable和转储sstable转储而来, 由多个宏块组成, 数据量相对较小; 基线sstable 是LSM tree。

44、中持久化在磁盘中的数据结构, 由多个转储sstable和基线sstable合并而来, 由多个宏块组成, 数据量远远大于memtable和转储sstable, 且数据格式与转储sstable略 有不同。 其中, 每个宏块包含多行已排序的数据, 大小为固定值如可以为2M, 持久化在磁盘 上, 是sstable基本组成单位。 0050 可以理解的是, 本说明书实施例中, 冻结是指动态数据即活跃memtable更新到一 定时间或者数据量达到一定规模后, 数据库停止该块动态数据的修改, 后续的更新写入新 的动态数据块即新的活跃memtable, 旧的动态数据块不再修改。 转储是指出于节省内存或 者持久化。

45、等原因将一个冻结的动态数据块即上述冻结memtable持久化(转化为转储 sstable并保存到SSD固态盘或磁盘上)的过程。 合并是指将一个或多个转储sstable和基线 sstable进行合并生成新的基线sstable的过程。 0051 另外, 需要说明的是, 在针对目标源分区创建新分区后, 需要冻结目标源分区中的 活跃memtable, 冻结后的写入都在新分区中的活跃memtable上。 0052 本实施例中, 目标源分区中存在多种类型的数据结构, 将目标源分区中数据量超 过预设值的数据文件作为第一数据文件。 其中, 预设值具体可以根据实际需要设置。 以 OceanBase数据库为例, 。

46、基线sstable的数据量远远大于memtable和转储sstable, 因此, 在 本实施例的一种实施方式中, 可以将目标源分区中的基线sstable文件作为第一数据文件, 即对基线sstable文件执行以下第一分裂步骤。 需要说明的是, 在本说明书其他实施例中, 也可以将其他数据结构的数据块或数据文件作为第一数据文件, 例如, 可以将基线sstable 和转储sstable均作为第一数据文件, 从而分别对基线sstable和转储sstable进行分轮渐 进分裂, 此处不作限制。 0053 步骤S202, 对所述第一数据文件执行第一分裂步骤, 以将所述第一数据文件分裂 到所述两个以上新分区中。

47、。 0054 具体来讲, 如图3所示, 上述第一分裂步骤可以包括以下步骤S301至步骤S303。 0055 步骤S301, 将所述第一数据文件划分为两个以上第一数据组, 从所述两个以上第 一数据组中选取一个第一数据组作为目标分裂数据组。 0056 步骤S302, 根据预设的分裂规则将所述目标分裂数据组分裂为多个第二数据组, 且每个第二数据组对应于一个新分区, 将所述每个第二数据组分别赋给与该第二数据组对 应的新分区, 并对所述新分区中的目标数据进行合并处理。 0057 步骤S303, 重新在所述两个以上第一数据组中, 除分裂完成的第一数据组以外的 其余第一数据组中选取一个第一数据组作为目标分裂。

48、数据组, 直至将所述两个以上第一数 说明书 6/14 页 11 CN 110032549 A 11 据组均分裂完毕。 0058 本实施例中的第一分裂步骤与上述第一方面提供的实施例中的分裂步骤类似, 区 别之处在于上述第一分裂步骤中, 在每轮将目标分裂数据组分裂完成即将每个第二数据组 分别赋给与该第二数据组对应的新分区后, 需要进一步对新分区中的目标数据进行合并处 理, 即在新分区满足预设的合并条件时, 对目标数据进行合并, 得到目标文件。 需要说明的 是, 第一分裂步骤中与上述第一方面提供的实施例中的分裂步骤类似之处可以具体参照上 述第一方面中的相应表述, 此处不再详述。 0059 为了进一步。

49、减少分区分裂过程消耗的资源, 在上述步骤S302所述的渐进分裂过程 中, 在完成每一轮分裂后, 即针对当前的目标分裂数据组, 将每个第二数据组分别赋给与该 第二数据组对应的新分区之后, 还可以包括: 将分裂完成的目标分裂数据组从所述目标源 分区中删除。 具体过程可以参见上述第一方面中的相应过程。 这样就可以在分区分裂过程 中释放这部分数据占用的空间资源, 节省了磁盘空间资源。 0060 可以理解的是, 在基于LSM的数据库系统中, 随着数据写入不断增多, 转储次数也 会不断增多, 进而转储sstable也会越来越多。 然而, 太多sstable会导致数据查询IO次数增 多, 因此需要不断对这些。

50、sstable进行合并。 本实施例中, 目标数据包括新分区中的基线数 据和转储数据, 即基线sstable和转储sstable。 0061 由于本实施例对第一数据文件采用了分多轮完成分裂的渐进分裂方式, 当第一数 据文件为基线数据文件即目标源分区中的基线sstable文件时, 目标数据中的基线数据可 以包括: 对当前目标分裂数据组进行分裂得到的数据即本轮分裂得到的基线数据以及由上 一个目标分裂数据组分裂且合并后得到的数据即上一轮分裂且合并后得到的目标文件。 需 要说明的是, 若当前分裂过程为第一数据文件的首轮分裂, 则不存在由上一个目标分裂数 据组分裂且合并后得到的数据即不存在上一轮得到的目标。

展开阅读全文
内容关键字: 分区 分裂 方法 装置 电子设备 可读 存储 介质
关于本文
本文标题:分区分裂方法、装置、电子设备及可读存储介质.pdf
链接地址:https://www.zhuanlichaxun.net/pdf/11653206.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1