System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于Peleton数据库的行级垃圾回收机制制造技术_技高网

一种基于Peleton数据库的行级垃圾回收机制制造技术

技术编号:39929028 阅读:8 留言:0更新日期:2024-01-08 21:40
本发明专利技术公开了一种基于Peleton数据库的行级垃圾回收机制。本发明专利技术,根据不同的负载场景,选择不同的垃圾回收方法,避免对每个数据行进行可见性检查和无目的的遍历开销,提高垃圾回收的效率。本发明专利技术还优化了Peleton自身存在的一些问题,例如回滚事务产生的垃圾版本回收不及时、未回收提交事务的删除操作产生的空版本。本发明专利技术可以有效地回收无效或过期的历史数据版本,减少系统的内存资源占用,并且提高数据行和索引的访问效率。本发明专利技术可以应用于需要高性能和高并发的云服务系统,例如电商平台、社交网络、游戏。

【技术实现步骤摘要】

本专利技术涉及数据库管理,具体为一种基于peleton数据库的行级垃圾回收机制。


技术介绍

1、peleton是一个基于多版本并发控制技术的内存数据库管理系统,它可以支持高并发和低延迟的事务处理。peleton使用了一种基于epoch的时间戳分配机制,为每个事务分配一个唯一的epoch id,用于判断事务之间的可见性和冲突。peleton还使用了一种基于版本链的数据结构,为每个数据行维护一个版本链,用于存储历史数据版本。当一个事务对一个数据行进行更新操作时,它会在版本链头部插入一个新版本,并且将老版本标记为无效。这样可以避免对数据行进行原地更新,提高并发度和性能。

2、然而,peleton没有实现任何垃圾回收机制,导致历史数据版本积累,占用大量的内存资源,并且降低数据行和索引的访问效率。同时,peleton还存在一些问题,例如回滚事务产生的垃圾版本回收不及时、未回收提交事务的删除操作产生的空版本。这些问题进一步增加了系统的存储开销,并且降低了数据行的可重用性。

3、为此我们提出一种基于peleton数据库的行级垃圾回收机制。


技术实现思路

1、本专利技术的目的在于提供一种基于peleton数据库的行级垃圾回收机制,具备自适应、高效、节省资源、提高性能优点,解决了历史数据版本积累、存储开销过大、访问效率低下问题。

2、为实现上述目的,本专利技术提供如下技术方案:一种基于peleton数据库的行级垃圾回收机制,包括一个并发哈希表、一个阈值、一个后台线程和一个垃圾回收周期,所述并发哈希表用于记录每个垃圾版本的信息,包括所在的数据块id、数据行id、过期时间和版本类型;所述阈值用于判断是否需要继续维护垃圾版本信息,如果某个数据块中超过半数的数据行都是垃圾版本,则释放该数据块对应的垃圾版本队列,并将该数据块标记为不再维护;所述后台线程定期启动,遍历所述并发哈希表中的每个数据块,根据所述垃圾版本的信息和全局已过期的最大epoch id来判断是否为过期版本,如果是则进行垃圾回收;如果某个数据块被标记为不再维护,则直接遍历该数据块中的每个数据行,根据版本元数据中的epoch id来判断是否为过期版本,如果是则进行垃圾回收;所述垃圾回收周期用于控制所述后台线程的启动频率。

3、优选的,所述垃圾回收包括和索引断开链接、回收存储空间两个步骤,在一个垃圾回收周期内完成。

4、优选的,所述索引断开链接的步骤包括:根据所述垃圾版本的信息或版本元数据获取完整的数据行;遍历该数据行所在表中的每个索引,根据索引对应的字段从该数据行中抽取出键值,并与指向该数据行的指针构成键值对;从索引中删除该键值对。

5、优选的,所述回收存储空间的步骤包括:根据所述垃圾版本的信息或版本元数据获取完整的数据行;遍历该数据行中的每个字段,如果字段类型为变长类型,则获取字段存放的指针,并释放指针指向的内存;重置该数据行的版本元数据,使其成为空版本;将该数据行添加到可重用版本槽队列中。

6、优选的,所述事务结束时,根据事务状态和操作类型直接处理无效版本,并且及时释放事务对象所占用的空间。

