掌桥专利:专业的专利平台
掌桥专利
首页

树形结构数据的处理方法、装置、设备及可读存储介质

文献发布时间:2023-06-19 11:08:20


树形结构数据的处理方法、装置、设备及可读存储介质

技术领域

本公开涉及数据处理技术领域,更具体地,涉及一种树形结构数据的处理方法、一种树形结构数据的处理装置、一种电子设备及一种可读存储介质。

背景技术

树形结构是一层次的嵌套结构。一个树形结构的外层和内层有相似的结构,所以这种结构多可以递归的表示。

树形结构数据,可以是通过数据表的形式进行存储。在现有技术中,表示树形结构数据的数据表可以是如下所示的表1和表2。

表1

表2

这种存储方式实际上就是使用附加的表2去表示关联关系。表2中的fid是当前父节点的id,sid则是子节点的id,具体的,每个节点都会关联上它所有的子节点。

这种存储方式需要一个附加表来存储节点之间的关联关系,此设计在对深层次进行编码时还使用了大量行,因此大大增加了存储空间的消耗。

发明内容

本公开的一个目的是提供一种树形结构数据的处理的新技术方案。

根据本公开的第一方面,提供了一种树形结构数据的处理方法,包括:

获取待处理的树形结构数据;

确定所述树形结构数据中每一节点的节点标识;其中,所述节点标识反映对应节点的继承关系;

根据所述节点标识生成反映所述树形结构数据的数据表;

存储所述数据表。

根据本公开的第二方面,提供了一种树形结构数据的处理装置,包括:

数据获取模块,用于获取待处理的树形结构数据;

标识确定模块,用于确定所述树形结构数据中每一节点的节点标识;其中,所述节点标识反映对应节点的继承关系;

数据表生成模块,用于根据所述节点标识生成反映所述树形结构数据的数据表;

数据表存储模块,用于存储所述数据表。

根据本公开的第三方面,提供了一种电子设备,包括:

如本公开第二方面所述的装置;或者,

处理器和存储器,所述存储器用于存储指令,所述指令用于控制所述处理器执行根据本公开第一方面所述的方法。

根据本公开的第四方面,提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序在被处理器执行时实现如本公开第一方面所述的方法。

通过本公开的实施例,确定树形结构数据中反映每一节点的继承关系的节点标识,并根据节点标识生成反映树形结构数据的数据表,可以降低反映树形结构数据的数据表所占用的存储空间。在此基础上,可以降低因为建立索引导致的存储空间的消耗,并且使得检索数据更加高效。而且,还可以使得后续在树形结构数据中新增节点或者是删除节点的操作可以更加方便。

通过以下参照附图对本公开的示例性实施例的详细描述,本公开的其它特征及其优点将会变得清楚。

附图说明

被结合在说明书中并构成说明书的一部分的附图示出了本公开的实施例,并且连同其说明一起用于解释本公开的原理。

图1示出了本公开的实施例的树形结构数据的处理方法的流程图。

图2示出了本公开的实施例的查询子树数据的步骤的流程图。

图3示出了本公开的实施例的在树形结构数据中增加节点步骤的流程图。

图4示出了本公开实施例的在树形结构数据中删除节点步骤的流程图。

图5示出了本公开的实施例的树形结构数据的处理装置的框图。

图6示出了本公开的实施例的电子设备的框图。

具体实施方式

现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

在这里示出和讨论的所有例子中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它例子可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

<方法实施例一>

在本实施例中,提供一种树形结构数据的处理方法。该方法由电子设备实施。该电子设备可以是具有处理器和存储器的电子产品。例如可以是台式计算机、笔记本电脑、手机、平板电脑、计算机集群等。

根据图1所示,本实施例的树形结构数据的处理方法可以包括如下步骤S1100~S1400。

步骤S1100,获取待处理的树形结构数据。

树形结构数据,可以是由树形结构表示数据间关联关系的数据,例如可以是企业上下级部门、栏目结构、商品分类等等。

本实施例中的树形结构数据,可以是预先存储在执行本实施例方法的电子设备中,以在执行步骤S1100的情况下直接从存储器中获取;该树形结构数据还可以是存储在其他电子设备中,该其他电子设备与执行本实施例的电子设备可以是通过数据线或者是网络进行通信连接,以在执行步骤S1100的情况下,由执行本实施例方法的电子设备从其他电子设备中获取该树形结构数据。其中,其他电子设备可以是台式计算机、笔记本电脑、手机、平板电脑、计算机集群、服务器等,在此不做限定。

