数据同步方法、装置、计算机设备及存储介质与流程

文档序号:33383736发布日期:2023-03-08 07:08阅读:18来源:国知局
数据同步方法、装置、计算机设备及存储介质与流程

1.本技术实施例涉及数据处理技术领域,尤其涉及一种数据同步方法、装置、计算机设备及存储介质。


背景技术:

2.企业发展到一定阶段,会出现多个部门,每个部门都有各自的数据,部门之间的数据往往都各自存储和定义。每个部门的数据就像一个个孤岛一样无法或者极其困难和企业内部的其它数据进行连接互动。
3.针对这个问题,现有方法是构建数据中台或大数据系统,将企业内部各个部门的数据统一同步存储到数据中台或大数据系统,数据中台或大数据系统涉中及多个数据库之间的数据同步。在数据同步过程中,经常会遇到源数据库的表结构或表内容发生变化的情况,这给数据同步工作造成困难。
4.目前业内在数据同步过程中,遇到源数据库的表结构或表内容发生变化时,往往需要人工调整源数据库和目标数据库的表结构或表内容,该方法需要不断的人工干预,效率低,而且容易出现差错。


技术实现要素:

5.本技术实施例提供了一种基于数据同步方法、装置、计算机设备及存储介质,其可以提高数据同步效率和准确度,该技术方案如下:
6.第一方面,本技术实施例提供了一种数据同步方法,包括步骤:
7.接收针对源数据库和目标数据库的数据同步指令;
8.根据所述数据同步指令,将所述源数据库的源表的表结构和数据内容同步至所述目标数据库;
9.检测所述源表的表结构变更操作和/或数据内容表更操作,获取与所述表结构变更操作对应的第一ddl语句和/或所述数据内容表更操作的第一dml语句;
10.根据所述第一ddl语句,控制所述目标表的表结构变更为与变更后的源表的表结构相同,和/或,根据所述第一dml语句,控制所述目标表的数据内容变更为与变更后的源表的数据内容相同。
11.第二方面,本技术实施例提供了一种数据合同装置,包括:
12.指令接收模块,用于接收针对源数据库和目标数据库的数据同步指令;
13.表结构同步模块,用于根据所述数据同步指令,将所述源数据库的源表的表结构和数据内容同步至所述目标数据库;
14.变更操作检测模块,用于检测所述源表的表结构变更操作和/或数据内容表更操作,获取与所述表结构变更操作对应的第一ddl语句和/或所述数据内容表更操作的第一dml语句;
15.数据同步模块,用于根据所述第一ddl语句,控制所述目标表的表结构变更为与变
更后的源表的表结构相同,和/或,根据所述第一dml语句,控制所述目标表的数据内容变更为与变更后的源表的数据内容相同。
16.第三方面,本技术实施例提供了一种计算机设备,处理器、存储器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如第一方面方法的步骤。
17.第四方面,本技术实施例提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序被处理器执行时实现如第一方面方法的步骤。
18.本技术实施例接收针对源数据库和目标数据库的数据同步指令;根据所述数据同步指令,将所述源数据库的源表的表结构和数据内容同步至所述目标数据库;检测所述源表的表结构变更操作和/或数据内容表更操作,获取与所述表结构变更操作对应的第一ddl语句和/或所述数据内容表更操作的第一dml语句;根据所述第一ddl语句,控制所述目标表的表结构变更为与变更后的源表的表结构相同,和/或,根据所述第一dml语句,控制所述目标表的数据内容变更为与变更后的源表的数据内容相同,从而无需人工参与,用户只需要设置数据同步指令,即可实现源数据库和目标数据库之间的数据同步,从而提高了数据同步的效率和准确度。
19.为了更好地理解和实施,下面结合附图详细说明本技术的技术方案。
附图说明
20.图1为本技术一个实施例提供的数据同步方法的流程示意图;
21.图2为本技术实施例提供的数据同步方法中步骤s20的流程示意图;
22.图3为本技术一个实施例提供的数据同步方法中步骤s40的流程示意图;
23.图4为本技术另一个实施例提供的数据同步方法中步骤s40的流程示意图;
24.图5为本技术另一个实施例提供的数据同步方法的流程示意图;
25.图6为本技术实施例提供的数据同步装置的结构示意图;
26.图7为本技术实施例提供的计算机设备的结构示意图。
具体实施方式
27.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
28.在本技术使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术。在本技术和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
29.应当理解,尽管在本技术可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本技术范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”/“若”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
30.本技术实施例中提供的数据同步方法可以由数据同步设备执行,该数据同步设备可以通过软件和/或硬件的方式实现,该数据同步设备可以是两个或多个物理实体构成,也可以是一个物理实体构成。所述数据同步设备可以为任何安装数据处理软件的电子设备,所述电子设备可以是电脑、手机或平板等智能设备。
31.请参阅图1,图1为本技术第一实施例提供的数据同步方法的流程示意图,该方法包括如下步骤:
32.s10:接收针对源数据库和目标数据库的数据同步指令。
33.其中,数据同步指令是触发数据同步操作的指令。数据同步是将源数据库的数据同步至目标数据库。
34.在本技术实施例中,数据同步指令可以包括源数据库标识、目标数据库标识、待同步的数据表标识、数据同步模式以及数据同步开始时间等。其中,源数据库标识用于唯一标识源数据库,目标数据库标识用于唯一标识目标数据库,待同步的数据表标识用于唯一标识待同步的数据表,数据同步模式包括全量数据同步模式、增量数据同步模式以及全量数据和增量数据同步模式。
35.s20:根据数据同步指令,将源数据库的源表的表结构和数据内容同步至目标数据库。
36.其中,源数据库中包括一张或多张数据表,源表为源数据库中待同步的数据表。表结构包括数据表的表名称、表内字段数量、表内各字段名称以及表内各字段的字段类型。
37.在本技术实施例中,在接收到数据同步指令后,根据源数据库标识定位源数据库,根据待同步的数据表名称从源数据库中查询源表,获取源数据库中源表的表结构和数据内容,根据目标数据库标识定位目标数据库,将源数据库的源表的表结构和数据内容同步至目标数据库。
38.在一个可选的实施例中,若数据同步模式为全量数据同步模式,将源数据库中的全量数据复制到目标数据库中,具体地,将源数据库的源表的表结构和数据内容同步至目标数据库,完成全量数据的同步,不再执行步骤s30~s40。
39.在一个可选的实施例中,若数据同步模式为增量数据同步模式,将源数据库中的增量数据同步到目标数据库中,具体地,通过执行步骤s30~s40,完成增量数据的同步。
40.在一个可选的实施例中,若数据同步模式为全量数据和增量同步模式,先将源数据库中的全量数据复制到目标数据库中,再将增量数据同步到目标数据库中。
41.s30:检测源表的表结构变更操作和/或数据内容表更操作,获取与表结构变更操作对应的第一ddl语句和/或数据内容表更操作的第一dml语句。
42.其中,ddl是数据定义语言(data definition language)的缩写,可以对数据库内部的对象进行创建、删除、修改的操作语言。数据库发生数据表的表结构变更操作后,会生成与表结构变更操作对应的ddl语句,并将ddl语句保存至数据库的日志记录中。
43.dml是数据操作语言(data manipulation language)的缩写,可以对数据库中数据表的数据内容进行添加、修改、删除和查询的操作语言。数据库发生数据表的数据内容变更操作后,会生成与数据内容变更操作对应的dml语句,并将dml语句保存至数据库的日志记录中。
44.在本技术实施例中,若检测到源表的表结构变更操作,从日志记录中获取与表结构变更操作对应的第一ddl语句。若检测到源表的数据内容表更操作,从日志记录中获取与数据内容表更操作对应的第一dml语句。若同时检测到源表的表结构变更操作和源表的数据内容表更操作,从日志记录中获取与表结构变更操作对应的第一ddl语句以及与数据内容表更操作对应的第一dml语句。
45.s40:根据第一ddl语句,控制目标表的表结构变更为与变更后的源表的表结构相同,和/或,根据第一dml语句,控制目标表的数据内容变更为与变更后的源表的数据内容相同。
46.在本技术实施例中,可以直接将第一ddl语句发送给目标数据库,目标数据库执行第一ddl语句,将目标表的表结构变更为与变更后的源表的表结构相同,实现源数据库和目标数据库的表结构同步。可以直接将第一dml语句发送给目标数据库,目标数据库执行第一dml语句,将目标表的数据内容变更为与变更后的源表的数据内容相同,实现源数据库和目标数据库的数据内容同步。
47.在一个可选的实施例中,若源数据库和目标数据库的类型不相同,可以将第一ddl语句转换为目标数据库可以执行的ddl语句,将第一dml语句转换为目标数据库可以执行的dml语句,实现源数据库和目标数据库的表结构和数据内容同步。
48.应用本技术实施例,通过接收针对源数据库和目标数据库的数据同步指令;根据数据同步指令,将源数据库的源表的表结构和数据内容同步至目标数据库;检测源表的表结构变更操作和/或数据内容表更操作,获取与表结构变更操作对应的第一ddl语句和/或数据内容表更操作的第一dml语句;根据第一ddl语句,控制目标表的表结构变更为与变更后的源表的表结构相同,和/或,根据第一dml语句,控制目标表的数据内容变更为与变更后的源表的数据内容相同,从而无需人工参与,用户只需要设置数据同步指令,即可实现源数据库和目标数据库之间的数据同步,从而提高了数据同步的效率和准确度。
49.在一个可选的实施例中,请参阅图2,步骤s20包括步骤s21~s26,具体如下:
50.s21:根据数据同步指令,获取目标数据库的目标表的表结构;
51.s22:判断目标表的表结构与源表的表结构是否一致;
52.s23:若目标表的表结构与源表的表结构不一致,获取目标表的表结构与源表的表结构的差异比对结果。
53.在本技术实施例中,比对目标表与源表的表名称、字段名称以及字段类型,得到差异比对结果。具体地,差异比对结果包括表名称在源数据库中存在,不在目标数据库中存在、表名称在源数据库中不存在,在目标数据库中存在;表名称在源数据库中和目标数据库中均存在,某个字段或某些字段在源数据库中存在,不在目标数据库中存在;表名称在源数据库中和目标数据库中均存在,某个字段或某些字段在源数据库中不存在,在目标数据库中存在;表名称和字段在源数据库中和目标数据库中均存在,相应的字段类型不一致。
54.s24:根据差异比对结果,生成第三ddl语句。
55.在本技术实施例中,以差异比对结果为表名称在源数据库中和目标数据库中均存在,某个字段或某些字段在源数据库中存在,不在目标数据库中存在为例进行说明,例如字段a在源数据库的源表中,不在目标数据库的目标表中,自动生成增加字段a的ddl语句。若源数据库的类型与目标数据库的类型相同,将自动生成的增加字段a的ddl语句作为第三
ddl语句。若源数据库的类型与目标数据库的类型不相同,根据预设的ddl语句转换规则,将自动生成的增加字段a的ddl语句转换为目标数据库可以执行的第三ddl语句。
56.s25:根据第三ddl语句,将目标表的表结构变更为源表的表结构;
57.s26:将源数据库的数据内容同步至变更后的目标表中。
58.在本技术实施例中,在将源数据库的源表的表结构和数据内容同步至目标数据库之前,对目标表的表结构与源表的表结构的一致性进行检查,快速、准确的找到差异,提高了比对效率,实现了源数据库的数据内容同步至变更后的目标表。
59.在一个可选的实施例中,请参阅图3,步骤s40包括步骤s41~s43,具体如下:
60.s41:获取源数据库的类型与目标数据库的类型;
61.s42:若源数据库的类型与目标数据库的类型不相同,根据第一ddl语句,生成与目标数据库对应的第二ddl语句;
62.s43:将第二ddl语句发送至目标数据库,以使目标数据库将目标表的表结构变更为与变更后的源表的表结构相同。
63.在本技术实施例中,在进行数据表的表结构同步时,先判断源数据库的类型与目标数据库的类型是否相同。若源数据库的类型和目标数据库的类型不相同,目标数据库无法执行第一ddl语句,需要将第一ddl语句转换为第二ddl语句,第二ddl语句为目标数据库可以执行的ddl语句,目标数据库执行第二ddl语句,将目标表的表结构变更为与变更后的源表的表结构相同,实现源数据库和目标数据库的表结构同步。
64.若源数据库的类型和目标数据库的类型相同,无需对第一ddl语句进行转换,目标数据库执行第一ddl语句,将目标表的表结构变更为与变更后的源表的表结构相同,实现源数据库和目标数据库的表结构同步。
65.通过第一ddl语句,生成第二ddl语句,可以实现不同类型数据库之间的表结构同步。
66.在一个可选的实施例中,步骤s42包括步骤s421,具体如下:
67.s421:若源数据库的类型与目标数据库的类型不相同,根据预设的ddl语句转换规则,将第一ddl语句转换为与目标数据库对应的第二ddl语句。
68.在本技术实施例中,预设的ddl语句转换规则可以是源数据库的ddl语句和目标数据库的ddl语句的映射关系。具体地,映射关系包括数据表的表名称、表内各字段名称以及表内各字段的字段类型的映射关系。
69.通过预设的ddl语句转换规则,可以自动快捷地将第一ddl语句转换为与目标数据库对应的第二ddl语句。
70.在一个可选的实施例中,请参阅图4,步骤s40包括步骤s44~s46,具体如下:
71.s44:获取源数据库的类型与目标数据库的类型;
72.s45:若源数据库的类型与目标数据库的类型不相同,根据第一dml语句,生成与目标数据库对应的第二dml语句;
73.s46:将第二dml语句发送至目标数据库,以使目标数据库将目标表的数据内容变更为与变更后的源表的数据内容相同。
74.在本技术实施例中,在进行数据表的数据内容同步时,先判断源数据库的类型与目标数据库的类型是否相同。若源数据库的类型和目标数据库的类型不相同,目标数据库
无法执行第一dml语句,需要将第一dml语句转换为第二dml语句,第二dml语句为目标数据库可以执行的dml语句,目标数据库执行第二dml语句,将目标表的数据内容变更为与变更后的源表的数据内容相同,实现源数据库和目标数据库的数据内容同步。
75.若源数据库的类型和目标数据库的类型相同,无需对第一dml语句进行转换,目标数据库执行第一dml语句,将目标表的数据内容变更为与变更后的源表的数据内容相同,实现源数据库和目标数据库的数据内容同步。
76.通过第一dml语句,生成第二dml语句,可以实现不同类型数据库之间的数据内容同步。
77.在一个可选的实施例中,步骤s45包括步骤s452,具体如下:
78.s452:若源数据库的类型与目标数据库的类型不相同,根据预设的dml语句转换规则,将第一dml语句转换为与目标数据库对应的第二dml语句。
79.在本技术实施例中,预设的dml语句转换规则可以是源数据库的dml语句和目标数据库的dml语句的映射关系。具体地,映射关系包括添加、修改、删除和查询数据内容的映射关系。
80.通过预设的dml语句转换规则,可以自动快捷地将第一dml语句转换为与目标数据库对应的第二dml语句。
81.在一个可选的实施例中,请参阅图5,数据同步方法,包括步骤s51~s53,具体如下:
82.s51:检测数据同步过程;
83.s52:若数据同步出现异常中断,获取数据快照文件;
84.s53:根据数据快照文件,重启数据同步以实现数据同步的断点续传。
85.其中,数据快照文件是在数据拷贝过程中数据在某个时间点的映像文件,数据快照文件可以用于在线数据备份与恢复,当存储设备发生应用故障或者文件损坏时可以进行快速的数据恢复,将数据回滚到可用的时间点的状态。
86.在本技术实施例中,数据同步可以是全量数据同步,也可以增量数据同步,还可以是全量数据同步之后,进行增量数据同步。在数据同步过程中,根据预设的周期,生成全量数据或增量数据的数据快照文件。
87.检测数据同步,若全量数据或增量数据同步过程中出现异常中断,获取全量数据或增量数据的数据快照文件,从而重启数据同步时可以在异常中断的时间点继续数据同步,即恢复断点续传,而不需要将数据从头开始同步,提高了数据同步的效率。
88.在一个可选的实施例中,检测到数据同步停止指令,获取数据快照文件。其中,可以是基于在需要新增待同步的数据库或者数据表时,用户触发数据同步停止操作,生成数据同步停止指令。数据快照文件可以是当前时间点的数据快照文件,也可以是与当前时间点相隔预设的周期内的前一个时间点的数据快照文件。当前时间点为检测到数据同步停止指令对应的时间点。
89.检测到数据同步恢复指令,根据数据快照文件,重启数据同步以实现数据同步的断点续传。例如,预设的周期为1分钟,若在10:05:40检测到数据同步停止指令,在10:08:10检测到数据同步恢复指令,可以获取10:05:00时生成的数据快照文件,从而重启数据同步以实现数据同步的断点续传。
90.在一个可选的实施例中,检测到数据同步恢复指令,判断是否存在失败重试机制,若存在,根据数据快照文件,重启数据同步以实现数据同步的断点续传;若不存在,则发出报警信息。
91.请参阅图6,图6为本技术提供的数据同步装置的结构示意图。本技术实施例提供的数据同步装置6,包括:
92.指令接收模块61,用于接收针对源数据库和目标数据库的数据同步指令;
93.表结构同步模块62,用于根据数据同步指令,将源数据库的源表的表结构和数据内容同步至目标数据库;
94.变更操作检测模块63,用于检测源表的表结构变更操作和/或数据内容表更操作,获取与表结构变更操作对应的第一ddl语句和/或数据内容表更操作的第一dml语句;
95.数据同步模块64,用于根据第一ddl语句,控制目标表的表结构变更为与变更后的源表的表结构相同,和/或,根据第一dml语句,控制目标表的数据内容变更为与变更后的源表的数据内容相同。
96.应用本技术实施例,通过接收针对源数据库和目标数据库的数据同步指令;根据数据同步指令,将源数据库的源表的表结构和数据内容同步至目标数据库;检测源表的表结构变更操作和/或数据内容表更操作,获取与表结构变更操作对应的第一ddl语句和/或数据内容表更操作的第一dml语句;根据第一ddl语句,控制目标表的表结构变更为与变更后的源表的表结构相同,和/或,根据第一dml语句,控制目标表的数据内容变更为与变更后的源表的数据内容相同,从而无需人工参与,用户只需要设置数据同步指令,即可实现源数据库和目标数据库之间的数据同步,从而提高了数据同步的效率和准确度。
97.请参阅图7,为本技术提供的计算机设备的结构示意图。如图7所示,该计算机设备21可以包括:处理器210、存储器211以及存储在该存储器211并可以在该处理器210上运行的计算机程序212,例如:视频数据传输程序;该处理器210执行该计算机程序212时实现上述实施例中的步骤。
98.其中,该处理器210可以包括一个或多个处理核心。处理器210利用各种接口和线路连接计算机设备21内的各个部分,通过运行或执行存储在存储器211内的指令、程序、代码集或指令集,以及调用存储器211内的数据,执行计算机设备21的各种功能和处理数据,可选的,处理器210可以采用数字信号处理(digital signal processing,dsp)、现场可编程门阵列(field-programmable gate array,fpga)、可编程逻辑阵列(programble logic array,pla)中的至少一个硬件形式来实现。处理器210可集成中央处理器(central processing unit,cpu)、图像处理器(graphics processing unit,gpu)和调制解调器等中的一种或几种的组合。其中,cpu主要处理操作系统、用户界面和应用程序等;gpu用于负责触摸显示屏所需要显示的内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器210中,单独通过一块芯片进行实现。
99.其中,存储器211可以包括随机存储器(random access memory,ram),也可以包括只读存储器(read-only memory)。可选的,该存储器211包括非瞬时性计算机可读介质(non-transitory computer-readable storage medium)。存储器211可用于存储指令、程序、代码、代码集或指令集。存储器211可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于至少一个功能的指令(比如触控指令等)、用于实现
上述各个方法实施例的指令等;存储数据区可存储上面各个方法实施例中涉及到的数据等。存储器211可选的还可以是至少一个位于远离前述处理器210的存储装置。
100.本技术实施例还提供了一种计算机存储介质,该计算机存储介质可以存储有多条指令,该指令适用于由处理器加载并执行上述实施例的方法步骤,具体执行过程可以参见上述实施例的具体说明,在此不进行赘述。
101.所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本技术的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
102.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
103.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
104.在本发明所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅是示意性的,例如,模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
105.作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
106.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
107.集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。
108.本发明并不局限于上述实施方式,如果对本发明的各种改动或变形不脱离本发明
的精神和范围,倘若这些改动和变形属于本发明的权利要求和等同技术范围之内,则本发明也意图包含这些改动和变形。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1