7、优选的,所述事务状态为提交时,如果操作类型为更新或删除,则将产生的老版本添加到所述并发哈希表中;如果操作类型为插入且插入后又删除,则直接处理产生的新版本;当事务状态为回滚时,如果操作类型为更新或删除,则直接处理产生的新版本;如果操作类型为插入,则直接处理产生的新数据行。

8、优选的,所述处理删除操作产生的老版本时,还需要处理该老版本的下一个版本,如果该下一个版本为无效版本,则将其视为删除操作产生的空版本,并进行垃圾回收。

9、优选的,所述并发哈希表为intel tbb提供的concurrent_hash_map容器,所述垃圾版本队列为moodycamel::concurrentqueue容器,所述可重用版本槽队列为moodycamel::concurrentqueue容器。

10、优选的,所述epoch id为版本元数据中的end_ts字段右移32位得到的值,所述全局已过期的最大epoch id为所有工作线程中最小的epoch id减去一个常数。

11、优选的,所述数据块为tile group,每个tile group包含固定数量的数据行和元数据,每个数据行包含多个字段和版本元数据,每个字段包含类型、长度和值,每个版本元数据包含事务id、开始时间、结束时间、指向该数据行的指针和指向下一个版本的指针。

12、与现有技术相比,本专利技术的有益效果如下:

13、1、本专利技术通过设置一个阈值来判断是否需要继续维护垃圾版本信息,并由后台线程直接遍历被标记为不再维护的数据块中的每个数据行来回收过期版本,达到了避免对每个数据行进行可见性检查和无目的的遍历开销,提高垃圾回收的效率的效果;

14、2、本专利技术通过使用一个并发哈希表来记录每个垃圾版本的信息,并由后台线程定期遍历该哈希表来回收过期版本,达到了减少系统的内存资源占用,并且提高数据行和索引的访问效率的效果;

15、3、本专利技术通过使用一个动态调整的算法来根据系统的实时性能指标来调整垃圾回收策略和参数,达到了根据不同的负载场景选择不同的垃圾回收方法,提高系统的性能和资源利用率的效果。

本文档来自技高网...

【技术保护点】

1.一种基于Peleton数据库的行级垃圾回收机制,其特征在于:包括一个并发哈希表、一个阈值、一个后台线程和一个垃圾回收周期,所述并发哈希表用于记录每个垃圾版本的信息,包括所在的数据块ID、数据行ID、过期时间和版本类型;所述阈值用于判断是否需要继续维护垃圾版本信息,如果某个数据块中超过半数的数据行都是垃圾版本,则释放该数据块对应的垃圾版本队列,并将该数据块标记为不再维护;所述后台线程定期启动,遍历所述并发哈希表中的每个数据块,根据所述垃圾版本的信息和全局已过期的最大epoch ID来判断是否为过期版本,如果是则进行垃圾回收;如果某个数据块被标记为不再维护,则直接遍历该数据块中的每个数据行,根据版本元数据中的epoch ID来判断是否为过期版本,如果是则进行垃圾回收;所述垃圾回收周期用于控制所述后台线程的启动频率。

2.根据权利要求1所述的一种基于Peleton数据库的行级垃圾回收机制,其特征在于:所述垃圾回收包括和索引断开链接、回收存储空间两个步骤,在一个垃圾回收周期内完成。

3.根据权利要求1或2所述的一种基于Peleton数据库的行级垃圾回收机制,其特征在于:所述索引断开链接的步骤包括:根据所述垃圾版本的信息或版本元数据获取完整的数据行;遍历该数据行所在表中的每个索引,根据索引对应的字段从该数据行中抽取出键值,并与指向该数据行的指针构成键值对;从索引中删除该键值对。

4.根据权利要求1或2所述的一种基于Peleton数据库的行级垃圾回收机制,其特征在于:所述回收存储空间的步骤包括:根据所述垃圾版本的信息或版本元数据获取完整的数据行;遍历该数据行中的每个字段,如果字段类型为变长类型,则获取字段存放的指针,并释放指针指向的内存;重置该数据行的版本元数据,使其成为空版本;将该数据行添加到可重用版本槽队列中。