步骤S1200,确定树形结构数据中每一节点的节点标识,其中,节点标识反映对应节点的继承关系。

树形结构数据中的每个节点,可以是树形结构数据中的一条数据。

在本实施例中,树形结构数据中的节点和节点标识是一一对应的,即每个节点可以具有唯一对应的节点标识,根据节点标识可以唯一确定树形结构数据中的节点。

每一节点的节点标识可以表示对应节点之外,还可以表示对应节点的所有祖先节点。其中,祖先节点可以是树形结构数据中从根节点到该结点所经分支上的所有结点。

在本公开的一个实施例中,确定树形结构数据中每一节点的节点标识可以包括如下所示的步骤S1210~S1240:

步骤S1210,确定树形结构数据中每一节点的层次、以及第n个层次的每一节点的祖先节点。

其中,n为大于1且小于等于N的正整数,N为树形结构数据的深度。

本实施例中,从根结点到树形结构数据中任一结点所经路径上的分支数称为该结点的层次。树形结构数据的深度为该树形结构数据中节点的最大层次数。

具体的,根结点的层次规定为1,其余结点的层次等于其双亲结点的层次加1。

节点继承关系可以是反映每一节点的所有祖先节点的关系。对于树形结构数据中的根节点,即第1个层次的节点,可以是没有祖先节点。对于第n个层次的节点,可以具有n-1个祖先节点。

步骤S1220,确定每一节点在对应层次中的编码。

其中,对应于相同祖先节点的任意两个节点的编码不同。对应于不同祖先节点的任意两个节点的编码可以相同,也可以不同,在此不做限定。

本实施例中的编码可以是设定位数的二进制编码。例如,该设定位数可以但不限于是4bit。

在本公开的一个实施例中,可以是对于每一层次,顺序对该层次的节点进行编码。那么,在其中一个层次的节点的数量为5个情况下,该层次中每个节点的编码可以表示为0001、0010、0011、0100和0101。在另一个层次的节点数量为6的情况下,该层次中每个节点的编码可以表示为0001、0010、0011、0100、0101和0110。

在本公开的一个实施例中,还可以是预先设置好多个不同的编码,对于每一层次,随机对该层次中的节点分配对应的编码。例如,在节点数量最多的层次中,节点数量为10,那么,可以预先设置10个编码,分别表示为0001、0010、0011、0100、0101、0110、0111、1000、1001和1010。在其中一个层次的节点的数量为5个情况下,该层次中每个节点的编码可以表示为0011、0100、0101、0110和0111。在另一个层次的节点数量为6的情况下,该层次中每个节点的编码可以表示为0001、0010、0100、0110、0111和1001。

步骤S1230,对于第1个层次的节点,根据对应节点的编码,生成对应节点的节点标识。

在本实施例中,在第1个层次的节点的数量为1的情况下,对于第1个层次的节点,根据对应节点的编码,生成对应节点的节点标识可以包括如下所示的步骤S1231~S1233:

步骤S1231,获取与第1个层次的节点对应的第1个存储单元,第1个存储单元包括与N个层次一一对应的存储分组,每个存储分组的容量相同。

在本实施例中,存储分组的容量可以是预先根据应用场景或具体需求设定好的,也可以是根据步骤S1100所获取的树形结构数据中各结点的度的最大值所确定的。节点的度是指结点所拥有的子树的个数。例如,在各结点的度的最大值为7的情况下,存储分组的容量可以是4bit,使得2

步骤S1232,将第1个层次的节点的编码存放至所述第1个存储单元中与第1个层次所对应的存储分组中,将第1个存储单元中其他存储分组中的数据设置为设定值。

在本实施例中,第1个存储单元中其他存储分组,可以是第1个存储单元中除第1个层次所对应的存储分组以外的存储分组。

由于节点的编码是二进制编码,因此,可以是将其他存储分组中的数据,设置为二进制形式的设定值。例如,该设定值可以是0,在一个存储分组的容量为4bit的情况下,二进制形式的设定值可以表示为0000。

在一个例子中,为了避免任意节点的节点标识与其父节点的节点标识相同,需使得任一个节点的编码不能是设定值。

步骤S1233,根据第1个存储单元中每个存储分组中的数据,得到该第1个层次的节点的节点标识。

本实施例中的节点标识可以是二进制形式,也可以是十进制形式,还可以是十六进制形式,在此不做限定。

