CN116028675A - 一种亿级树结构记录表的树分拆方法 - Google Patents
一种亿级树结构记录表的树分拆方法 Download PDFInfo
- Publication number
- CN116028675A CN116028675A CN202310008402.5A CN202310008402A CN116028675A CN 116028675 A CN116028675 A CN 116028675A CN 202310008402 A CN202310008402 A CN 202310008402A CN 116028675 A CN116028675 A CN 116028675A
- Authority
- CN
- China
- Prior art keywords
- tree
- current
- pid
- node
- query
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种亿级树结构记录表的树分拆方法,其特征在于包括以下步骤:S100:获取所述亿级树结构记录表的原表,用以描述树节点及其关系,所述原表包括各个树节点的ID及PID,其中,所述原表每条记录描述一个树节点信息;S200:生成关系表,所述关系表各个树节点的ID、PID及TID,所述TID为树ID,用以描述各个树节点各自分别对应的树;S300:处理明确的根节点,所述明确的根节点为所述原表中PID为NULL的记录;S400:采用布隆过滤器,处理子节点和未明确的根节点,所述未明确的根节点为所述原表中PID不为NULL的记录。本发明具有使用物理内存少、能够以外存代替内存并保障算法可持续运行以及能够处理海量数据的有益效果。
Description
技术领域
本发明属于数据存储及查询领域,涉及一种树分拆方法,尤其涉及一种亿级树结构记录表的树分拆方法。
背景技术
某些特殊场景下,数据业务产生多棵含有多个层级和大量子节点的树,具体表现为:以记录的形式描述一个树节点,必然存在一个“节点ID”字段和“父节点ID”字段,简称为ID和PID,其中根节点的PID为空值,若其他节点的PID与某节点的ID值相同时,表明这两个节点是父子关系。
通常树的分拆方法步骤如下:步骤一:将表中所有记录按PID、ID联合升序排序;步骤二:遍历所有节点记录,以记录的ID为哈希键,“记录号、ID、PID”结构化为哈希值存入内存哈希表中;若当前记录的PID为空值,则创建一个新的哈希表,并存入当前记录;否则以记录的PID值为哈希键并在所有已创建的哈希表中进行查找,若在某个哈希表中能找到,则把当前记录添加该哈希表中;若所有的哈希表中都找不到,则再创建一个新的哈希表,并存入当前记录到这个新的哈希表中;步骤三:所有节点数据存入哈希表后,再次遍历每个哈希表并输出,即完成分拆工作。此方法中每棵树使用一个哈希表,结构清晰、逻辑简单,易于实现,但适用范围存在局限性,如下所述:
1、哈希表以空间换时间,且分析完成前无法统计树的节点个数,哈希表大小不方便预估,要么存在巨大的内存浪费,要么会频繁重新分配哈希表的内存空间;
2、当数据量过大,哈希表分配内存超出***可用内存时,算法无法执执行;
3、步骤一、步骤二无法并行执行,耗时较长。
发明内容
针对现有技术的技术问题,本发明提供了一种亿级树结构记录表的树分拆方法:使用布隆过滤器加文件排序的方法,尽可能少量使内存,以满足大数据量处理瓶颈问题。为描述方便起见,对本发明申请涉及的专有名词做如下解释:
原表:用以描述树节点及其关系,原表包括各个树节点的ID及PID,其中,原表每条记录描述一个树节点信息。
布隆过滤器:布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。布隆过滤器可以理解为多个数值的集合,测试一个数值在集合中是否可能存在,若完全不存在时,返回True,有可能存在时,返回False;本技术中布隆过滤器中存储的是一棵树的所有节点ID的集合。
明确的根节点:原表记录中PID为空NULL的记录,即为明确的根节点。
未明确的根节点:原表记录中PID不为NULL的记录,且不存在PID对应的ID记录,则为不明确的根节点。
本发明包括以下步骤:
S100:获取所述亿级树结构记录表的原表,用以描述树节点及其关系,所述原表包括各个树节点的ID及PID,其中,所述原表每条记录描述一个树节点信息;
S200:生成关系表,所述关系表各个树节点的ID、PID及TID,所述TID为树ID,用以描述各个树节点各自分别对应的树,步骤S200包括以下步骤:
S201:创建关系表的表结构:采用ID为主键且PID、TID为索引键,创建关系表的表结构;
S202:将所述原表按PID、ID升序排序:以PID优先进行排序,相同PID的情况下,再按ID进行排序;
S203:将排序结果输出至所创建的关系表;
S300:处理明确的根节点,所述明确的根节点为所述原表中PID为NULL的记录;
S400:采用布隆过滤器,处理子节点和未明确的根节点,所述未明确的根节点为所述原表中PID不为NULL的记录。
优选地,步骤S300包括以下步骤:
S301:将树计数赋初值为1;
S302:判断是否完成遍历,如果是,执行步骤S400,否则,执行步骤S303;
S303:遍历所述关系表中PID为NULL的记录;
S304:将当前记录所对应的ID储存于根节点ID的临时文件;
S305:将当前记录所对应的ID中所对应的树ID更新为当前树计数;
S306:树计数=树计数+1,进行下一次遍历,执行步骤S302。
优选地,步骤S400包括以下步骤:
S401:执行第一查询:遍历所述临时文件,且树ID赋初值为0;
S402:判断第一查询的遍历是否完成,如果是,结束流程,否则,执行步骤S403;
S403:获取第一查询中当前ID并记为ROOTID,树ID=树ID+1;
S404:清除布隆过滤器,将当前ROOTID添加到布隆过滤器;
S405:执行第二查询:遍历所述关系表中树ID为NULL的记录,所述关系表中树ID为NULL的记录表示尚未进行处理的记录;
S406:判断第二查询的遍历是否完成,如果是,执行步骤S403,否则,执行步骤S407;
S407:采用第二查询中的PID去布隆过滤器中查找;
S408:判断布隆测试结果,如果为真,执行步骤S409,否则,表示当前节点必然不属于当前树,执行步骤S402;
S409:确定第二查询中当前记录对应的节点归属情况,并输出归属情况的返回值;
S410:判断归属情况的返回值是否为1,如果是,执行步骤S406,否则,执行步骤S405。
优选地,步骤S409包括以下步骤:
S4091:执行第三查询:递归查询所述第二查询中的PID的所有祖先节点的ID列表、根节点的PID以及根节点的树ID;
S4092:判断当前ID列表是否为空,如果是,执行步骤S4093,否则,执行步骤S4094;
S4093:输出返回值1,表示当前节点为未明确的根节点;
将当前第二查询中的ID储存于根节点ID的临时文件,树计数=树计数+1,对于当前第二查询中的ID,将当前关系表中的树ID更新为当前的树计数,执行步骤S410;
S4094:判断根节点的PID是否等于ROOTID,如果是,执行步骤S4095,否则,执行步骤S4096;
S4095:将当前ID列表添加至布隆过滤器,并更新当前关系表中与当前ID列表对应记录的树ID的值为当前树ID;
输出返回值2,表示当前节点属于当前树;
S4096:输出返回值3,表示当前节点不属于当前树。
本发明具有以下有益效果:
1、使用物理内存少;
2、能够以外存代替内存并保障算法可持续运行;
3、能够处理海量数据。
附图说明
图1是本发明所提供的亿级树结构记录表的树分拆方法的流程图。
具体实施方式
图1示出了本发明所提供的亿级树结构记录表的树分拆方法的流程图。
如图1所示,包括该方法以下步骤:
S100:获取亿级树结构记录表的原表,用以描述树节点及其关系,原表包括各个树节点的ID及PID,其中,原表每条记录描述一个树节点信息;
S200:生成关系表,关系表各个树节点的ID、PID及TID,TID为树ID,用以描述各个树节点各自分别对应的树,步骤S200包括以下步骤:
S201:创建关系表的表结构:采用ID为主键且PID、TID为索引键,创建关系表的表结构;
S202:将原表按PID、ID升序排序:以PID优先进行排序,相同PID的情况下,再按ID进行排序;
S203:将排序结果输出至所创建的关系表;
S300:处理明确的根节点,明确的根节点为原表中PID为NULL的记录。步骤S300包括以下步骤:
S301:将树计数赋初值为1;
S302:判断是否完成遍历,如果是,执行步骤S400,否则,执行步骤S303;
S303:遍历关系表中PID为NULL的记录;
S304:将当前记录所对应的ID储存于根节点ID的临时文件;
S305:将当前记录所对应的ID中所对应的树ID更新为当前树计数;
S306:树计数=树计数+1,进行下一次遍历,执行步骤S302。
S400:采用布隆过滤器,处理子节点和未明确的根节点,未明确的根节点为原表中PID不为NULL的记录。步骤S400包括以下步骤:
S401:执行第一查询:遍历临时文件,且树ID赋初值为0;
S402:判断第一查询的遍历是否完成,如果是,结束流程,否则,执行步骤S403;
S403:获取第一查询中当前ID并记为ROOTID,树ID=树ID+1;
S404:清除布隆过滤器,将当前ROOTID添加到布隆过滤器;
S405:执行第二查询:遍历关系表中树ID为NULL的记录,关系表中树ID为NULL的记录表示尚未进行处理的记录;
S406:判断第二查询的遍历是否完成,如果是,执行步骤S403,否则,执行步骤S407;
S407:采用第二查询中的PID去布隆过滤器中查找;
S408:判断布隆测试结果,如果为真,执行步骤S409,否则,表示当前节点必然不属于当前树,执行步骤S402;
S409:确定第二查询中当前记录对应的节点归属情况,并输出归属情况的返回值。步骤S409包括以下步骤:
S4091:执行第三查询:递归查询第二查询中的PID的所有祖先节点的ID列表、根节点的PID以及根节点的树ID;
S4092:判断当前ID列表是否为空,如果是,执行步骤S4093,否则,执行步骤S4094;
S4093:输出返回值1,表示当前节点为未明确的根节点;
将当前第二查询中的ID储存于根节点ID的临时文件,树计数=树计数+1,对于当前第二查询中的ID,将当前关系表中的树ID更新为当前的树计数,执行步骤S410;
S4094:判断根节点的PID是否等于ROOTID,如果是,执行步骤S4095,否则,执行步骤S4096;
S4095:将当前ID列表添加至布隆过滤器,并更新当前关系表中与当前ID列表对应记录的树ID的值为当前树ID;
输出返回值2,表示当前节点属于当前树;
S4096:输出返回值3,表示当前节点不属于当前树。
S410:判断归属情况的返回值是否为1,如果是,执行步骤S406,否则,执行步骤S405。
通过本发明所提供的上述方法,解决了现有技术中尚无一种亿级树结构记录表的树分拆方法的技术问题。
应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (4)
1.一种亿级树结构记录表的树分拆方法,其特征在于,包括以下步骤:
S100:获取所述亿级树结构记录表的原表,用以描述树节点及其关系,所述原表包括各个树节点的ID及PID,其中,所述原表每条记录描述一个树节点信息;
S200:生成关系表,所述关系表各个树节点的ID、PID及TID,所述TID为树ID,用以描述各个树节点各自分别对应的树,步骤S200包括以下步骤:
S201:创建关系表的表结构:采用ID为主键且PID、TID为索引键,创建关系表的表结构;
S202:将所述原表按PID、ID升序排序:以PID优先进行排序,相同PID的情况下,再按ID进行排序;
S203:将排序结果输出至所创建的关系表;
S300:处理明确的根节点,所述明确的根节点为所述原表中PID为NULL的记录;
S400:采用布隆过滤器,处理子节点和未明确的根节点,所述未明确的根节点为所述原表中PID不为NULL的记录。
2.根据权利要求1所述的一种亿级树结构记录表的树分拆方法,其特征在于,步骤S300包括以下步骤:
S301:将树计数赋初值为1;
S302:判断是否完成遍历,如果是,执行步骤S400,否则,执行步骤S303;
S303:遍历所述关系表中PID为NULL的记录;
S304:将当前记录所对应的ID储存于根节点ID的临时文件;
S305:将当前记录所对应的ID中所对应的树ID更新为当前树计数;
S306:树计数=树计数+1,进行下一次遍历,执行步骤S302。
3.根据权利要求1所述的一种亿级树结构记录表的树分拆方法,其特征在于,步骤S400包括以下步骤:
S401:执行第一查询:遍历所述临时文件,且树ID赋初值为0;
S402:判断第一查询的遍历是否完成,如果是,结束流程,否则,执行步骤S403;
S403:获取第一查询中当前ID并记为ROOTID,树ID=树ID+1;
S404:清除布隆过滤器,将当前ROOTID添加到布隆过滤器;
S405:执行第二查询:遍历所述关系表中树ID为NULL的记录,所述关系表中树ID为NULL的记录表示尚未进行处理的记录;
S406:判断第二查询的遍历是否完成,如果是,执行步骤S403,否则,执行步骤S407;
S407:采用第二查询中的PID去布隆过滤器中查找;
S408:判断布隆测试结果,如果为真,执行步骤S409,否则,表示当前节点必然不属于当前树,执行步骤S402;
S409:确定第二查询中当前记录对应的节点归属情况,并输出归属情况的返回值;
S410:判断归属情况的返回值是否为1,如果是,执行步骤S406,否则,执行步骤S405。
4.根据权利要求3所述的一种亿级树结构记录表的树分拆方法,其特征在于,步骤S409包括以下步骤:
S4091:执行第三查询:递归查询所述第二查询中的PID的所有祖先节点的ID列表、根节点的PID以及根节点的树ID;
S4092:判断当前ID列表是否为空,如果是,执行步骤S4093,否则,执行步骤S4094;
S4093:输出返回值1,表示当前节点为未明确的根节点;
将当前第二查询中的ID储存于根节点ID的临时文件,树计数=树计数+1,对于当前第二查询中的ID,将当前关系表中的树ID更新为当前的树计数,执行步骤S410;
S4094:判断根节点的PID是否等于ROOTID,如果是,执行步骤S4095,否则,执行步骤S4096;
S4095:将当前ID列表添加至布隆过滤器,并更新当前关系表中与当前ID列表对应记录的树ID的值为当前树ID;
输出返回值2,表示当前节点属于当前树;
S4096:输出返回值3,表示当前节点不属于当前树。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310008402.5A CN116028675A (zh) | 2023-01-04 | 2023-01-04 | 一种亿级树结构记录表的树分拆方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310008402.5A CN116028675A (zh) | 2023-01-04 | 2023-01-04 | 一种亿级树结构记录表的树分拆方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116028675A true CN116028675A (zh) | 2023-04-28 |
Family
ID=86091177
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310008402.5A Pending CN116028675A (zh) | 2023-01-04 | 2023-01-04 | 一种亿级树结构记录表的树分拆方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116028675A (zh) |
-
2023
- 2023-01-04 CN CN202310008402.5A patent/CN116028675A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI719281B (zh) | 用於串流選擇之系統、機器可讀媒體、及機器實施之方法 | |
TWI702506B (zh) | 用於合併樹廢棄項目指標之系統、機器可讀媒體及機器實施之方法 | |
CN108369587B (zh) | 创建用于交换的表 | |
CN105320775A (zh) | 数据的存取方法和装置 | |
EP2924594A1 (en) | Data encoding and corresponding data structure in a column-store database | |
US10452676B2 (en) | Managing database with counting bloom filters | |
CN112765405B (zh) | 空间数据搜索结果的聚类和查询的方法及*** | |
CN102129458A (zh) | 关系型数据库的存储方法及装置 | |
KR102005343B1 (ko) | 분할 공간 기반의 공간 데이터 객체 질의처리장치 및 방법, 이를 기록한 기록매체 | |
TWI549009B (zh) | 資料庫管理方法、資料庫管理系統,以及資料庫樹狀結構 | |
CN111666468A (zh) | 一种基于团簇属性在社交网络中搜索个性化影响力社区的方法 | |
CN109189343B (zh) | 一种元数据落盘方法、装置、设备及计算机可读存储介质 | |
US10013442B2 (en) | Database value identifier hash map | |
KR102354343B1 (ko) | 블록체인 기반의 지리공간 데이터를 위한 공간 데이터 인덱싱 방법 및 장치 | |
CN109254962B (zh) | 一种基于t-树的索引优化方法、装置及存储介质 | |
WO2024078122A1 (zh) | 数据库表扫描的方法、装置以及设备 | |
Kvet et al. | Master index access as a data tuple and block locator | |
Zhang | B trees | |
CN110990423B (zh) | Sql语句的执行方法、装置、设备和存储介质 | |
CN109299106B (zh) | 数据查询方法和装置 | |
KR100859710B1 (ko) | 데이터에 대한 검색을 수행하기 위한 자료구조를 이용하여 데이터를 검색, 저장, 삭제하는 방법 | |
US20220215021A1 (en) | Data Query Method and Apparatus, Computing Device, and Storage Medium | |
CN116028675A (zh) | 一种亿级树结构记录表的树分拆方法 | |
CN115495462A (zh) | 批量数据更新方法、装置、电子设备和可读存储介质 | |
CN115374121A (zh) | 数据库索引的生成方法、机器可读存储介质与计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |