[发明专利]一种基于多队列的数据库预写日志方法和装置在审
申请号: | 202310436258.5 | 申请日: | 2023-04-21 |
公开(公告)号: | CN116561143A | 公开(公告)日: | 2023-08-08 |
发明(设计)人: | 王建民;黄向东;乔嘉林;曹高飞;田原;朱海铭 | 申请(专利权)人: | 清华大学;天谋科技(北京)有限公司 |
主分类号: | G06F16/23 | 分类号: | G06F16/23;G06F16/22;G06F11/14;G06F12/02 |
代理公司: | 北京路浩知识产权代理有限公司 11002 | 代理人: | 李柱雄 |
地址: | 100084 北京市海淀区双清路*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 队列 数据库 日志 方法 装置 | ||
1.一种基于多队列的数据库预写日志方法,用于基于LSM树存储引擎的数据库的预写日志端,其特征在于,所述预写日志端包含多个预写日志队列,每一个预写日志队列只有一个正在写入的预写日志文件,所述方法包括:
获取写入请求中的数据项及其对应的内存表;
确定为所述内存表分配的预写日志队列;
采用二元组表示所述数据项和所述内存表的编号;
控制所述预写日志队列将所述二元组写入自身的预写日志文件中。
2.根据权利要求1所述的基于多队列的数据库预写日志方法,其特征在于,在内存中不存在所述内存表的情况下,所述确定为所述内存表分配的预写日志队列,包括:
告知所述数据库的写入端创建所述内存表;
在所述内存表创建完成后,利用预设动态分配算法为所述内存表分配预写日志队列。
3.根据权利要求1所述的基于多队列的数据库预写日志方法,其特征在于,所述预写日志队列包括:阻塞队列、序列化缓冲区、落盘缓冲区和多个日志数据文件,所述多个日志数据文件中正在写入的日志数据文件为所述预写日志文件;所述控制所述预写日志队列将所述二元组写入自身的预写日志文件中,包括:
将所述二元组送入所述阻塞队列中排队;
通过序列化线程,将所述二元组缓冲到所述序列化缓冲区中;
在满足第一条件的情况下,互换所述序列化缓冲区和所述落盘缓冲区的名称;
对所述落盘缓冲区进行落盘,以使所述二元组写入所述预写日志文件中。
4.根据权利要求3所述的基于多队列的数据库预写日志方法,其特征在于,所述第一条件为:所述落盘缓冲区已落盘完成且所述序列化缓冲区达到落盘条件;
所述落盘条件为:所述序列化缓冲区中包含的二元组的数目大于第一阈值;或者所述序列化缓冲区中包含的二元组的数目在设定时间无变化。
5.根据权利要求3所述的基于多队列的数据库预写日志方法,其特征在于,所述预写日志队列中的多个日志数据文件进行了顺序编号;
在所述预写日志文件大小超过第二阈值时,将编号位于所述预写日志文件之后的日志数据文件变更为预写日志文件。
6.根据权利要求5所述的基于多队列的数据库预写日志方法,其特征在于,所述预写日志队列还包括日志控制文件;
所述内存表被分配给所述预写日志队列的同时,还包括:将所述内存表的创建标识保存到所述日志控制文件中;
所述落盘缓冲区落盘之后还包括:告知所述数据库的写入端,以使所述写入端将所述数据项写入所述内存表,并在所述内存表包含的数据项数目超过第一阈值时使所述内存表落盘;
所述内存表落盘之后还包括:
将所述内存表的落盘标识和相关信息保存到所述日志控制文件中;
其中,所述相关信息包括但不限于:编号、落盘形成的文件对应的文件路径以及初始数据项所在日志数据文件的编号。
7.根据权利要求6所述的基于多队列的数据库预写日志方法,其特征在于,在移动终端异常掉电后,分配到所述预写日志队列的内存表的数据恢复过程,包括:
基于所述日志控制文件内存表的创建标识和落盘标识,确定待恢复内存表;
读取所述多个日志数据文件,依据每一个待恢复内存表的编号过滤每一个待恢复内存表需要回放的数据项;
通过所述写入端,对每一个待恢复内存表进行数据项回放。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于清华大学;天谋科技(北京)有限公司,未经清华大学;天谋科技(北京)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202310436258.5/1.html,转载请声明来源钻瓜专利网。