在节点标识是二进制形式的实施例中,可以是按照预设的顺序,将每个层次所对应的存储分组中的数据进行拼接,即可得到该第1个层次的节点的二进制形式的节点标识。其中,预设的顺序可以是预先根据应用场景或具体需求设定。例如,预设的顺序可以是层次由小到大的顺序。

在节点标识是十进制形式的实施例中,可以是按照预设的顺序,将每个层次所对应的存储分组中的数据进行拼接,即可得到该第1个层次的节点的二进制形式的节点标识;再对该二进制形式的节点标识进行进制转换,得到十进制形式的节点标识。

例如,在树形结构数据的深度为5,第1个层次的节点的编码为0010,二进制形式的设定值为0000的情况下,可以得到该节点的二进制形式的节点标识为0010 0000 00000000 0000,该节点的二进制形式的节点标识为131072。

在第1个层次的节点的数量大于1的情况下,可以是分别针对第1个层次的每个节点,执行前述的步骤S1231~S1233,得到对应节点的节点标识。

步骤S1240,对于第n个层次的节点,根据对应节点的编码、以及对应节点的祖先节点的编码,生成对应节点的节点标识。

本实施例中,在第n个层次的节点的数量为1的情况下,对于第1个层次的节点,根据对应节点的编码,生成对应节点的节点标识可以包括如下所示的步骤S1241~S1243:

步骤S1241,获取第n个层次的节点的第n个存储单元,第n个存储单元包括与N个层次一一对应的存储分组,每个存储分组的容量相同。

在本实施例中,第n个存储单元的存储分组的容量与第1个存储单元存储分组的容量可以相同。

步骤S1242,将该第n个层次的节点的编码存放至第n个存储单元中与第n个层次所对应的存储分组中,将第n个层次的节点的祖先节点的编码存放至第n个存储单元对应的存储分组中,并将第n个存储单元中其他存储分组中的数据设置为设定值。

在本实施例中,第n个层次的节点,可以包括n-1个祖先节点。第n个存储单元与每个祖先节点的层次所对应的存储分组中的数据,可以是对应祖先节点的编码。例如,其中一个祖先节点的层次为2,编码为0101,那么,与第2个层次所对应的存储分组中的数据即为0101。

第n个存储单元中其他存储分组,可以是第n个存储单元中除前n个层次(包括第n个层次)所对应的存储分组以外的存储分组,即包括第n+1个层次至第N个层次所对应的存储分组。

由于节点的编码是二进制编码,因此,可以是将其他存储分组中的数据,设置为二进制形式的设定值。例如,该设定值可以是0,在一个存储分组的容量为4bit的情况下,二进制形式的设定值可以表示为0000。

在一个例子中,为了避免任意节点的节点标识与其父节点的节点标识相同,需使得任一个节点的编码不能是设定值。

步骤S1243,根据第n个存储单元中每个存储分组中的数据,得到该第n个层次的节点的节点标识。

本实施例中的节点标识可以是二进制形式,也可以是十进制形式,还可以是十六进制形式,在此不做限定。

在节点标识是二进制形式的实施例中,可以是按照预设的顺序,将每个层次所对应的存储分组中的数据进行拼接,即可得到该第1个层次的节点的二进制形式的节点标识。其中,预设的顺序可以是预先根据应用场景或具体需求设定。例如,预设的顺序可以是层次由小到大的顺序。

在节点标识是十进制形式的实施例中,可以是按照预设的顺序,将每个层次所对应的存储分组中的数据进行拼接,即可得到该第1个层次的节点的二进制形式的节点标识;再对该二进制形式的节点标识进行进制转换,得到十进制形式的节点标识。

例如,在树形结构数据的深度为5,第3个层次的节点的编码为0101,该节点对应第2个层次的祖先节点的编码为0100,该节点对应第1个层次的祖先节点的编码为0010,二进制形式的设定值为0000的情况下,可以得到该节点的二进制形式的节点标识为0010 01000101 0000 0000,该节点的二进制形式的节点标识为148736。

在第n个层次的节点的数量大于1的情况下,可以是分别针对第n个层次的每个节点,执行前述的步骤S1241~S1243,得到对应节点的节点标识。

步骤S1300,根据节点标识生成反映树形结构数据的数据表。

在本实施例中,可以是生成以节点标识为主键的数据表,该数据包可以反映该树形结构数据。

