数据记录的存储方法、装置、存储介质及电子设备与流程

文档序号:32700239发布日期:2022-12-27 22:27阅读:21来源:国知局
数据记录的存储方法、装置、存储介质及电子设备与流程

1.本技术涉及计算机领域,具体涉及一种数据记录的存储方法、装置、计算机可读存储介质及电子设备。


背景技术:

2.在软件系统中,经常需要存储数据记录,以游戏为例,用户所操控的虚拟角色需要完成不同的任务,并获得一定数量的游戏道具,任务是否完成可以通过记录任务的任务id,并通过0以及1来表示该任务是否完成,而游戏道具的数量可以通过记录游戏道具的道具id和具体数量来表示,上述记录方式即为数据记录。
3.在对现有技术的研究和实践过程中,本技术的发明人发现,现有技术在大型系统中,例如玩法众多的大型游戏,经常需要存储用户所操控的虚拟角色的海量数据记录,在用户众多或者用户操控有多个虚拟角色时,需要占用较大的存储空间,导致长期运营会造成很大负担。


技术实现要素:

4.本技术实施例提供一种数据记录的存储方法及装置,可以降低数据记录占用的存储空间,避免对长期运营造成很大负担。
5.为解决上述技术问题,本技术实施例提供以下技术方案:
6.一种数据记录的存储方法,包括:
7.获取多个待存储的数据记录,每一所述数据记录包括记录标号以及记录值;
8.当所述数据记录的记录类型为第一类型时,基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组;
9.将各数据记录组中的数据记录存储至对应的存储区域,并记录每一存储区域中的数据记录对应的记录值;
10.基于所述分组参数以及所述记录标号对所述存储区域进行分组,得到多个存储区域组;
11.遍历每一存储区域组中存储区域,筛选出记录值一致性符合预设条件的目标存储区域;
12.记录所述目标存储区域所处的目标存储区域组的目标组编号以及在所述目标存储区域组中所述目标存储区域的目标存储区域序号,并清除所述目标存储区域中的数据记录。
13.一种数据记录的存储装置,其特征在于,包括:
14.第一获取模块,用于获取多个待存储的数据记录,每一所述数据记录包括记录标号以及记录值;
15.第一分组模块,用于当所述数据记录的记录类型为第一类型时,基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组;
16.第一记录模块,用于将各数据记录组中的数据记录存储至对应的存储区域,并记录每一存储区域中的数据记录对应的记录值;
17.第二分组模块,用于基于所述分组参数以及所述记录标号对所述存储区域进行分组,得到多个存储区域组;
18.筛选模块,用于遍历每一存储区域组中存储区域,筛选出记录值一致性符合预设条件的目标存储区域;
19.第二记录模块,用于记录所述目标存储区域所处的目标存储区域组的目标组编号以及在所述目标存储区域组中所述目标存储区域的目标存储区域序号,并清除所述目标存储区域中的数据记录。
20.在一些实施例中,所述第一分组模块,包括:
21.第一排序子模块,用于按照记录标号从小到大的顺序对数据记录进行排序,得到排序后数据记录;
22.第一划分子模块,用于按照分组参数对所述排序后数据记录进行划分,得到多个数据记录组。
23.在一些实施例中,所述第二分组模块,包括:
24.第二排序子模块,用于获取每一存储区域中指定位置的数据记录的记录标号,按照记录标号从小到大的顺序对存储区域进行排序,得到排序后存储区域;
25.第二分组子模块,用于按照分组参数对所述排序后存储区域进行划分,得到多个存储区域组。
26.在一些实施例中,所述装置,还包括:
27.第一接收模块,用于接收查询请求,所述查询请求携带有待查询数据记录的待查询记录标号;
28.第一计算模块,用于计算所述待查询记录标号的标号值与所述分组参数的比值,得到第一计算结果;
29.第一取整模块,用于对所述第一计算结果进行取整处理,得到第一取整值,并以所述第一取整值确定为所述待查询记录标号所处的待查询存储区域的存储区域编号;
30.第二计算模块,用于计算所述待查询记录标号与所述分组参数的比值,将得到的余数确定为所述待查询数据记录在所述待查询存储区域中的数据记录序号;
31.第三计算模块,用于计算所述存储区域编号与所述分组参数的比值,得到第二计算结果;
32.第二取整模块,用于对所述第二计算结果进行取整处理,得到第二取整值,并以所述第二取整值确定为所述待查询存储区域所处的待查询存储区域组的组编号;
33.第四计算模块,用于计算所存储区域编号与所述分组参数的比值,将得到的余数确定为所述待查询存储区域在所述待查询存储区域组中的存储区域序号;
34.查询模块,用于基于所述数据记录序号、待查询存储区域组的组编号以及所述存储区域序号,对所述待查询记录标号进行查询。
35.在一些实施例中,所述查询模块,包括:
36.第一确定模块,用于确定是否记录有所述待查询存储区域组的组编号;
37.第二确定模块,用于若记录有所述待查询存储区域组的组编号,则确定是否记录
有所述待查询存储区域组内所述存储区域序号;
38.返回模块,用于若记录有所述待查询存储区域组内所述存储区域序号,则返回预设数值。
39.在一些实施例中,所述查询模块,还包括:
40.查找子模块,用于若未记录有所述待查询存储区域组的组编号,或未记录有所述待查询存储区域组内所述存储区域序号,则查找所述待查询存储区域组内所述存储区域序号的存储区域;
41.提取子模块,用于提取所述存储区域中数据记录序号对应的数据记录,返回所述数据记录对应的记录值。
42.在一些实施例中,所述第一记录模块,包括:
43.二进制表示子模块,用于通过比特位对每一存储区域中数据记录组中的数据记录对应的记录值进行二进制表示,得到各存储区域对应的存储区域掩码;
44.所述筛选模块,包括:
45.筛选子模块,用于遍历每一存储区域组中存储区域对应的存储区域掩码,筛选出存储区域掩码为预设存储区域掩码的目标存储区域。
46.在一些实施例中,所述装置,还包括:
47.第二接收模块,用于接收添加请求,所述添加请求携带有待添加数据记录的待添加记录标号以及待添加记录值;
48.第二获取模块,用于获取所述待添加数据记录的数据类型;
49.建立模块,用于若所述待添加数据记录的数据类型为第二类型,则建立所述待添加记录标号与所述待添加记录值的映射关系,并存储所述待添加数据记录。
50.一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行上述数据记录的存储方法中的步骤。
51.一种电子设备,包括存储器,处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如上所述数据记录的存储方法中的步骤。
52.本技术实施例通过获取多个待存储的数据记录,每一所述数据记录包括记录标号以及记录值;当所述数据记录的记录类型为第一类型时,基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组;将各数据记录组中的数据记录存储至对应的存储区域,并记录每一存储区域中的数据记录对应的记录值;基于所述分组参数以及所述记录标号对所述存储区域进行分组,得到多个存储区域组;遍历每一存储区域组中存储区域,筛选出记录值一致性符合预设条件的目标存储区域;记录所述目标存储区域所处的目标存储区域组的目标组编号以及在所述目标存储区域组中所述目标存储区域的目标存储区域序号,并清除所述目标存储区域中的数据记录。以此,通过清除记录值一致性符合预设条件的目标存储区域中的数据记录的方式,从而降低数据记录占用的存储空间,避免对长期运营造成很大负担。
附图说明
53.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使
用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
54.图1a为本技术实施例提供的数据记录的存储方法的系统示意图。
55.图1b为本技术实施例提供的数据记录的存储方法的流程示意图。
56.图1c为本技术实施例提供的存储第一类型的数据记录的示意图。
57.图1d为本技术实施例提供的根据数据记录id确定数据记录对应的存储位置的示意图。
58.图1e为本技术实施例提供的确定数据记录是否存储在存储区域的示意图。
59.图1f为本技术实施例提供的增添数据记录的第一种流程示意图。
60.图1g为本技术实施例提供的增添数据记录的第二种流程示意图。
61.图1h为本技术实施例提供的移除数据记录的第一种流程示意图。
62.图1i为本技术实施例提供的移除数据记录的第二种流程示意图。
63.图2为本技术实施例提供的数据记录的存储装置的结构示意图;
64.图3为本技术实施例提供的电子设备的结构示意图。
具体实施方式
65.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
66.请参阅图1a,图1a为本技术实施例所提供的数据记录的存储方法的系统示意图,该系统可以包括至少一个客户端1000,至少一个电子设备2000,至少一个数据库3000,以及网络4000。客户端1000可以为手机、电脑或个人数字助理等设备,电子设备2000与客户端1000可通过网络4000建立连接,电子设备2000可用于向客户端1000提供游戏中的游戏任务,游戏画面等资源信息。其中,网络4000可以是无线网络或者有线网络,比如无线网络为无线局域网(wlan)、局域网(lan)、蜂窝网络、2g网络、3g网络、4g网络、5g网络等。另外,该系统可以包括数据库3000,数据库3000可用于存储用户在客户端1000内操控的虚拟角色的任务完成情况以及游戏道具等数据记录等。
67.本技术实施例提供了一种数据记录的存储方法,该方法可以由电子设备执行。如图1a所示,电子设备2000获取多个待存储的数据记录,每一所述数据记录包括记录标号以及记录值;当所述数据记录的记录类型为第一类型时,基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组;将各数据记录组中的数据记录存储至对应的存储区域,并记录每一存储区域中的数据记录对应的记录值;基于所述分组参数以及所述记录标号对所述存储区域进行分组,得到多个存储区域组;遍历每一存储区域组中存储区域,筛选出记录值一致性符合预设条件的目标存储区域;记录所述目标存储区域所处的目标存储区域组的目标组编号以及在所述目标存储区域组中所述目标存储区域的目标存储区域序号,并清除所述目标存储区域中的数据记录。
68.需要说明的是,图1a所示的数据记录的存储方法的系统示意图仅仅是一个示例,
本技术实施例描述的数据记录的存储系统以及场景是为了更加清楚的说明本技术实施例的技术方案,并不构成对于本技术实施例提供的技术方案的限定,本领域普通技术人员可知,随着数据记录的存储系统的演变和新业务场景的出现,本技术实施例提供的技术方案对于类似的技术问题,同样适用。
69.在本实施例中,将从数据记录的存储装置的角度进行描述,该数据记录的存储装置具体可以集成在具备储存单元并安装有微处理器而具有运算能力的电子设备中。
70.请参阅图1b,图1b为本技术实施例提供的数据记录的存储方法的流程示意图。该数据记录的存储方法包括:
71.在步骤101中,获取多个待存储的数据记录,每一所述数据记录包括记录标号以及记录值。
72.其中,针对于不同的系统,数据记录用于记录不同内容,针对于游戏系统,数据记录可用于记录用户所操控的虚拟角色的任务完成情况,以及虚拟角色所持有的游戏道具的道具数量;针对于订单系统,数据记录可用于记录订单的订阅数量或完成数量等。
73.具体的,记录标号为数据记录的记录id,用于区分不同种类的数据记录。例如,针对于游戏系统,记录标号1代表游戏任务a,记录标号2代表游戏任务b;记录值用于表示记录标号所对应的数值,例如,针对于游戏系统,记录标号1对应的记录值为1,记录标号2对应的记录值为2,则代表游戏任务a已经完成,游戏任务b未完成。除了上述通过0或1来代表游戏任务的完成情况,记录值还可以用于记录游戏道具的数量,例如记录标号3对应的记录值为3,则代表记录标号3所对应的游戏道具的数量为3个。
74.在步骤102中,当所述数据记录的记录类型为第一类型时,基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组。
75.其中,针对于记录值存在0或1,以及超过1的不同情况,可以将数据记录的记录类型进行分类,将记录值仅存在0或1,或者记录值小于1的记录值所对应的数据记录划分为第一类型的记录类型;将记录值超过1或者不仅存在0或1的数据记录值划分为第二类型的记录类型。例如,将通过记录值用0或1的方式来记录游戏任务是否完成的数据记录的记录类型划分为第一类型,将通过记录值来记录游戏道具的数量的数据记录的记录类型划分为第二类型。此外,若记录值表示的游戏道具的数量小于或等于1,则也可以将该数据记录的记录类型划分为第一类型。
76.具体的,当待存储的数据记录的记录类型为第一类型时,基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组。
77.在一些实施方式中,所述基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组的步骤,包括:
78.(1)按照记录标号从小到大的顺序对数据记录进行排序,得到排序后数据记录;
79.(2)按照分组参数对所述排序后数据记录进行划分,得到多个数据记录组。
80.其中,对数据记录进行分组的方式为:基于每一数据记录的记录标记对数据记录进行排序,例如,按照记录标记从小到大的顺序进行排序,或按照记录标记从大到小的顺序进行排序,从而得到排序后数据记录。分组参数为指示将多少个数据记录划分为一组,例如分组参数为64,则将64个数据记录划分为一组,分组参数为32,则将32个数据记录划分为一组,从而得到多个数据记录组。
81.在步骤103中,将各数据记录组中的数据记录存储至对应的存储区域,并记录每一存储区域中的数据记录对应的记录值。
82.其中,针对于多个数据记录组,可为每一数据记录组划分出其对应的存储区域,从而将每一数据记录组中的数据记录存储至对应的存储区域中。例如,存在64个数据记录组,则可以从剩余可用的存储空间中划分出64个存储区域,划分的方式可以为对剩余存储空间进行64等分,或者指定划分的存储区域的大小,从而按照指定大小划分出64个存储区域,具体的存储区域划分方式此处不做限定。数据记录存储至对应的存储区域中的方式可以为:按照数据记录组中的数据记录的排序顺序依次存储。
83.具体的,在将数据记录组中的数据记录存储至对应的存储区域的过程中,或者之后,还需要记录每一存储区间中存储的数据记录的数据值。记录的方式可以包括按照数据记录组中存储的数据记录顺序进行依次记录,从而保证记录的记录值与数据记录组中的数据记录的顺序保持一致。
84.在一些实施方式中,所述记录每一存储区域中数据记录组中的数据记录对应的记录值的步骤,包括:
85.通过比特位对每一存储区域中数据记录组中的数据记录对应的记录值进行二进制表示,得到各存储区域对应的存储区域掩码。
86.其中,记录每一存储区间中存储的数据记录的数据值的记录方式还可以包括通过比特位对每一存储区域中数据记录组中的数据记录对应的记录值进行二进制表示,并将标识的内容作为当前记录的存储区域的存储区域掩码。
87.例如,如果记录标记1对应的记录值和记录标记63对应的记录值为1,其余数据记录的记录值为0,则可以通过64个比特位以二进制的方式表示为:0b1000000000000000000000000000000000000000000000000000000000000010。也即为记录标记0对应的数据记录至记录标记63的数据记录的存储区域的存储区域掩码。
88.在步骤104中,基于所述分组参数以及所述记录标号对所述存储区域进行分组,得到多个存储区域组。
89.其中,由于针对不同的数据记录组存储至不同的存储区域中,故存在多个不同的存储区域。继续对多个不同的存储区域进行分组,对存储区域进行分组的分组方式为根据分组参数以及所述记录标号对所述存储区域进行分组,得到多个存储区域组。
90.在一些实施方式中,所述基于所述分组参数以及所述记录标号对存储区域进行分组,得到多个存储区域组的步骤,包括:
91.(1)获取每一存储区域中指定位置的数据记录的记录标号,按照记录标号从小到大的顺序对存储区域进行排序,得到排序后存储区域;
92.(2)按照分组参数对所述排序后存储区域进行划分,得到多个存储区域组。
93.其中,对存储区域进行分组的方式可以包括获取存储区域中指定位置的数据记录的记录标号,指定位置用于指示各存储区域中指定序号的数据记录,例如获取各存储区域中序号为1,也即第一个数据记录的记录标号。虽然各存储区域均存在序号为1的数据记录,但实际数据记录所对应的记录标记是不同的,例如,存储区域1中序号为1的数据记录的记录标记为0,存储区域2中序号为1的数据记录的记录标记为64。从而根据记录标号从小到大的顺序对存储区域进行排序,得到排序后存储区域。
94.具体的,继续按照分组参数对排序后存储区域进行分组,例如分组参数为64,则将64个排序后存储区域划分为一组,得到多个存储区域组。
95.在步骤105中,遍历每一存储区域组中存储区域,筛选出记录值一致性符合预设条件的目标存储区域。
96.其中,记录值一致性是指存储区域中的数据记录的记录值全部相同。依次查看每一存储区域组中的每一存储区域,筛选出记录值全部相同,且符合预设条件的目标存储区域。预设条件为记录值全部为0,或者预设条件即为记录值全部为1。
97.在一些实施方式中,所述遍历每一存储区域组中存储区域,筛选出记录值符合预设条件的目标存储区域的步骤,包括:
98.遍历每一存储区域组中存储区域对应的存储区域掩码,筛选出存储区域掩码为预设存储区域掩码的目标存储区域。
99.其中,针对于记录各存储区域的数据记录的数据值的方式为通过比特位对每一存储区域中数据记录组中的数据记录对应的记录值进行二进制表示的方式,筛选目标存储区域的方式可以为遍历每一存储区域组中存储区域对应的存储区域掩码,筛选出存储区域掩码为预设存储区域掩码的目标存储区域。
100.例如,需要寻找的存储区域中的数据记录对应的记录值均为1的目标存储区域,则转换为对应的比特位二进制表示即为111111111111111111111111111111111111111111111111111111111111111111,从而可以通过比对各存储区域对应的存储区域掩码与预设存储区域掩码,将存储区域掩码与预设存储区域掩码相同的存储区域确定为目标存储区域。
101.在一些实施方式中,筛选目标存储区域的方式还可以为设定存储区域中的记录值一致性符合预设条件,则记录该存储区域为1,不符合则为0,通过比特位对每一存储区域组中的存储区域进行二进制表示,从而得到针对于每一存储区域组的存储区域组掩码。将存储区域组掩码中为1的位置所对应的存储区域确定为目标存储区域。
102.在步骤106中,记录所述目标存储区域所处的目标存储区域组的目标组编号以及在所述目标存储区域组中所述目标存储区域的目标存储区域序号,并清除所述目标存储区域中的数据记录。
103.其中,在筛选出目标存储区域后,需要记录目标存储区域所处的目标存储区域组的目标组编号以及在所述目标存储区域组中所述目标存储区域的目标存储区域序号,从而在记录的过程中或者之后,清除目标存储区域中的数据记录。在清除后,可以将目标存储区域与剩余存储空间进行融合,以便于后续继续划分。亦可以保留目标存储区域,此处不做限定。
104.例如,当目标存储区域所述的目标存储区域组在多个存储区域组中的编号为3,且目标存储区域在目标存储区域组中为第2个,则3即为目标组编号,2即为目标存储区域序号。
105.假定分组参数为64,通过将64个数据记录使用比特位存储放到一个存储区域中,相对于现有技术的哈希表存储,存储空间缩小了64倍;当64个存储空间均存有数据记录,且64*64=4096条数据记录的记录值均为1时,仅使用一个64位整数标记,相对于哈希表存储,存储空间缩小了4096倍,相对于比特数组存储,存储空间缩小了64倍。
106.在一些实施方式中,在所述清除所述目标存储区域中的数据记录的步骤之后,还
包括:
107.(1)接收查询请求,所述查询请求携带有待查询数据记录的待查询记录标号;
108.(2)计算所述待查询记录标号的标号值与所述分组参数的比值,得到第一计算结果;
109.(3)对所述第一计算结果进行取整处理,得到第一取整值,并以所述第一取整值确定为所述待查询记录标号所处的待查询存储区域的存储区域编号;
110.(4)计算所述待查询记录标号与所述分组参数的比值,将得到的余数确定为所述待查询数据记录在所述待查询存储区域中的数据记录序号;
111.(5)计算所述存储区域编号与所述分组参数的比值,得到第二计算结果;
112.(6)对所述第二计算结果进行取整处理,得到第二取整值,并以所述第二取整值确定为所述待查询存储区域所处的待查询存储区域组的组编号;
113.(7)计算所存储区域编号与所述分组参数的比值,将得到的余数确定为所述待查询存储区域在所述待查询存储区域组中的存储区域序号;
114.(8)基于所述数据记录序号、待查询存储区域组的组编号以及所述存储区域序号,对所述待查询记录标号进行查询。
115.其中,针对于对存储区域内的数据记录进行删除、查找以及修改的操作,均需要先查询待查询数据记录的待查询数据所对应的待查询记录标记在哪一存储区域组以及在存储区域组中的哪一存储区域的哪一个。而查询方式可以通过先获取查询请求中携带的待查询数据记录的待查询记录标号,从而根据记录标号来确定待查询数据记录处于哪一存储区域组以及在存储区域组中的哪一存储区域的哪一个。
116.具体的,根据记录标号来查询的方式为计算所述待查询记录标号的标号值与所述分组参数的比值,得到第一计算结果,并对第一计算结果进行取整处理,得到的第一取整值即为待查询记录标号所处的待查询存储区域的存储区域编号。
117.例如,待查询记录标号为4097,分组参数为64,则计算4097与64的比值,取整后得到64。64即为存储区域的编号,应当注意,存储区域的编号为从0开始记录,故编号为64的存储区域实际上为第65个存储区域。
118.其中,计算所述待查询记录标号与所述分组参数的比值,将得到的余数确定为所述待查询数据记录在所述待查询存储区域中的数据记录序号。
119.例如,待查询记录标号为4097,分组参数为64,则计算4097与64的比值,余数为1。1即为待查询数据记录在所述待查询存储区域(编号为64的存储区域)中的数据记录序号。
120.其中,在确定了待查询数据记录所处的待查询存储区域以及在待查询存储区域的存储序号后,还需要计算所述存储区域编号与所述分组参数的比值,得到第二计算结果,对所述第二计算结果进行取整处理,得到第二取整值,并以所述第二取整值确定为所述待查询存储区域所处的待查询存储区域组的组编号。将得到的余数确定为所述待查询存储区域在所述待查询存储区域组中的存储区域序号。
121.例如,存储区域编号为65,分组参数为64,则第二计算结果为65与64的比值为1,取整处理后还是为1,1即为待查询存储区域所处的待查询存储区域组的组编号。余数1即为待查询存储区域在所述待查询存储区域组中的存储区域序号。
122.其中,在计算得到数据记录序号、待查询存储区域组的组编号以及所述存储区域
序号后,可根据数据记录序号、待查询存储区域组的组编号以及所述存储区域序号对待查询记录标号进行查询。
123.在一些实施方式中,所述基于所述数据记录序号、待查询存储区域组的组编号以及所述存储区域序号,对所述待查询记录标号进行查询的步骤,包括:
124.(1.1)确定是否记录有所述待查询存储区域组的组编号;
125.(1.2)若记录有所述待查询存储区域组的组编号,则确定是否记录有所述待查询存储区域组内所述存储区域序号;
126.(1.3)若记录有所述待查询存储区域组内所述存储区域序号,则返回预设数值。
127.其中,由于针对于记录值一致性符合预设条件的目标存储区域记录有目标存储区域组的目标组编号以及在所述目标存储区域组中所述目标存储区域的目标存储区域序号,故可优先确定是否记录有所述待查询存储区域组的组编号,若记录有该组编号,则继续确定是否记录了待查询存储区域组内所述存储区域序号,若记录了,则说明待查询数据记录的待查询记录标号处于符合记录值一致性符合预设条件的目标存储区域,则可以直接返回预设数值。
128.具体的,预设数值和筛选目标存储区域的预设条件是对应的,若预设条件是存储区域中的所有数据记录的记录值均为0,则预设数值对应也为0;若预设条件是存储区域中的所有数据记录的记录值均为1,则预设数值对应也为1。
129.在一些实施方式中,所述方法还包括:
130.(1.1)若未记录有所述待查询存储区域组的组编号,或未记录有所述待查询存储区域组内所述存储区域序号,则查找所述待查询存储区域组内所述存储区域序号的存储区域;
131.(1.2)提取所述存储区域中数据记录序号对应的数据记录,返回所述数据记录对应的记录值。
132.其中,若历史未记录过待查询存储区域组的组编号,或未记录过待查询存储区域组的组编号以及所述待查询存储区域组内所述存储区域序号,或者记录有待查询存储区域组的组编号,但未记录所述待查询存储区域组内所述存储区域序号,则说明待查询存储区域不属于目标存储区域,则直接根据待查询存储区域组的组编号以及所述存储区域序号找到对应的待查询存储区域,并根据数据记录序号从待查询存储区域中提取出对应序号的数据记录,并返回该数据记录对应的记录值。
133.在一些实施方式中,所述方法还包括:
134.(1)接收添加请求,所述添加请求携带有待添加数据记录的待添加记录标号以及待添加记录值;
135.(2)获取所述待添加数据记录的数据类型;
136.(3)若所述待添加数据记录的数据类型为第二类型,则建立所述待添加记录标号与所述待添加记录值的映射关系,并存储所述待添加数据记录。
137.其中,若接收到添加请求,则确定待添加数据记录的数据类型,若数据类型为记录值超过1或者不仅存在0或1的数据记录值的第二类型,则可以建立待添加记录标号与所述待添加记录值的映射关系,并存储所述待添加数据记录。
138.具体的,建立映射关系的方式可以为以待添加数据记录的记录标号为键(key),待
添加数据记录的记录值为值(value),形成键值对的映射关系,并存储至映射关系表中。存储待添加数据记录时可以直接存储剩余存储空间中。
139.其中,还可以新建立两张映射关系表,一张用于记录各存储区域编号与对应存储的数据记录的记录值(bucket_mask)的对应关系(buckets_map),另一张用于记录各存储区域的存储区域编号与对应的存储区域掩码(full_mask)的对应关系(full_masks_map)。
140.具体的,针对于上述的映射关系表,键序列化时存储为字符串,反序列化则转换为对应整数值;对于哈希表的值,full_masks_map中的值full_mask、buckets_map中的值bucket_mask,采用独立序列化和反序列化方法。
141.bucket_mask和full_mask,本身是64位二进制比特,在内存中可以对应一个64为无符号整数。在序列化时由于数据库中,例如mongodb(一个基于分布式文件存储的数据库)中,不支持64位无符号数,仅支持64位有符号存储,需要将对应的无符号数转换为有符号数存储,反序列化时将有符号数再转换为无符号数。
142.对于n个比特有符号数n,转换为无符号数n,定义encode_max_mask=2的n次方;对于n个比特无符号数n转换为有符号数n,定义encode_max_int=2的n-1次方结果减1。bucket_mask和full_mask反序列化方法即使用这种方式。
143.由上述可知,本技术实施例通过获取多个待存储的数据记录,每一所述数据记录包括记录标号以及记录值;当所述数据记录的记录类型为第一类型时,基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组;将各数据记录组中的数据记录存储至对应的存储区域,并记录每一存储区域中的数据记录对应的记录值;基于所述分组参数以及所述记录标号对所述存储区域进行分组,得到多个存储区域组;遍历每一存储区域组中存储区域,筛选出记录值一致性符合预设条件的目标存储区域;记录所述目标存储区域所处的目标存储区域组的目标组编号以及在所述目标存储区域组中所述目标存储区域的目标存储区域序号,并清除所述目标存储区域中的数据记录。以此,通过清除记录值一致性符合预设条件的目标存储区域中的数据记录的方式,从而降低数据记录占用的存储空间,避免对长期运营造成很大负担。
144.其中,如图1c所示,图1c为本技术实施例提供的存储第一类型的数据记录的示意图。图1c中将存储桶表示存储区域,将记录id按照数值大小,分组参数(n个)为一组分到一个存储桶(bucket)中,不同记录id可能分配到不同的桶中,每个桶分配一个编号bucket_index。每个桶中的一个记录id,分配一个比特,比特值为0或1,表示记录id对应的值0或1。n个记录为一组,则桶中记录最多需要n个比特,称之为bucket_mask。当一个桶中n个记录值全部为1,则称桶满了。
145.例如n=64时,则id在[0,63]范围内的整型记录,分配在桶编号0的桶中,记录id在[64,127]范围内的整型记录,分配在桶编号1的桶中,桶分配规则依次类推。编号0的桶中,如果记录id=1和id=63的记录值为1,其余记录的记录值为0,则64个比特bucket_mask二进制表示为:0b1000000000000000000000000000000000000000000000000000000000000010。
[0146]
桶本身按照编号大小,同样n个分为一组,最多使用n个比特,称之为full_mask作为掩码,标记每个桶是否满了。当桶满了时,只保留full_mask记录,而移除bucket本身的记录。
[0147]
例如n=64时,如果id在[64,127]范围内的整型记录对应的记录值均为1,则移除编号1所对应的桶记录,同时计算到桶编号1对应的full_mask编号为1/64=0,则添加编号为0的full_mask,full_mask二进制表示为:0b10。
[0148]
其中,如图1d所示,图1d为本技术实施例提供的根据数据记录id确定数据记录对应的存储位置的示意图。当接收到携带有数据记录的id的增删查改请求时,通过id对应的value(id值)除以桶大小n得到对应的所在桶编号bucket_index(分组编号)、通过value对桶大小n求模运算得到桶内序号bucket_inner_order(分组内序号)。通过bucket_index除以桶大小n得到掩码分组序号mask_index,通过bucket_index对桶大小n求模运算得到掩码的分组内部序号mask_order。
[0149]
其中,如图1e所示,图1e为本技术实施例提供的确定数据记录是否存储在存储区域的示意图。当接收到携带有数据记录的id的增删查改请求时,判断输入值key(id值)是否为正整数,如不是则报错,返回false。第二步计算key对应的桶编号bucket_index、桶内序号bucket_inner_order、掩码分组编号mask_index、掩码分组内部序号mask_order。第三步,先判断mask_index是否在掩码存储的full_mask_map中,如果是则取出对应的值full_mask,full_mask中当前mask_order对应序号的比特如果为1,则说明key所在的桶满了,则key一定存在,返回true。第四步,从存储bucket_mask的bucket_map中取出bucket_index对应的桶掩码值bucket_mask,如果对应的bucket_inner_order比特值为1,则说明key在桶内,返回true。其余情况,则桶内均不存在key,返回false。
[0150]
其中,如图1f以及图1g所示,图1f为本技术实施例提供的增添数据记录的第一种流程示意图,图1g为本技术实施例提供的增添数据记录的第二种流程示意图。当接收到携带有数据记录的id的增填请求时,第一步,判断输入key(id值)是否为正整数,如不是则报错,返回false,表示添加失败。第二步,判断key是否已经在桶内,如是返回false。第三步,计算key对应的桶编号bucket_index、桶内序号bucket_inner_order、掩码分组编号mask_index、掩码分组内部序号mask_order。第四步,从bucket_map中取出bucket_index对应的bucket_mask,默认值为0,修改bucket_inner_order对应比特为1。第五步,检测修改后的bucket_mask对应比特中是否每一位都为1,即等于bit_mask_max,若是,则将bucket_map中bucket_index对应记录清除,同时在full_mask_map中将mask_index对应的full_mask中mask_order对应比特置为1,表示key值写入了,返回true。若不是,则返回true。
[0151]
其中,如图1h以及图1i所示,图1h为本技术实施例提供的移除数据记录的第一种流程示意图,图1i为本技术实施例提供的移除数据记录的第二种流程示意图。当接收到携带有数据记录的id的移除填请求时,第一步,判断输入key是否为正整数,如不是则报错,返回false,表示移除失败。第二步计算key对应的桶编号bucket_index、桶内序号bucket_inner_order、掩码分组编号mask_index、掩码分组内部序号mask_order。第三步,从full_mask_map中取出mask_index对应的full_mask,full_mask值是每个比特均为1(桶满了),是则将full_mask中mask_order对应的比特置为0,同时bucket_map中增加一个bucket_mask,bucket_mask的值除了bucket_inner_order对应比特置为0,其余比特均为1,返回true,表示移除成功。第四步,从bucket_map中取出bucket_index对应的bucket_mask,如果不存在这个bucket_mask或者bucket_mask中bucket_inner_order对应的比特值为0,则表示key值不存在,返回false。第五步,修改bucket_mask中bucket_inner_order对应比特为0。第六
步,检查修改后的bucket_mask的值,如果为0,则从bucket_map中移除bucket_index对应的记录。第七步,返回true。
[0152]
为便于更好的实施本技术实施例提供的数据记录的存储方法,本技术实施例还提供一种基于上述数据记录的存储方法的装置。其中名词的含义与上述数据记录的存储方法中相同,具体实现细节可以参考方法实施例中的说明。
[0153]
请参阅图2,图2为本技术实施例提供的数据记录的存储装置的结构示意图,其中该数据记录的存储装置可以包括第一获取模块301、第一分组模块302、第一记录模块303、第二分组模块304、筛选模块305以及第二记录模块306等。
[0154]
第一获取模块301,用于获取多个待存储的数据记录,每一所述数据记录包括记录标号以及记录值;
[0155]
第一分组模块302,用于当所述数据记录的记录类型为第一类型时,基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组;
[0156]
第一记录模块303,用于将各数据记录组中的数据记录存储至对应的存储区域,并记录每一存储区域中的数据记录对应的记录值;
[0157]
第二分组模块304,用于基于所述分组参数以及所述记录标号对所述存储区域进行分组,得到多个存储区域组;
[0158]
筛选模块305,用于遍历每一存储区域组中存储区域,筛选出记录值一致性符合预设条件的目标存储区域;
[0159]
第二记录模块306,用于记录所述目标存储区域所处的目标存储区域组的目标组编号以及在所述目标存储区域组中所述目标存储区域的目标存储区域序号,并清除所述目标存储区域中的数据记录。
[0160]
在一些实施方式中,所述第一分组模块302,包括:
[0161]
第一排序子模块,用于按照记录标号从小到大的顺序对数据记录进行排序,得到排序后数据记录;
[0162]
第一划分子模块,用于按照分组参数对所述排序后数据记录进行划分,得到多个数据记录组。
[0163]
在一些实施方式中,所述第二分组模块304,包括:
[0164]
第二排序子模块,用于获取每一存储区域中指定位置的数据记录的记录标号,按照记录标号从小到大的顺序对存储区域进行排序,得到排序后存储区域;
[0165]
第二分组子模块,用于按照分组参数对所述排序后存储区域进行划分,得到多个存储区域组。
[0166]
在一些实施方式中,所述装置,还包括:
[0167]
第一接收模块,用于接收查询请求,所述查询请求携带有待查询数据记录的待查询记录标号;
[0168]
第一计算模块,用于计算所述待查询记录标号的标号值与所述分组参数的比值,得到第一计算结果;
[0169]
第一取整模块,用于对所述第一计算结果进行取整处理,得到第一取整值,并以所述第一取整值确定为所述待查询记录标号所处的待查询存储区域的存储区域编号;
[0170]
第二计算模块,用于计算所述待查询记录标号与所述分组参数的比值,将得到的
余数确定为所述待查询数据记录在所述待查询存储区域中的数据记录序号;
[0171]
第三计算模块,用于计算所述存储区域编号与所述分组参数的比值,得到第二计算结果;
[0172]
第二取整模块,用于对所述第二计算结果进行取整处理,得到第二取整值,并以所述第二取整值确定为所述待查询存储区域所处的待查询存储区域组的组编号;
[0173]
第四计算模块,用于计算所存储区域编号与所述分组参数的比值,将得到的余数确定为所述待查询存储区域在所述待查询存储区域组中的存储区域序号;
[0174]
查询模块,用于基于所述数据记录序号、待查询存储区域组的组编号以及所述存储区域序号,对所述待查询记录标号进行查询。
[0175]
在一些实施方式中,所述查询模块,包括:
[0176]
第一确定模块,用于确定是否记录有所述待查询存储区域组的组编号;
[0177]
第二确定模块,用于若记录有所述待查询存储区域组的组编号,则确定是否记录有所述待查询存储区域组内所述存储区域序号;
[0178]
返回模块,用于若记录有所述待查询存储区域组内所述存储区域序号,则返回预设数值。
[0179]
在一些实施方式中,所述查询模块,还包括:
[0180]
查找子模块,用于若未记录有所述待查询存储区域组的组编号,或未记录有所述待查询存储区域组内所述存储区域序号,则查找所述待查询存储区域组内所述存储区域序号的存储区域;
[0181]
提取子模块,用于提取所述存储区域中数据记录序号对应的数据记录,返回所述数据记录对应的记录值。
[0182]
在一些实施方式中,所述第一记录模块303,包括:
[0183]
二进制表示子模块,用于通过比特位对每一存储区域中数据记录组中的数据记录对应的记录值进行二进制表示,得到各存储区域对应的存储区域掩码;
[0184]
所述筛选模块305,包括:
[0185]
筛选子模块,用于遍历每一存储区域组中存储区域对应的存储区域掩码,筛选出存储区域掩码为预设存储区域掩码的目标存储区域。
[0186]
在一些实施方式中,所述装置,还包括:
[0187]
第二接收模块,用于接收添加请求,所述添加请求携带有待添加数据记录的待添加记录标号以及待添加记录值;
[0188]
第二获取模块,用于获取所述待添加数据记录的数据类型;
[0189]
建立模块,用于若所述待添加数据记录的数据类型为第二类型,则建立所述待添加记录标号与所述待添加记录值的映射关系,并存储所述待添加数据记录。
[0190]
由上述可知,本技术实施例通过第一获取模块301获取多个待存储的数据记录,每一所述数据记录包括记录标号以及记录值;第一分组模块302当所述数据记录的记录类型为第一类型时,基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组;第一记录模块303将各数据记录组中的数据记录存储至对应的存储区域,并记录每一存储区域中的数据记录对应的记录值;第二分组模块304基于所述分组参数以及所述记录标号对所述存储区域进行分组,得到多个存储区域组;筛选模块305遍历每一存储区域组
中存储区域,筛选出记录值一致性符合预设条件的目标存储区域;第二记录模块306记录所述目标存储区域所处的目标存储区域组的目标组编号以及在所述目标存储区域组中所述目标存储区域的目标存储区域序号,并清除所述目标存储区域中的数据记录。以此,通过清除记录值一致性符合预设条件的目标存储区域中的数据记录的方式,从而降低数据记录占用的存储空间,避免对长期运营造成很大负担。
[0191]
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
[0192]
相应的,本技术实施例还提供一种电子设备,如图3所示,图3为本技术实施例提供的电子设备的结构示意图。该电子设备2000包括有一个或者一个以上处理核心的处理器401、有一个或一个以上计算机可读存储介质的存储器402及存储在存储器402上并可在处理器上运行的计算机程序。其中,处理器401与存储器402电性连接。本领域技术人员可以理解,图中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0193]
处理器401是电子设备2000的控制中心,利用各种接口和线路连接整个电子设备2000的各个部分,通过运行或加载存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行电子设备2000的各种功能和处理数据,从而对电子设备2000进行整体监控。
[0194]
在本技术实施例中,电子设备2000中的处理器401会按照如下的步骤,将一个或一个以上的应用程序的进程对应的指令加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能:
[0195]
获取多个待存储的数据记录,每一所述数据记录包括记录标号以及记录值;当所述数据记录的记录类型为第一类型时,基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组;将各数据记录组中的数据记录存储至对应的存储区域,并记录每一存储区域中的数据记录对应的记录值;基于所述分组参数以及所述记录标号对所述存储区域进行分组,得到多个存储区域组;遍历每一存储区域组中存储区域,筛选出记录值一致性符合预设条件的目标存储区域;记录所述目标存储区域所处的目标存储区域组的目标组编号以及在所述目标存储区域组中所述目标存储区域的目标存储区域序号,并清除所述目标存储区域中的数据记录。
[0196]
在一些实施例中,所述基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组,处理器401还用于执行以下步骤:
[0197]
按照记录标号从小到大的顺序对数据记录进行排序,得到排序后数据记录;
[0198]
按照分组参数对所述排序后数据记录进行划分,得到多个数据记录组。
[0199]
在一些实施例中,所述基于所述分组参数以及所述记录标号对存储区域进行分组,得到多个存储区域组,处理器401还用于执行以下步骤:
[0200]
获取每一存储区域中指定位置的数据记录的记录标号,按照记录标号从小到大的顺序对存储区域进行排序,得到排序后存储区域;
[0201]
按照分组参数对所述排序后存储区域进行划分,得到多个存储区域组。
[0202]
在一些实施例中,在所述清除所述目标存储区域中的数据记录,处理器401还用于执行以下步骤:
[0203]
接收查询请求,所述查询请求携带有待查询数据记录的待查询记录标号;
[0204]
计算所述待查询记录标号的标号值与所述分组参数的比值,得到第一计算结果;
[0205]
对所述第一计算结果进行取整处理,得到第一取整值,并以所述第一取整值确定为所述待查询记录标号所处的待查询存储区域的存储区域编号;
[0206]
计算所述待查询记录标号与所述分组参数的比值,将得到的余数确定为所述待查询数据记录在所述待查询存储区域中的数据记录序号;
[0207]
计算所述存储区域编号与所述分组参数的比值,得到第二计算结果;
[0208]
对所述第二计算结果进行取整处理,得到第二取整值,并以所述第二取整值确定为所述待查询存储区域所处的待查询存储区域组的组编号;
[0209]
计算所存储区域编号与所述分组参数的比值,将得到的余数确定为所述待查询存储区域在所述待查询存储区域组中的存储区域序号;
[0210]
基于所述数据记录序号、待查询存储区域组的组编号以及所述存储区域序号,对所述待查询记录标号进行查询。
[0211]
在一些实施例中,所述基于所述数据记录序号、待查询存储区域组的组编号以及所述存储区域序号,对所述待查询记录标号进行查询,处理器401还用于执行以下步骤:
[0212]
确定是否记录有所述待查询存储区域组的组编号;
[0213]
若记录有所述待查询存储区域组的组编号,则确定是否记录有所述待查询存储区域组内所述存储区域序号;
[0214]
若记录有所述待查询存储区域组内所述存储区域序号,则返回预设数值。
[0215]
在一些实施例中,处理器401还用于执行以下步骤:
[0216]
若未记录有所述待查询存储区域组的组编号,或未记录有所述待查询存储区域组内所述存储区域序号,则查找所述待查询存储区域组内所述存储区域序号的存储区域;
[0217]
提取所述存储区域中数据记录序号对应的数据记录,返回所述数据记录对应的记录值。
[0218]
在一些实施例中,所述记录每一存储区域中数据记录组中的数据记录对应的记录值,处理器401还用于执行以下步骤:
[0219]
通过比特位对每一存储区域中数据记录组中的数据记录对应的记录值进行二进制表示,得到各存储区域对应的存储区域掩码;
[0220]
所述遍历每一存储区域组中存储区域,筛选出记录值符合预设条件的目标存储区域的步骤,包括:
[0221]
遍历每一存储区域组中存储区域对应的存储区域掩码,筛选出存储区域掩码为预设存储区域掩码的目标存储区域。
[0222]
在一些实施例中,处理器401还用于执行以下步骤:
[0223]
接收添加请求,所述添加请求携带有待添加数据记录的待添加记录标号以及待添加记录值;
[0224]
获取所述待添加数据记录的数据类型;
[0225]
若所述待添加数据记录的数据类型为第二类型,则建立所述待添加记录标号与所述待添加记录值的映射关系,并存储所述待添加数据记录。
[0226]
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
[0227]
可选的,如图3所示,电子设备2000还包括:输入单元403以及电源404。其中,处理
器401分别与输入单元403以及电源404电性连接。本领域技术人员可以理解,图3中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0228]
输入单元403可用于接收输入的数字、字符信息或用户特征信息(例如指纹、虹膜、面部信息等),以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
[0229]
电源404用于给电子设备2000的各个部件供电。可选的,电源404可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源404还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
[0230]
尽管图3中未示出,电子设备2000还可以包括摄像头、传感器、无线保真模块、蓝牙模块等,在此不再赘述。
[0231]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0232]
由上可知,本实施例提供的电子设备可以获取多个待存储的数据记录,每一所述数据记录包括记录标号以及记录值;当所述数据记录的记录类型为第一类型时,基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组;将各数据记录组中的数据记录存储至对应的存储区域,并记录每一存储区域中的数据记录对应的记录值;基于所述分组参数以及所述记录标号对所述存储区域进行分组,得到多个存储区域组;遍历每一存储区域组中存储区域,筛选出记录值一致性符合预设条件的目标存储区域;记录所述目标存储区域所处的目标存储区域组的目标组编号以及在所述目标存储区域组中所述目标存储区域的目标存储区域序号,并清除所述目标存储区域中的数据记录。以此,通过清除记录值一致性符合预设条件的目标存储区域中的数据记录的方式,从而降低数据记录占用的存储空间,避免对长期运营造成很大负担。
[0233]
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
[0234]
为此,本技术实施例提供一种计算机可读存储介质,其中存储有多条计算机程序,该计算机程序能够被处理器进行加载,以执行本技术实施例所提供的任一种数据分析方法中的步骤。例如,该计算机程序可以执行如下步骤:
[0235]
获取多个待存储的数据记录,每一所述数据记录包括记录标号以及记录值;当所述数据记录的记录类型为第一类型时,基于分组参数以及所述记录标号对所述数据记录进行分组,得到多个数据记录组;将各数据记录组中的数据记录存储至对应的存储区域,并记录每一存储区域中的数据记录对应的记录值;基于所述分组参数以及所述记录标号对所述存储区域进行分组,得到多个存储区域组;遍历每一存储区域组中存储区域,筛选出记录值一致性符合预设条件的目标存储区域;记录所述目标存储区域所处的目标存储区域组的目标组编号以及在所述目标存储区域组中所述目标存储区域的目标存储区域序号,并清除所述目标存储区域中的数据记录。
[0236]
以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
[0237]
其中,该存储介质可以包括:只读存储器(rom,read only memory)、随机存取记忆体(ram,random access memory)、磁盘或光盘等。
[0238]
由于该存储介质中所存储的计算机程序,可以执行本技术实施例所提供的任一种数据记录的存储方法中的步骤,因此,可以实现本技术实施例所提供的任一种数据分析方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
[0239]
以上对本技术实施例所提供的一种数据记录的存储方法、装置、存储介质及电子设备进行了详细介绍,本文中应用了具体个例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1