基于策略注册表的SQLite多表解析方法及装置与流程

摘要: 本发明涉及数据处理,具体涉及基于策略注册表的sqlite多表解析方法及装置。背景技术:1、在即时通讯应用的数据中台场景中,移动端的本地sqlite数据库通常包含...
基于策略注册表的SQLite多表解析方法及装置与流程

本发明涉及数据处理,具体涉及基于策略注册表的sqlite多表解析方法及装置。

背景技术:

1、在即时通讯应用的数据中台场景中,移动端的本地sqlite数据库通常包含消息表、好友表、头像表、朋友圈表、红包表、群聊表、申请消息表、群发消息表等多张异构数据表。后端服务需要从对象存储服务(oss)下载该sqlite库,并对其内部的多个表逐一解析、转换并落库到mongodb、mysql、elasticsearch、olap等异构存储,以支撑后续的统计、检索和关联查询。

2、现有技术中,针对sqlite多表解析和大文件处理,主要存在以下三方面缺陷:

3、其一,多表解析的扩展性差:现有方案中,部分技术虽采用了映射表与模板化函数的组合,但其映射键为协议消息id而非表名,解析逻辑集中于核心模块,新增表结构需修改核心代码;另一部分技术按内容类型(文本/表格/图片)注册策略,无法直接迁移至按表名注册的关系型数据库场景。当数据库含多张异构表且字段结构随版本持续演变时,现有方案扩展成本高、易引入回归缺陷。

4、其二,大文件解析的抗oom与抗超时能力不足:现有大文件解析方案或依赖多节点分布式架构(单机不可用),或依赖gpu硬件加速(通用性差)。当单张表数据量达五千万至亿级、占用gb级存储时,全量加载必然导致内存溢出(oom)。同时,现有方案在初次解析因大文件中断后,无法在二次解析中保留并累加初次耗时,导致运维观测失真。

5、其三,游标分页与解析批处理解耦,且缺乏编排能力:现有游标分页方案主要用于查询场景,未与多表解析批处理结合,且普遍缺乏表顺序优先级编排、错误表隔离、对象存储原文件删除时机一致性等工程可用性约束。

6、因此,亟需一种能够解决上述问题的sqlite多表解析与大文件分级异步处理方法。

技术实现思路

1、有鉴于此,本发明的目的在于提供基于策略注册表的sqlite多表解析方法及装置,旨在解决现有技术中,多表解析扩展性差、大文件解析抗oom能力不足、游标分页与解析批处理解耦以及缺乏编排能力的问题。

2、根据本发明实施例的第一方面,提供基于策略注册表的sqlite多表解析方法,所述方法包括:

3、从对象存储服务下载sqlite文件至本地工作目录;

4、从所述sqlite文件中解析出待处理的表名集合,并按照预设的优先级函数对所述表名集合中的各表进行排序,所述优先级函数用于指示各表在解析顺序上的优先级;

5、遍历排序后的表名集合中的各表,针对当前遍历到的目标表,通过策略注册表获取所述目标表的解析策略对象;

6、根据所述目标表的解析策略对象执行初始解析,包括:根据所述目标表的解析策略对象判断目标表是否为大文件表,若是,且当前状态未处于大文件处理模式,则将所述目标表加入大文件表集合并跳过本次解析,若否,则根据所述目标表的解析策略对象判断目标表是否支持分批;若支持,则对所述目标表执行游标分批加载解析;若不支持,则对所述目标表执行全量加载解析;

7、初始解析完成后,执行大文件二次解析,包括:当所述大文件表集合非空时,将当前状态调整为大文件处理模式;将所述大文件表集合以及初始解析耗时发送至大文件消息队列;根据所述大文件消息队列,将当前待解析的大文件作为目标表,对所述目标表执行游标分批加载解析;

8、当所述大文件表集合为空且错误表集合为空时,判断所述sqlite文件的源文件删除条件是否满足,满足删除条件时,删除所述sqlite文件的源文件;其中,所述错误表集合用于存储初始解析以及大文件二次解析异常的表名,所述删除条件为:无未处理的大文件表、无错误表以及配置开启删除三者同时成立。

9、优选地,还包括:

10、初始解析完成后,获取所述初始解析的初始解析耗时;

11、大文件二次解析完成后,获取所述大文件二次解析的二次解析耗时;

12、将所述初始解析耗时与二次解析耗时进行累加得到整体总耗时。

13、优选地,

14、所述通过策略注册表获取所述目标表的解析策略对象包括:

15、从策略注册表中以所述目标表的表名为键查找对应的解析策略对象,所述策略注册表以表名为键、以解析策略对象为值,所述解析策略对象实现有统一的生命周期钩子接口,所述生命周期钩子接口至少包括:跳过判定方法、大文件判定方法、分批支持判定方法、全量加载方法、游标分批加载方法、保存前转换方法、保存方法以及保存后置处理方法。

