System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种支持动态扩缩容的数据库分库方法技术_技高网

一种支持动态扩缩容的数据库分库方法技术

技术编号:40438402 阅读:7 留言:0更新日期:2024-02-22 23:02
本发明专利技术涉及数据库技术领域,提供了一种支持动态扩缩容的数据库分库方法。主旨在于如何解决数据迁移问题,提高数据迁移效率,如何解决数据定位问题。主要方案包括设计具有特殊结构的压缩索引树,用于表示多个数据库节点之间的关联关系;增加寻址路径表,用于记录数据历史存储策略;设计动态扩容和缩容分库数量方法,实现在数据库扩容和缩容过程中的动态调整;以及实现正确访问数据的方法,提高数据查询效率。通过上述技术方案,实现了数据库的可动态扩展和可动态缩减,提高了数据库的灵活性和适应性。

【技术实现步骤摘要】

本专利技术涉及数据库,提供了一种支持动态扩缩容的数据库分库方法


技术介绍

1、在应用软件系统中,如果单个数据库不能满足存储容量、访问性能等需求时,一个比较常见的做法就是对数据库分库。其原理是准备多台数据库,每个数据库即是一个分库节点,按一定的规则算法将符合同一规则的数据统一存入同一个分库节点。

2、但简单的分库依然不能够完美解决数据库带来的性能瓶颈问题,如果一开始就设计过多的分库数量,则浪费资源。反之,如果一开设置的分库数量过小,则面临随着数据量增加后,仍然不能满足性能要求。所以对数据库分库提出了支持动态扩容缩容的要求。

3、有的方法是将要存储的数据对象中指定的分库字段内容进行哈希计算,把哈希计算结果对数据库分库节点个数取模,取模结果即为存储目标数据库分库编号,进而把该数据存入该数据库分库节点中。当数据库性能触达瓶颈时,则在此基础上新增一个数据库分库节点,然后再将全量数据全部取出再按相同的算法策略重新存入,数据库分库节点的个数多了,可用于存储的空间多了,同时也有更多的数据库受理并发,以此来减轻单个数据库的读写压力,即实现了数据库的扩容存储。

4、有的方法是将所有数据库分库节点分别随机定义整数编号,编号不能重复,可以不连续,然后将要存储的数据对象指定的分库字段内容进行哈希计算,把哈希计算的结果依次与所有数据库分库节点编号做整数大小比较,然后把该数据存入编号比该哈希值大但又最接近的数据库分库节点中。当数据库性能触达瓶颈时,则在此基础上新增一个数据库分库节点,同样为新增的数据库分库节点随机定义整数编号,新节点编号同样不能与已有节点编号重复,存储策略不变的情况下,那么原本应存入比该新增数据库编号大的数据库分库节点但比新增的数据库分库节点编号小的这部分数据则会被存入新数据库分库节点,以此来分担了原数据库分库节点的存储压力,即实现了数据库的扩容存储。

5、已有的这些方法虽然从理论上能够做到对数据库进行扩容,降低单个数据库的压力,缓解数据量、并发访问的持续增长而导致数据库产生独写性能下降的问题,但在实际的应用场景中仍然存在一些问题,主要体现在以下几个方面:

6、(1)数据迁移问题:在数据库扩容和缩容过程中,需要将数据从一个分库节点迁移到另一个分库节点,这个过程需要对原数据进行重新计算和重新存储,导致部分数据查询失败,同时也会对应用软件的运行产生较大影响,整个数据迁移过程需要较长的时间来执行,可能导致应用软件无法提供正常服务,甚至需要中断软件服务来完成数据迁移。

7、(2)数据定位问题:在数据库扩容和缩容前后,数据的存储位置并没有建立关联关系,当数据库扩容后便无法追踪某数据在数据库扩容前的存储位置,也就无法做到对数据库扩容操作进行回退。如果扩容过程不能回退,则会带来较大的风险,一旦扩容失败或扩容过程中数据转移导致数据丢失,则无法将数据恢复至原位置,其次,也给数据库缩容操作带来较大的难度。

8、(3)扩容和缩容前后数据的关联问题:在扩容和缩容过程中,新旧数据库之间的数据并没有建立关联关系,扩容和缩容完成后,如果需要回退到扩容前的状态,将面临较大的数据定位难题。


技术实现思路

1、本专利技术需要解决的技术问题主要包括:如何解决数据迁移问题,提高数据迁移效率;如何解决数据定位问题,提高数据定位效率;如何建立扩容和缩容前后数据的关联关系,便于回退操作。

2、为了解决上述技术问题,本专利技术采用以下技术手段:

3、一种支持动态扩缩容的数据库分库方法,包括以下步骤:

4、步骤1、构建压缩索引树来表示多个数据库节点之间的关联关系,在压缩索引树中每个节点均对应一个分库,在数据库的扩容和缩容过程中,通过树形结构的父节点分裂子节点以及子节点合并到父节点来表示,树形结构表达了节点与节点的分裂关系;