5.根据权利要求1或2所述的一种基于Peleton数据库的行级垃圾回收机制,其特征在于:所述事务结束时,根据事务状态和操作类型直接处理无效版本,并且及时释放事务对象所占用的空间。

6.根据权利要求1所述的一种基于Peleton数据库的行级垃圾回收机制,其特征在于:所述事务状态为提交时,如果操作类型为更新或删除,则将产生的老版本添加到所述并发哈希表中;如果操作类型为插入且插入后又删除,则直接处理产生的新版本;当事务状态为回滚时,如果操作类型为更新或删除,则直接处理产生的新版本;如果操作类型为插入,则直接处理产生的新数据行。

7.根据权利要求1或2所述的一种基于Peleton数据库的行级垃圾回收机制,其特征在于:所述处理删除操作产生的老版本时,还需要处理该老版本的下一个版本,如果该下一个版本为无效版本,则将其视为删除操作产生的空版本,并进行垃圾回收。

8.根据权利要求1或2所述的一种基于Peleton数据库的行级垃圾回收机制,其特征在于:所述并发哈希表为Intel TBB提供的concurrent_hash_map容器,所述垃圾版本队列为moodycamel::ConcurrentQueue容器,所述可重用版本槽队列为moodycamel::ConcurrentQueue容器。

9.根据权利要求1或2所述的一种基于Peleton数据库的行级垃圾回收机制,其特征在于:所述epoch ID为版本元数据中的end_ts字段右移32位得到的值,所述全局已过期的最大epoch ID为所有工作线程中最小的epoch ID减去一个常数。

10.根据权利要求1或2所述的一种基于Peleton数据库的行级垃圾回收机制,其特征在于:所述数据块为tile group,每个tile group包含固定数量的数据行和元数据,每个数据行包含多个字段和版本元数据,每个字段包含类型、长度和值,每个版本元数据包含事务ID、开始时间、结束时间、指向该数据行的指针和指向下一个版本的指针。

...

【技术特征摘要】

1.一种基于peleton数据库的行级垃圾回收机制,其特征在于:包括一个并发哈希表、一个阈值、一个后台线程和一个垃圾回收周期,所述并发哈希表用于记录每个垃圾版本的信息,包括所在的数据块id、数据行id、过期时间和版本类型;所述阈值用于判断是否需要继续维护垃圾版本信息,如果某个数据块中超过半数的数据行都是垃圾版本,则释放该数据块对应的垃圾版本队列,并将该数据块标记为不再维护;所述后台线程定期启动,遍历所述并发哈希表中的每个数据块,根据所述垃圾版本的信息和全局已过期的最大epoch id来判断是否为过期版本,如果是则进行垃圾回收;如果某个数据块被标记为不再维护,则直接遍历该数据块中的每个数据行,根据版本元数据中的epoch id来判断是否为过期版本,如果是则进行垃圾回收;所述垃圾回收周期用于控制所述后台线程的启动频率。

2.根据权利要求1所述的一种基于peleton数据库的行级垃圾回收机制,其特征在于:所述垃圾回收包括和索引断开链接、回收存储空间两个步骤,在一个垃圾回收周期内完成。

3.根据权利要求1或2所述的一种基于peleton数据库的行级垃圾回收机制,其特征在于:所述索引断开链接的步骤包括:根据所述垃圾版本的信息或版本元数据获取完整的数据行;遍历该数据行所在表中的每个索引,根据索引对应的字段从该数据行中抽取出键值,并与指向该数据行的指针构成键值对;从索引中删除该键值对。

4.根据权利要求1或2所述的一种基于peleton数据库的行级垃圾回收机制,其特征在于:所述回收存储空间的步骤包括:根据所述垃圾版本的信息或版本元数据获取完整的数据行;遍历该数据行中的每个字段,如果字段类型为变长类型,则获取字段存放的指针,并释放指针指向的内存;重置该数据行的版本元数据,使其成为空版本;将该数据行添加到可重用版本槽队列中。

5.根据权利要求1或2所述的一种基于peleton数据库的行级垃圾回收机制,...

【专利技术属性】
技术研发人员:张诗晨宫学庆
申请(专利权)人:华东师范大学
类型:发明
国别省市:

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

1