16、优选地,

17、所述对所述目标表执行游标分批加载解析,包括:

18、采用rowid游标分批执行路径,以预设的分页大小循环执行以下步骤:

19、按照当前游标分批加载数据,对当前加载的分批数据依次执行所述保存前转换方法、保存方法以及保存后置处理方法;

20、更新游标为本批最后一条记录的rowid,直到分批加载结果为空或游标未推进时终止;完成游标分批加载解析;

21、所述对所述目标表执行全量加载解析,包括:

22、一次性加载所述目标表的全部数据后依次执行所述保存前转换方法、保存方法以及保存后置处理方法。

23、优选地,

24、所述优先级函数为:当表属于好友信息表时,优先级值为1,否则为0,按照优先级值降序排列各表,以使得所述好友信息表优先于其余各表解析。

25、优选地,还包括:

26、在遍历排序后的表名集合中的各表时,根据所述解析策略对象中定义的跳过判定方法判断是否跳过当前表,若跳过,则将所述当前表加入跳过表集合,跳过本次解析。

27、优选地,

28、当任一目标表在初始解析过程中或二次解析过程中发生异常时,将该目标表的表名追加至所述错误表集合,并继续处理排序后的表名集合或大文件消息队列中的后续表;

29、在初始解析或大文件二次解析结束后,将所述错误表集合中的表名汇总写入解析日志。

30、优选地,

31、所述解析策略对象还实现有策略属性袋,所述策略属性袋用于在执行所述解析策略对象的过程中写入自定义键值属性,以供耗时累加和日志统计使用;

32、所述方法还包括:当所述目标表的初始解析或大文件二次解析包含好友信息表时,触发好友关联任务和/或统计任务的后置处理,其中,所述后置处理的异常不阻断初始解析或大文件二次解析流程。

33、优选地,

34、所述删除条件中,所述配置开启删除为默认关闭的可配置项。

35、根据本发明实施例的第二方面,提供基于策略注册表的sqlite多表解析装置,所述装置包括:

36、初始化模块:用于从对象存储服务下载sqlite文件至本地工作目录;

37、表名解析模块:用于从所述sqlite文件中解析出待处理的表名集合,并按照预设的优先级函数对所述表名集合中的各表进行排序,所述优先级函数用于指示各表在解析顺序上的优先级;

38、解析策略对象获取模块:用于遍历排序后的表名集合中的各表,针对当前遍历到的目标表,通过策略注册表获取所述目标表的解析策略对象;

39、初始解析模块:用于根据所述目标表的解析策略对象执行初始解析,包括:根据所述目标表的解析策略对象判断目标表是否为大文件表,若是,且当前状态未处于大文件处理模式,则将所述目标表加入大文件表集合并跳过本次解析,若否,则根据所述目标表的解析策略对象判断目标表是否支持分批;若支持,则对所述目标表执行游标分批加载解析;若不支持,则对所述目标表执行全量加载解析;

40、二次解析模块:用于初始解析完成后,执行大文件二次解析,包括:当所述大文件表集合非空时,将当前状态调整为大文件处理模式;将所述大文件表集合以及初始解析耗时发送至大文件消息队列;根据所述大文件消息队列,将当前待解析的大文件作为目标表,对所述目标表执行游标分批加载解析;

41、源文件删除模块:用于当所述大文件表集合为空且错误表集合为空时,判断所述sqlite文件的源文件删除条件是否满足,满足删除条件时,删除所述sqlite文件的源文件;其中,所述错误表集合用于存储初始解析以及大文件二次解析异常的表名,所述删除条件为:无未处理的大文件表、无错误表以及配置开启删除三者同时成立。

42、本发明的实施例提供的技术方案可以包括以下有益效果:

43、本技术通过按表名获取解析策略对象并执行统一生命周期钩子,将各表的解析逻辑从核心调度中剥离,使得新增表结构仅需新增策略对象并注册,从而大幅提升了多表解析的可扩展性;通过生命周期钩子中的大文件判定,将大文件表从初次解析中分离并转入大文件消息队列异步处理,避免了对gb级大表全量加载导致的内存溢出与超时;通过分批支持判定结果为支持分批的表采用rowid游标分批加载,将游标分页与解析批处理深度耦合,规避了基于偏移量的分页在深翻页时的性能塌陷;通过优先级函数对表集合排序,保证了存在依赖关系的表(如好友信息表)优先解析,使后置任务能够获取到依赖数据;通过错误表集合隔离单表解析异常,使单表故障不阻塞整体解析流程;通过无未处理大文件表、无错误表、配置开启删除三者同时成立的删除条件判定,确保了源文件不会被误删,为失败重试保留了数据源。

44、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。