5、步骤2、采用寻址路径表来记录数据历史存储策略,每个分库节点可通过寻址路径表中的历史寻址路径,即使在扩容、缩容过程的前后,寻址路径动态变化的情况下,根据历史寻址路径快速定位在扩容、缩容前存量数据的准确位置;

6、步骤3、使用压缩的索引树和寻址路径表,实现动态扩容和缩容分库数量的方法,具体为:

7、当一个数据库分库节点需要扩容时,通过父节点分裂子节点的方式增加新的分库节点,同时更新索引树和寻址路径表,将新分库节点与原节点建立关联关系,实现扩容,当需要缩容时,通过缩减分库节点的方式实现,更新索引树和寻址路径表,将待删除节点中的存量数据迁移到合并节点,完成缩容;

8、步骤4、在动态扩容过程和动态缩容的过程中通过数据异步迁移方法实现无需停止服务即可访问数据。

9、上述计算方案中,压缩索引树包括:

10、数据库分库编号:标识了对应的数据库分库,如图1中的a、c、e、g;

11、本节点的哈希前缀:从根节点寻址到各节点的寻址路径,哈希值和当前节点的哈希前缀匹配,则使用本节点对应的数据库分库;

12、右儿子节点指针列表:用一个指针数组存储了不同层级的右儿子节点的指针;

13、寻址路径:每个节点从根节点寻址到该节点的哈希前缀即该节点的寻址路径;

14、生效时间戳:每次扩容、缩容操作影响节点寻址路径变更的时间点,即该寻址路径对应的生效时间戳;

15、寻址路径表:每个节点上所有寻址路径及其对应生效时间戳的历史记录表。

16、上述技术方案中,数据库的动态扩容过程分为以下几个步骤:

17、a1.确定需要扩容的数据库分库节点为当前节点;

18、a2.准备新数据库分库节点为新节点,建立当前节点与新节点的关联关系,即当前节点的指针指向新节点;

19、a3.设置新节点的寻址路径,当前节点的原寻址路径右加1即为新节点的寻址路径;

20、a4.更新当前节点的寻址路径,当前节点的原寻址路径右加0即为当前节点的新寻址路径

21、a5.刷新寻址路径表,将当前节点寻址路径及当前时间戳、新节点寻址路径及当前时间戳增加到寻址路径表。

22、上述技术方案中,数据库的动态缩容过程分为以下几个步骤:

23、b1.确定需要缩容的数据库分库节点为待删除节点,待删除节点的指针列表必须为空,即待删除节点没有指向任何节点;

24、b2.设置指向待删除节点的指针所在的节点为缩容过程的合并节点;

25、b3.设置合并节点的寻址路径,去掉合并节点的当前寻址路径最右一位0即为该合并节点的新寻址路径;

26、b4.刷新寻址路径表,将合并节点的新寻址路径及当前时间戳增加到寻址路径表;

27、b5.异步数据迁移,在系统任意闲时将待删除节点中的存量数据迁移至合并节点;

28、b6.删除合并节点指向待删除节点的指针,将待删除节点从整个系统中移除。

29、上述技术方案中,在动态扩容缩容的过程中,通过目标数据寻址方法实现正确访问数据,本文档来自技高网...

【技术保护点】

1.一种支持动态扩缩容的数据库分库方法,其特征在于:包括以下步骤:

2.根据权利要求1所述的一种支持动态扩缩容的数据库分库方法,其特征在于:压缩索引树包括:

3.根据权利要求1所述的一种支持动态扩缩容的数据库分库方法,其特征在于:数据库的动态扩容过程分为以下几个步骤:

4.根据权利要求1所述的一种支持动态扩缩容的数据库分库方法,其特征在于:数据库的动态缩容过程分为以下几个步骤:

5.根据权利要求1所述的一种支持动态扩缩容的数据库分库方法,其特征在于:在动态扩容缩容的过程中,通过目标数据寻址方法实现正确访问数据,目标数据寻址方法分为以下几个步骤:

6.根据权利要求5所述的一种支持动态扩缩容的数据库分库方法,其特征在于:数据库的缩容过程中的数据异步迁移方法,

【技术特征摘要】

1.一种支持动态扩缩容的数据库分库方法,其特征在于:包括以下步骤:

2.根据权利要求1所述的一种支持动态扩缩容的数据库分库方法,其特征在于:压缩索引树包括:

3.根据权利要求1所述的一种支持动态扩缩容的数据库分库方法,其特征在于:数据库的动态扩容过程分为以下几个步骤:

4.根据权利要求1所述的一种支持动态扩缩容的数据库分库方...

【专利技术属性】
技术研发人员:王斌左劼李昌盛迟立辉
申请(专利权)人:北京开科唯识技术股份有限公司
类型:发明
国别省市:

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

1