在一个例子中,该数据表可以是占用两个存储字段,其中一个存储字段用于存储节点标识,另一个存储字段可以是存储节点名称。其中,节点名称可以是树形结构数据中对应节点所代表的数据。例如,最终得到的数据包可以是如下表3所示。

表3

在一个例子中,在某些场景下,可能需要根据层次进行筛选查询,因此,可以在数据表中增加一列记录层次的数据。

步骤S1400,存储该数据表。

本实施例通过确定树形结构数据中反映每一节点的继承关系的节点标识,并根据节点标识生成反映树形结构数据的数据表,可以降低反映树形结构数据的数据表所占用的存储空间。

<方法实施例二>

在上述方法实施例一的基础上,该方法还可以包括对树形结构数据中的子树数据进行查询的步骤,具体可以包括如图2所示的步骤S2100~S2300:

步骤S2100,响应于针对以树形结构数据中的目标节点为根节点的子树数据的查询请求,确定目标节点的节点标识。

在本实施例中,该查询请求中可以包含有该目标节点的节点标识。

例如,目标节点的节点标识为65536节点的所有子孙节点,那么,就需要查询节点标识从00010000000000000000到00011111111111111111

该查询请求可以为:

select*from table where id>=65536and id<=131071

步骤S2200,根据目标节点的节点标识,确定目标节点的子孙节点。

在本实施例中,确定目标节点的子孙节点的方式,具体可以为:根据目标节点的二进制形式的节点标识,确定目标节点的层次m;从层次大于m的所有节点中,选取与1~m个层次所对应的数据与目标节点的二进制形式的节点标识中与1~m个层次所对应的数据相同的节点,即为该目标节点的子孙节点。

例如,在目标节点的二进制形式的节点标识为0010 0100 0101 0000 0000的实施例中,该目标节点的层次为3,目标节点的二进制形式的节点标识中与1~m个层次所对应的数据可以为0010 0100 0101。层次大于3的节点的节点标识包括0010 0100 0101 00010000,0010 0100 0101 0010 0000,0010 0100 0101 0010 0001和0010 0100 0110 00010001,那么,与1~3个层次所对应的数据与0010 0100 0101相同的节点标识可以包括00100100 0101 0001 0000,0010 0100 0101 0010 0000和0010 0100 0101 0010 0001,这些节点标识所对应的节点即为目标节点的子孙节点。

步骤S2300,提供目标节点和目标节点的子孙节点所构成的子树数据。

在一个实施例中,提供目标节点和目标节点的子孙节点所构成的子树数据,可以是提供数据库中所记录的目标节点的节点名称、以及目标节点的子孙节点的节点名称。

通过本实施例,在树形结构数据以数据库的形式存储的情况下,可以降低因为建立索引导致的存储空间的消耗,并且使得检索数据更加高效。

<方法实施例三>

在上述方法实施例一的基础上,该方法还可以包括在树形结构数据中新增节点的步骤,具体可以包括如图3所示的步骤S3100~S3500:

步骤S3100,接收针对树形结构数据中的目标节点新增子节点的请求,获取目标节点的节点标识。

在本实施例中,该针对目标节点新增子节点的请求中可以包含有该目标节点的节点标识。

步骤S3200,根据目标节点的节点标识,获取目标节点的子节点的节点标识。

在本实施例中,根据目标节点的节点标识,获取目标节点的子节点的节点标识的方式,可以参照前述实施例二,在此不再赘述。

步骤S3300,根据目标节点的子节点的节点标识,确定新的子节点在对应层次中的编码。

在本实施例中,可以是根据目标节点的子节点的节点标识,确定目标节点的子节点在对应层次中的编码;根据目标节点的子节点在对应层次中的编码,确定新的子节点在对应层次中的编码。具体的,新的子节点在对应层次中的编码,与目标节点的任一子节点在对应层次中的编码均不相同。

例如,在目标节点的子节点在对应层次中的编码包括0100,0001和0010的情况下,可以确定新的子节点在对应层次中的编码为1000。

步骤S3400,根据目标节点的节点标识和新的子节点的编码,生成新的子节点的节点标识。

在本实施例中,可以是将目标的节点标识中,与新的子节点的层次所对应的数据替换为新的子节点的编码,即可得到新的子节点的节点标识。

例如,在目标节点的二进制形式的节点标识为0010 0100 0101 0000 0000的实施例中,新的子节点的编码为1000,那么,可以得到该新的子节点的节点标识为0010 01000101 1000 0000。

步骤S3500,将新的子节点的节点标识存储至数据表中。

