一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据标识生成方法、装置、电子设备及存储介质与流程

2022-03-04 23:04:47 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,尤其涉及一种数据标识生成方法、装置、电子设备及存储介质。


背景技术:

2.通用唯一识别码(universallyuniqueidentifier,uuid),其存在的目的是让级联场景下的每一条数据都能够有唯一的辨识信息。
3.目前,主要通过5种算法生成uuid。其中一种最常用的就是雪花算法(snowflake)。通过雪花算法在内的5种uuid生成算法,使得uuid在计算机体系中以128位的数目存在。
4.但是,在数据的条数不多的情况下,如果仍使用128位的uuid,就会出现uuid中的许多位都没有被充分利用的情况,进而造成存储空间的浪费。


技术实现要素:

5.本技术实施例的目的是提供一种数据标识生成方法、装置、电子设备及存储介质,以节省uuid的存储空间。
6.为解决上述技术问题,本技术实施例提供如下技术方案:
7.本技术第一方面提供一种数据标识生成方法,所述方法应用于级联场景下的各节点中,所述方法包括:确定目标数据所处节点的节点标识,各节点的节点标识基于随机数生成算法生成;将所述目标数据所处节点中的最大数据序号进行数值累加,生成所述目标数据的本地标识;将所述目标数据所处节点的节点标识与所述目标数据的本地标识拼接,得到所述目标数据的数据标识。
8.本技术第二方面提供一种数据标识生成装置,所述装置应用于级联场景下的各节点中,所述装置包括:节点标识模块,用于确定目标数据所处节点的节点标识,各节点的节点标识基于随机数生成算法生成;本地标识模块,用于将所述目标数据所处节点中的最大数据序号进行数值累加,生成所述目标数据的本地标识;拼接模块,用于将所述目标数据所处节点的节点标识与所述目标数据的本地标识拼接,得到所述目标数据的数据标识。
9.本技术第三方面提供一种电子设备,包括:处理器、存储器、总线;其中,所述处理器、所述存储器通过所述总线完成相互间的通信;所述处理器用于调用所述存储器中的程序指令,以执行第一方面中的方法。
10.本技术第四方面提供一种计算机可读存储介质,包括:存储的程序;其中,在所述程序运行时控制所述存储介质所在设备执行第一方面中的方法。
11.相较于现有技术,本技术第一方面提供的数据标识生成方法,当需要为级联场景下各节点中的数据生成数据标识时,首先,确定目标数据所处节点的节点标识,而各节点的节点标识基于随机数生成算法生成;然后,将目标数据所处节点中的最大数据序号进行数值累加,生成目标数据的本地标识;最后,将目标数据所处节点的节点标识与目标数据的本地标识拼接,得到目标数据的数据标识。这样,在数据的条数不多的情况下,无需128位的
uuid,使用更少位数的uuid,也能够对数据进行唯一标识。在对各数据进行唯一标识的情况下,还能够避免标识对存储空间的浪费。
12.本技术第二方面提供的数据标识生成装置、第三方面提供的电子设备、第四方面提供的计算机可读存储介质,与第一方面提供的数据标识生成方法具有相同或相似的有益效果。
附图说明
13.通过参考附图阅读下文的详细描述,本技术示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本技术的若干实施方式,相同或对应的标号表示相同或对应的部分,其中:
14.图1为本技术实施例中数据标识生成方法的流程示意图;
15.图2为本技术实施例中生成节点标识的流程示意图;
16.图3为本技术实施例中生成本地标识的流程示意图;
17.图4为本技术实施例中生成符号标识的流程示意图;
18.图5为本技术实施例中确定数据标识总位数的流程示意图;
19.图6为本技术实施例中数据标识的结构示意图;
20.图7为本技术实施例中数据标识生成装置的结构示意图一;
21.图8为本技术实施例中数据标识生成装置的结构示意图二;
22.图9为本技术实施例中电子设备的结构示意图。
具体实施方式
23.下面将参照附图更详细地描述本技术的示例性实施方式。虽然附图中显示了本技术的示例性实施方式,然而应当理解,可以以各种形式实现本技术而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本技术,并且能够将本技术的范围完整的传达给本领域的技术人员。
24.需要注意的是,除非另有说明,本技术使用的技术术语或者科学术语应当为本技术所属领域技术人员所理解的通常意义。
25.目前,当需要对级联场景下各节点中的各条数据生成uuid时,主要依靠雪花算法在内的5种常用的uuid生成算法。但是,这些算法在生成数据的uuid时,生成的uuid的位数为128位。然而,在数据较少的情况下,128位的uuid中的许多位显然没有被充分利用,这样就会造成uuid对于存储空间过多的占用,进而导致存储空间的浪费。
26.发明人经过深入研究发现,这5种常用的uuid生成算法虽然在一定程度上能够解决数据标识符唯一的问题,但是鉴于算法本身的限制,只能够生成128位的uuid。而如果使用自增序列,虽然能够减少uuid所占的位数,但是如果将下一级数据上传到上一级中,就会存在下级数据的uuid与上级数据的uuid重复的问题。
27.有鉴于此,针对数据较少的级联场景,发明人放弃了现有常用的uuid生成算法,而是采用随机数生成算法先生成数据所在节点的标识。并结合自增序列,生成数据在节点内的标识。最后,将数据所在节点的标识与数据在节点内的标识结合,就得到了数据的最终标识。在这里,节点的标识与节点内的标识可以根据数据的实际多少进行自主选择。这样,在
数据的条数不多的情况下,无需128位的uuid,例如:使用64位、32位等等的uuid,也能够对数据进行唯一标识。这样,不仅避免了uuid对存储空间的过多占用,能够节省存储空间,当下级数据上传到上级之后,也不会使下级数据与上级数据发生标识冲突,还能够确保级联场景下各数据标识的唯一性。
28.在实际应用中,本技术实施例所述的数据标识生成方法,可以应用于级联场景下的各节点中。也就是说,采用本技术实施例提供的数据标识方法,能够在级联场景下,对各节点中的各数据生成其对应的uuid,并且,各节点中各数据的uuid并不会重复。例如:在分布式存储系统中,针对每一个节点中存储的每一条数据,都可以按照本技术实施例提供的数据标识生成方法生成“数据所在节点的标识 数据在节点内的标识”拼接而成的数据标识,这样,对于处于同一节点中的两条数据,由于其在节点内的标识不同,能够将这两条数据进行区分。而对于处于不同节点的两条数据,即便其在各自得节点内得标识相同,但是其所处的节点之间的标识是不同的,因此,也能够对这两条数据进行区分。并且,节点的标识与节点内的标识都是可以根据数据的多少自行进行符号位数设置的。在数据的数量较少的情况下,就无需再使用128位的uuid了。在对各数据进行唯一标识的情况下,还能够避免标识对存储空间的浪费。
29.接下来,详细对本技术实施例提供的数据标识生成方法进行说明。
30.图1为本技术实施例中数据标识生成方法的流程示意图,参见图1所示,该方法可以包括:
31.s101:确定目标数据所处节点的节点标识。
32.其中,各节点的节点标识基于随机数生成算法生成。
33.也就是说,当存在数据标识生成的需求时,首先,会接收到一个集群。在该集群中,存在有多个节点。这些节点之间可以是同级的关系,也可以是上下级关系。对于该集群中各节点之间的具体关系,此处不做限定。而在每个节点中,又会存在一条或者多条数据,可能还不存在数据。对于该集群中各节点内数据的数量,此处也不做限定。然后,就可以采用随机数生成算法为该集群中的每个节点生成其相应的节点标识。这里对于随机数生成算法的具体类型,也不做限定。
34.这里需要说明的是,在为集群中的每个节点生成节点标识时,可以仅针对其中存在数据的节点生成其相应的节点标识。即,在为集群中某一个节点生成标识前,先判断该节点中是否存在数据,若存在,则为该节点生成其相应的节点标识,若不存在,则不为该节点生成其相应的节点标识。这是因为:该节点中如果不存在数据,那么也就不存在生成数据标识的需求。此时若还为该节点生成其相应的节点标识,就毫无意义,不仅浪费了数据标识的生成效率,还会占用一个节点标识。所以,仅为集群中存在数据的节点生成节点标识,不仅能够提高数据标识的生成效率,还能够节省节点标识,以供更多的节点中的数据生成数据标识使用。
35.在基于随机数生成算法生成集群中各节点的节点标识后,针对集群中的某一个目标数据,在确定了目标数据所处的节点后,该节点的节点标识就是目标数据的节点标识。
36.在具体实施过程中,在为集群中的各节点生成节点标识后,可以将各节点及其对应的节点标识存储于一张表中。这样,当需要为集群中的某一个目标数据生成数据标识时,在确定了目标数据所处的节点后,就可以先从该表中查找出该节点的节点标识,进而作为
目标数据的节点标识。后续再继续执行确定目标数据的本地标识等步骤。
37.s102:将目标数据所处节点中的最大数据序号进行数值累加,生成目标数据的本地标识。
38.在确定了目标数据所处节点的节点标识后,还需要再确定目标数据在节点内的本地标识,这样,将节点标识与本地标识结合后,才能够得到目标数据的数据标识。
39.在生成目标数据的本地标识的过程中,是将目标数据所处节点中的最大数据序号进行数值累加,进而得到目标数据在该节点中的本地标识。
40.这里的最大数据序号,是指目标数据所处节点中为已有数据编辑的最大序号。举例来说,假设目标数据所处的节点a中,已存在数据a和数据b。并且,数据a对应的序号为001,数据b对应的序号为002。那么,此时的最大数据序号就是002。而如果节点a中目前还不存在数据,那么,此时的最大数据序号则是000。以上的000、001、002仅为数据序号的举例,数据数据还可以以其它形式存在。对于数据序号的具体存在形式,此处不做限定。
41.在生成目标数据的本地标识的过程中,当目标数据所处节点中已存在有数据时,那么,就将该节点中已有的最大数据序号继续进行数值累加,一次累加后,就得到了目标数据的本地标识。而当目标数据所处节点中还不存在数据时,那么,就从0开始继续进行数值累加,一次累加后,就得到了目标数据的本地标识。对于此时进行数值累加的起点,需要根据目标数据所处节点中现有数据的具体情况而定。
42.在进行数值累加的过程中,可以通过 1的方式进行数值累加,也可以通过 2的方式进行数值累加。也就是说,可以通过预设步长进行数值累加。当节点内的数据较多,和/或本地标识的位数有限时,可以将预设步长设置的小一些。而当节点内的数据较少,和/或本地标识的位数较多时,可以将预设步长设置的大一些。也就是说,可以根据实际情况确定预设步长的具体数值。对于预设步长的具体数值,此处不做具体限定。
43.s103:将目标数据所处节点的节点标识与目标数据的本地标识拼接,得到目标数据的数据标识。
44.在获得了目标数据的节点标识以及本地标识后,可以将目标数据的节点标识与目标数据的本地标识进行拼接。这样,就得到了目标数据的数据标识。
45.在进行拼接的过程中,具体的,可以包括但不限于以下两种方式。
46.第一种方式:将节点标识与本地标识首尾拼接。
47.在这里,又可以分为两种情况。
48.第1种情况:节点标识的尾部与本地标识的首部拼接。
49.举例来说,假设目标数据的节点标识为123,目标数据的本地标识为456。那么,拼接后的目标数据的数据标识就是123456。
50.第2种情况:本地标识的尾部与节点标识的首部拼接。
51.举例来说,假设目标数据的节点标识为123,目标数据的本地标识为456。那么,拼接后的目标数据的数据标识就是456123。
52.第二种方式:将节点标识与本地标识以相互插入的方式拼接。
53.举例来说,假设目标数据的节点标识为123,目标数据的本地标识为456。那么,拼接后的目标数据的数据标识就可以是124356、142536等。
54.无论采用上述哪种方式进行拼接,拼接后的数据标识都能够唯一地对目标数据进
行标识。当然,还可以采用其它方式对节点标识与本地标识进行拼接。对于拼接的具体方式,此处不做限定。
55.由上述内容可知,本技术实施例提供的数据标识生成方法,当需要为级联场景下各节点中的数据生成数据标识时,首先,确定目标数据所处节点的节点标识,而各节点的节点标识基于随机数生成算法生成;然后,将目标数据所处节点中的最大数据序号进行数值累加,生成目标数据的本地标识;最后,将目标数据所处节点的节点标识与目标数据的本地标识拼接,得到目标数据的数据标识。这样,在数据的条数不多的情况下,无需128位的uuid,使用更少位数的uuid,也能够对数据进行唯一标识。在对各数据进行唯一标识的情况下,还能够避免标识对存储空间的浪费。
56.进一步地,作为对图1所示方法的细化和扩展,为了更随机地生成各节点的节点标识,随机数生成算法具体可以采用梅森旋转算法。图2为本技术实施例中生成节点标识的流程示意图,参见图2所示,在步骤s101之前,还可以包括:
57.s201:采用线性同余算法计算梅森旋转算法中的参数。
58.线性同余算法(linear congruential method),能够产生均匀分布地随机数,是由美国莱默尔在1951年提出的。
59.线性同余算法具体为:
60.x
n 1
=(axn c)mod(m)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
公式(1)
61.其中,m表示模(moduls),m>0。a表示乘数(multipliner),0<a<m。c表示增量(increment),0≤c<m。n≥0,x0为递推序列的初始值,也称为种子(seed)。x
n 1
则是生成的随机数。而由多个不同的x组成的就是随机数序列,即需要代入到后续的梅森旋转算法中的参数。
62.当需要针对一个节点生成其相应的节点标识时,需要先通过线性同余算法得到一个随机数,然后将该随机数代入到梅森旋转算法中,进而得到该节点的节点标识。
63.在对首个节点添加节点标识的过程中,通过线性同余算法首先得到的是种子,进而将种子代入到梅森旋转算法中计算首个节点的节点标识。而后通过线性同余算法得到的是x1,进而将x1代入到梅森旋转算法中计算下一个节点的节点标识。以此类推,通过线性同余算法得到x2、x3等,进而将x2、x3等代入到梅森旋转算法中计算后续各节点的节点标识,直到所有节点的节点标识计算完成为止。
64.在确定种子的过程中,为了使得通过线性同余算法得到的随机数能够与其它集群中的节点进行更好的区分,可以基于当前节点的时间戳及其位置信息来确定种子。
65.具体的,步骤s201可以包括:
66.步骤a1:根据当前节点的时间戳及其位置信息,确定线性同余算法中的种子。
67.这里的时间戳,可以是指建立节点的时间,也可以是指节点中存储第一个数据的时间,也可以是指节点中存储最后一个数据的时间。对于时间戳的具体内容,此处不做限定。
68.这里的位置信息,可以是指节点所处平台的身份标识号(identity document,id),也可以是指节点的具体地理坐标。对于当前位置的具体内容,此处不做限定。
69.这里的种子(seed),具体可以采用以下公式确定:
70.seed=((时间戳*平台id) 0xbl)&((1l《《48)

1)公式(2)
71.当前,线性同余算法中的种子还可以通过时间戳或者平台id中的任意一种,或者时间戳与平台id相乘,或者使用其它参数(例如:平台中所有节点的总数量、节点的摘要等)确定。对于种子的具体确定方式,此处不做限定。
72.步骤a2:基于代入种子后的线性同余算法计算梅森旋转算法中的参数。
73.在确定了种子后,就可以将种子代入到线性同余算法中,作为线性同余算法中x的初始值。进而运行代入种子后的线性同余算法,得到的结果就可以作为梅森旋转算法中的参数。
74.s202:基于代入参数后的梅森旋转算法分别生成各节点的节点标识。
75.在通过线性同余算法得到了参数后,就可以将该参数代入到梅森旋转算法中,作为梅森旋转算法中的参数,进而运行代入参数后的梅森旋转算法,就能够得到一个节点的节点标识。
76.梅森旋转算法(mersenne twister),是一个伪随机数发生算法。由松本真和西村拓士在1997年开发。基于有限二进制字段上的矩阵线性递归{\displaystyle f_{2}}f_{{2}},可以快速产生高质量的伪随机数。
77.mersenne twister,是来自周期长度取自梅森质数的这样一个事实。该算法通常使用的是两个相近的变体,不同之处在于使用了不同的梅森素数。一个更新的和更常用的是mt19937,32位字长。还有一个变种是64位版的mt19937-64。对于一个k位的长度,mersenne twister会在{\displaystyle[0,2^{k}-1]}[0,2^{k}-1]的区间之间生成离散型均匀分布的随机数。具体需要使用多少位字长的版本,可以根据实际对于节点标识的位数要求而定,此处不做具体限定。
[0078]
实质上,整个算法主要分为三个阶段:第1阶段:获得基础的梅森旋转链;第2阶段:对于旋转链进行旋转算法;第3阶段:对于旋转算法所得的结果进行处理。
[0079]
由上述内容可知,通过线性同余算法确定梅森旋转算法中的参数,进而将该参数代入到梅森旋转算法中,以获得节点的节点标识,能够使得节点标识充分随机,更好地与其它节点标识进行区分,进而更好地确保数据标识的唯一性。以及,通过节点的时间戳及其位置信息确定线性同余算法中的种子,能够使得当前集群中的节点与其它集群中的节点更好地区分,进而更好地确保数据标识的唯一性。
[0080]
进一步地,作为对图1所示方法的细化和扩展,当需要为某一节点中的多个数据添加本地标识时,为了减少对数据表的读写频率,进而提升生成数据标识的处理效率,可以在为个数据分配完本地标识后,再将各数据及其相应的标识在数据表中一次性进行更新。图3为本技术实施例中生成本地标识的流程示意图,参见图3所示,步骤s102,具体可以包括:
[0081]
s301:当目标数据的数量为多个时,从数据表中获取目标数据所处节点中最大数据序号累加后的相应数量的本地标识,分别作为目标数据的本地标识。
[0082]
目标数据的数量为多个,也就是说,同一节点中,需要为多个数据添加本地标识。而数据表中存储有各节点数据及其对应的本地标识的对应关系,并且还存储有各节点中还未分配出去的本地标识。为了节省数据表的读写次数,针对数量为多个的目标数据,可以在确定目标数据所处节点的节点标识后,从数据表中直接拉取该节点中相应数量的本地标识,进而分别作为这多个数量的目标数据的本地标识。
[0083]
举例来说,假设目标数据为3个,即数据a、数据b和数据c,同属于节点a。在数据表
中,已存储有节点a中数据d的数据标识(例如:123001)。其中,123为节点a的节点标识,001为数据d在节点a中的本地标识。由于目标数据为3个,因此,需要从数据表中最大数据序号后采用数据累加的方式拉取三个序号,即002、003、004,并分别作为数据a、数据b和数据c的本地标识。
[0084]
以上的001、002等仅作为本地标识的示例。在实际应用中,本地标识的位数可以并不仅限于3位,而可以是36位等更多的位数。当实际生成的本地标识的位数没有达到实际要求的本地标识的位数时,可以通过0来补充。同样的,前述的节点标识也是可以如此。对于本地标识以及节点标识的具体位数,此处不做限定。
[0085]
在实际应用中,上述的数据表中可以仅存储某一个节点中所有的已使用和还未使用的本地标识,不同节点中的本地标识存储于不同的数据表中。当然,上述的数据表中还可以是存储所有节点的节点标识及其中的所有本地标识。对于数据表中具体的存储内容和形式,此处不做限定。
[0086]
s302:将目标数据及其本地标识在数据表中更新。
[0087]
在确定了数量为多个的目标数据及其本地标识后,就可以一次性地将目标数据及其本地标识在数据表中进行更新。这样,数据表中的数据更新频率就会从一条数据一次,变成了多条数据一次,进而减少了数据表的更新频率,进而提升了生成数据标识的处理效率。
[0088]
继续上述举例,在确定了数据a、数据b和数据c的本地标识002、003、004后,由于数据a、数据b和数据c均为节点a中的数据,所以数据a、数据b和数据c的节点标识都是123。这样,就确定了数据a、数据b和数据c的数据标识分别为123002、123003、123004。进而将数据a、数据b和数据c及其对应的数据标识123002、123003、123004一次直接更新于数据表中。
[0089]
由上述内容可知,当需要为某一节点中的多个数据添加本地标识时,通过多个数据的数量,从数据表中一次直接拉取出相应数量的本地标识,并结合这多个数据的节点标识,确定多个数据的数据标识,进而将这多个数据及其数据标识一次性地在数据表中进行更新。这样,数据表中的数据更新频率就会从一条数据一次,变成了多条数据一次,能够减少数据表的读写频率,进而提升生成数据标识的处理效率。
[0090]
进一步地,作为对图1所示方法的细化和扩展,为了提高数据标识的辨识度,即通过数据标识可以直接获知相应数据的属性,可以在数据标识中再添加一位,在该位中添加符号标识。图4为本技术实施例中生成符号标识的流程示意图,参见图4所示,在步骤s103之前,还可以包括:
[0091]
s401:确定目标数据的属性。
[0092]
在这里,目标数据的属性至少可以包括:目标数据的类型、目标数据的含义、目标数据所属的用户中的一个或多个。
[0093]
对于目标数据的类型,可以是指目标数据是属于订单数据、用户数据、浏览数据等类型中的哪一种。当然,目标数据还可以是这里没有提到的其它类型,这需要根据目标数据的具体内容而定。对于具体的类型,此处不做限定。
[0094]
对于目标数据的含义,可以是指目标数据的具体内容的概括。例如:通过信息摘要算法(message-digest algorithm,md5)对目标数据进行计算,得到的结果就可以被当作是目标数据的含义,进而添加到符号位中。当然,还可以通过其它方式对目标数据的具体内容进行概括。对于目标数据含义的具体获取方式,此处不做限定。
[0095]
对于目标数据所属的用户,具体可以是指用户的id、名称、网络地址等。对于所属的用户的具体内容,此处不做限定。
[0096]
当然,目标数据的属性并不仅限于上述的类型、含义、所属用户,还可以其它能够表明目标数据属性的具体内容。对于目标数据属性的具体内容,此处不做限定。
[0097]
s402:基于目标数据的属性生成目标数据的符号标识。
[0098]
在确定了目标数据的属性后,可以对目标数据的属性作进一步处理,将目标数据的属性处理为数值,进而将该数值作为目标数据的符号标识,添加到目标数据的数据标识中。这样,用户在看到目标数据的数据标识,无需具体查看目标数据,也能够对目标数据的具体内容所有了解,能够使得数据标识的表达更加丰富。
[0099]
具体来说,可以预先建立各属性与预设数值的映射关系。在确定目标数据为某一属性后,就可以在映射关系中查找该属性对应的预设数值,进而将查找到的预设数值作为目标数据的符号标识。当然,还可以通过其它方式基于目标数据的属性计算目标数据的符号标识。对于具体的计算方式,此处不做限定。
[0100]
当确定有目标数据的多种属性时,例如:确定目标数据的类型为订单数据,以及确定目标数据所属用户为用户a。那么,符号标识的位数就至少需要2位。也就是说,符号标识的位数需要基于实际确定的目标数据的属性的种类数确定。即,目标数据的属性的种类数是多少,符号标识的位数至少需要与目标数据的属性的种类数相当。
[0101]
当然,这也并不意味着每一种属性只能够占用符号标识中的一位。当某种属性下的具体类目较多时,一位符号标识可能并不够为这么多的类目进行区分,那么,就需要再添加一位或者一位以上的符号标识,才能够满足为这么多的类目进行区分。
[0102]
举例来说,假设数据存在12种具体的类型,分别为:类型1、类型2、
……
、类型12。那么,此时的符号标识就需要至少有2位,才能够满足对数据的区分。例如:目标数据属于类型2,那么目标数据的符号标识就可以是02。
[0103]
在生成了目标数据的符号标识后,相应的,拼接后的数据标识中也就应该存在有符号标识。即,步骤s103,就变成了:将目标数据的符号标识、目标数据所处节点的节点标识、目标数据的本地标识拼接,得到目标数据的数据标识。
[0104]
在具体实施过程中,可以将目标数据的符号标识、目标数据所处节点的节点标识、目标数据的本地标识依次进行拼接。这样,就得到了“符号标识 节点标识 本地标识”这样的数据标识。当然,也可以调整目标数据的符号标识、目标数据所处节点的节点标识、目标数据的本地标识之间拼接的前后顺序。例如:形成“节点标识 本地标识 符号标识”、“本地标识 节点标识 符号标识”等这样的数据标识。对于最终的数据标识的具体拼接形式,此处不做具体限定,只要最终的数据标识中存在号标识、节点标识、本地标识即可。
[0105]
由上述内容可知,通过在数据标识中再增加一个符号位,进而基于目标数据的属性确定目标数据的符号标识,进而将目标数据的符号标识添加到符号位中,使得用户仅通过数据标识就可以获知相应数据的属性,进而提高数据标识的辨识度。
[0106]
进一步地,作为对图1所示方法的细化和扩展,在数据的总数量不多的情况下,为了更加充分地利用数据标识中每一位,尽可能地减少数据标识的位数,最大化的节省存储空间,可以根据预设存储总量设置数据标识的总位数。图5为本技术实施例中确定数据标识总位数的流程示意图,参见图5所示,在步骤s101之前,还可以包括:
[0107]
s501:根据预设存储总量设置数据标识的总位数。
[0108]
其中,设置的数据标识的总位数小于128位。
[0109]
这里的预设存储总量,可以是指硬件设备中能够为数据标识留有的存储空间,也可以是待生成数据标识的所有数据的总数量。对于预设存储总量的具体内容,此处不做限定。
[0110]
具体的,当硬件设备中的存储空间所剩不多,或者数据的总数量较少时,可以将数据标识的总位数设置的少一些。当硬件设备中的存储空间所剩较多,或者数据的总数量较多时,可以将数据标识的总位数设置的多一些。
[0111]
在实际应用中,数据标识的总位数可以是64位、32位等,具体的位数可以根据实际需要确定,此处不做具体限定。
[0112]
s502:根据各节点的节点总数确定数据标识中节点标识的位数。
[0113]
在确定了数据标识的总位数后,对于数据标识中节点标识和本地标识各自占用的位数,可以先确定节点标识的位数,进而将数据标识的总位数与节点标识的位数相减,就能够确定本地标识的位数了。或者,也可以先确定本地标识的位数,进而将数据标识的总位数与本地标识的位数相减,就能够确定节点标识的位数了。
[0114]
在确定节点标识位数的过程中,可以根据各节点的节点总数确定节点标识的位数。具体来说,当节点总数相比于节点中数据的总数量较多时,可以将节点标识的位数设置的多于本地标识的位数。当节点总数相比于节点中数据的总数量较少时,可以将节点标识的位数设置的少于本地标识的位数。
[0115]
对于具体确定节点标识占用多少位,可以将各节点的节点总数除以每位的最大分类数,得到的数值就可以作为节点标识的位数。例如:节点总数为50,每位中可以是0、1、2、3、4、5、6、7、8、9这10中数值,即最大分类数为10,那么50除以10,得到的是5。那么,就将节点标识的位数设置为5。当然,还可以设置为6、7等等。当然,还可以通过其它方式基于节点总数量确定节点标识的位数,此处不做具体限定。
[0116]
s503:将数据标识的总位数与节点标识的位数相减,得到数据标识中本地标识的位数。
[0117]
在确定了数据标识的总位数,以及节点标识的位数后,将两者相减,得到的结果就是本地标识的位数。这样,节点标识的位数和本地标识的位数就确定了。进而就可以基于随机数生成算法确定各节点的节点标识,以及基于数值累加方式确定各节点中数据的本地标识。
[0118]
除了节点标识与本地标识之外,还存在有符号标识,因此,在为节点标识和本地标识分配位数时,还需要为符号标识留有一定的位数。
[0119]
在实际应用中,本技术实施例提供的数据标识生成方法,数据标识的总位数可以取64位。经过大量实践证实,64位的uuid足以满足实际中数据标识的需求,并且能够确保数据标识的唯一性。
[0120]
图6为本技术实施例中数据标识的结构示意图,参见图6所示,在54位的uuid中,从右往左看,第64位为符号位,用于添加目标数据的符号标识。第37-63位为节点id,用于添加目标数据所处节点的节点标识。第1-36位为增序列,用于添加目标数据在节点内的本地标识。
[0121]
以下表1为数据标识中各位置的详细信息。
[0122]
表1
[0123]
位置内容长度说明64符号位1取整数37-63节点id27前缀1-36增序列36自增序列
[0124]
也就是说,数据标识由三部分组成:符号位、节点id以及增序列。其中,符号位一般来说只取正数。节点id取自27位的随机值。增序列为递增的36位序列。
[0125]
由上述内容可知,在数据的总数量不多的情况下,可以根据预设存储总量设置数据标识的总位数。这样,能够更加充分地利用数据标识中每一位,尽可能地减少数据标识的位数,最大化的节省存储空间。
[0126]
基于同一发明构思,作为对上述方法的实现,本技术实施例还提供了一种数据标识生成装置,该装置应用于级联场景下的各节点中。图7为本技术实施例中数据标识生成装置的结构示意图一,参见图7所示,该装置可以包括:
[0127]
节点标识模块701,用于确定目标数据所处节点的节点标识,各节点的节点标识基于随机数生成算法生成;
[0128]
本地标识模块702,用于将所述目标数据所处节点中的最大数据序号进行数值累加,生成所述目标数据的本地标识;
[0129]
拼接模块703,用于将所述目标数据所处节点的节点标识与所述目标数据的本地标识拼接,得到所述目标数据的数据标识。
[0130]
进一步地,作为对图7所示装置的细化和扩展,本技术实施例还提供了一种数据标识生成装置。图8为本技术实施例中数据标识生成装置的结构示意图二,参见图8所示,该装置可以包括:
[0131]
位数确定模块801,包括:
[0132]
总位确定单元8011,用于根据预设存储总量设置所述数据标识的总位数,所述总位数小于128位。
[0133]
节点位确定单元8012,用于根据所述各节点的节点总数确定所述数据标识中节点标识的位数。
[0134]
本地位确定单元8013,用于将所述数据标识的总位数与所述节点标识的位数相减,得到所述数据标识中本地标识的位数。
[0135]
标识生成模块802,包括:
[0136]
参数计算单元8021,用于采用线性同余算法计算所述梅森旋转算法中的参数。
[0137]
参数计算单元8021,具体用于:根据当前节点的时间戳及其位置信息,确定所述线性同余算法中的种子;基于代入所述种子后的线性同余算法计算所述梅森旋转算法中的参数。
[0138]
标识生成单元8022,用于基于代入所述参数后的梅森旋转算法分别生成各节点的节点标识。
[0139]
节点标识模块803,用于确定目标数据所处节点的节点标识,各节点的节点标识基于随机数生成算法生成。所述随机数生成算法包括梅森旋转算法。
[0140]
本地标识模块804,用于当所述目标数据的数量为多个时,从数据表中获取所述目标数据所处节点中最大数据序号累加后的相应数量的本地标识,分别作为所述目标数据的本地标识,并将所述目标数据及其本地标识在所述数据表中更新。
[0141]
符号标识模块805,包括:
[0142]
属性确定单元8051,用于确定所述目标数据的属性。
[0143]
其中,所述目标数据的属性至少包括:所述目标数据的类型、所述目标数据的含义、所述目标数据所属的用户中的一个或多个。
[0144]
符号生成单元8052,用于基于所述目标数据的属性生成所述目标数据的符号标识。
[0145]
拼接单元806,用于将所述目标数据的符号标识、所述目标数据所处节点的节点标识、所述目标数据的本地标识拼接,得到所述目标数据的数据标识。
[0146]
这里需要指出的是,以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本技术装置实施例中未披露的技术细节,请参照本技术方法实施例的描述而理解。
[0147]
基于同一发明构思,本技术实施例还提供了一种电子设备。图9为本技术实施例中电子设备的结构示意图,参见图9所示,该电子设备可以包括:处理器901、存储器902、总线903;其中,处理器901、存储器902通过总线903完成相互间的通信;处理器901用于调用存储器902中的程序指令,以执行上述一个或多个实施例中的方法。
[0148]
这里需要指出的是,以上电子设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本技术电子设备实施例中未披露的技术细节,请参照本技术方法实施例的描述而理解。
[0149]
基于同一发明构思,本技术实施例还提供了一种计算机可读存储介质,该存储介质可以包括:存储的程序;其中,在程序运行时控制存储介质所在设备执行上述一个或多个实施例中的方法。
[0150]
这里需要指出的是,以上存储介质实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本技术存储介质实施例中未披露的技术细节,请参照本技术方法实施例的描述而理解。
[0151]
以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献