通过将该新的子节点的节点标识存储至数据表中,表示在树形结构数据中针对目标节点新增了新的子节点。

通过本实施例一中的方式来存储树形结构数据,后续在树形结构数据中新增节点的操作可以更加方便。

<方法实施例四>

在上述方法实施例一的基础上,该方法还可以包括在树形结构数据中删除节点的步骤,具体可以包括如图4所示的步骤S4100~S4300:

步骤S4100,响应于删除树形结构数据中的目标节点的请求,确定所述目标的节点标识。

在本实施例中,该删除目标节点的请求中可以包含有该目标节点的节点标识。

例如,该删除目标节点的请求可以为:

delete from table where id=65536;

步骤S4200,根据所述目标节点的节点标识,确定所述目标节点的子孙节点。

在本实施例中,根据目标节点的节点标识,获取目标节点的子孙节点的节点标识的方式,可以参照前述实施例二,在此不再赘述。

步骤S4300,从所述数据表中删除所述目标节点和所述目标节点的子孙节点。

在本实施例中,在目标节点具有子孙节点的情况下,如果只删除目标节点,可能会导致数据库中残留着一堆无用的子节点。因此,本实施例中,在删除目标节点的同时,将目标节点的子孙节点都删除。

通过本实施例一中的方式来存储树形结构数据,后续在树形结构数据中删除节点的操作可以更加方便。

<装置实施例>

在本实施例中,提供一种树形结构数据的处理装置5000,如图5所示,包括数据获取模块5100、标识确定模块5200、数据表生成模块5300和数据表存储模块5400。该数据获取模块5100用于获取待处理的树形结构数据;该标识确定模块5200用于确定树形结构数据中每一节点的节点标识;其中,节点标识反映对应节点的继承关系;该数据表生成模块5300用于根据节点标识生成反映树形结构数据的数据表。数据表存储模块5400用于存储该数据表。

本领域技术人员应当明白,可以通过各种方式来实现树形结构数据的处理装置5000。例如,可以通过指令配置处理器来实现树形结构数据的处理装置5000。例如,可以将指令存储在ROM中,并且当启动设备时,将指令从ROM读取到可编程器件中来实现树形结构数据的处理装置5000。例如,可以将树形结构数据的处理装置5000固化到专用器件(例如ASIC)中。可以将树形结构数据的处理装置5000分成相互独立的单元,或者可以将它们合并在一起实现。树形结构数据的处理装置5000可以通过上述各种实现方式中的一种来实现,或者可以通过上述各种实现方式中的两种或更多种方式的组合来实现。

在本实施例中,树形结构数据的处理装置5000可以具有多种实现形式,例如,树形结构数据的处理装置5000可以是任何的提供树形结构数据的处理服务的软件产品或者应用程序中运行的功能模块,或者是这些软件产品或者应用程序的外设嵌入件、插件、补丁件等,还可以是这些软件产品或者应用程序本身。

<电子设备>

在本实施例中,还提供一种电子设备6000。

在一个例子中,该电子设备6000可以包括前述的树形结构数据的处理装置5000。

在另一个例子中,如图6所示,该电子设备6000可以包括:

存储器6100和处理器6200,该存储器6100用于存储可执行的指令;该指令用于控制处理器6200执行前述任意实施例的方法。

在本实施例中,该电子设备6000可以是手机、平板电脑、掌上电脑、台式机、笔记本电脑、工作站、游戏机、计算机集群等任意具有存储器6100以及处理器6200的电子产品。

以上已经结合附图描述了本公开的实施例,通过确定树形结构数据中反映每一节点的继承关系的节点标识,并根据节点标识生成反映树形结构数据的数据表,可以降低反映树形结构数据的数据表所占用的存储空间。在此基础上,可以降低因为建立索引导致的存储空间的消耗,并且使得检索数据更加高效。而且,还可以使得后续在树形结构数据中新增节点或者是删除节点的操作可以更加方便。

<可读存储介质>

在本实施例中,还提供一种可读存储介质,其上存储有计算机程序,计算机程序在被处理器执行时实现如本公开任意实施例的树形结构数据的处理方法。

附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。对于本领域技术人员来说公知的是,通过硬件方式实现、通过软件方式实现以及通过软件和硬件结合的方式实现都是等价的。

以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。本公开的范围由所附权利要求来限定。

相关技术
  • 树形结构数据的处理方法、装置、设备及可读存储介质
  • 一种树形结构中数据的处理方法及装置、设备、存储介质
技术分类

06120112810931