事务提交方法及相关装置与流程

文档序号:17988659发布日期:2019-06-22 00:36阅读:210来源:国知局
事务提交方法及相关装置与流程

本发明涉及数据库技术领域,更具体的说,是涉及一种事务提交方法及相关装置。



背景技术:

随着信息时代的到来,数据成为企业发展的重要支撑依据,因此,企业对数据灾备的重视程度越来越高,一般采用主数据库以及备用数据库共同保障数据的高可靠性。

目前,业务服务器在采用业务线程处理来自业务客户端的业务请求的时候,业务线程在处理完毕后会向主数据库的服务器发起事务提交操作,主数据库的服务器在执行事务提交时要把事务中包含的数据库操作过程写入事务文件(比如,oracle数据库的redo文件、mysql数据库的binlog文件)中。通过将事务文件同步到备用数据库的服务器,备用数据库的服务器即可通过事务文件进行数据恢复,从而实现数据灾备。现在,数据量呈爆发式增长,业务服务器采用多线程处理来自业务客户端的业务请求成为必然。

但是,在业务服务器采用多线程处理来自业务客户端的业务请求的时候,每个业务线程都会向主数据库的服务器发起事务提交操作,主数据库的服务器在执行多个线程发起的事务提交操作时,目前是按照事务提交操作的发起顺序串行处理,即,主数据库的服务器在执行一个事务提交操作的时候,都是先独占事务文件,将该事务中包含的数据库操作过程写入事务文件之后,才释放对事务文件的占用权。这种情况下,一个事务提交的时候,别的事务的提交动作就要排队等着之前的事务提交完成后才能开始,导致事务提交的效率低下。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的事务提交方法及装置。具体方案如下:

一种事务提交方法,应用于主数据库服务器的任一线程,所述方法包括:

接收业务服务器发送的事务提交请求,所述事务提交请求用于指示所述线程将数据操作事务写入事务文件;

生成与所述数据操作事务对应的事务号;

确定待写入所述数据操作事务的目标事务文件;

将所述事务号以及所述数据操作事务写入所述目标事务文件。

可选地,所述生成与所述数据操作事务对应的事务号,包括:

获取事务号变量的当前值;

将所述事务号变量的当前值加一生成新的当前值;

将所述新的当前值确定为与所述数据操作事务对应的事务号。

可选地,所述确定待写入所述数据操作事务的目标事务文件,包括:

从已生成的事务文件中查找文件名中包含所述线程的线程号的事务文件;

如果查找到,则确定所述文件名中包含所述线程的线程号的事务文件为所述目标事务文件;

如果未查找到,则生成新的事务文件作为所述目标事务文件,所述新的事务文件的文件名中包含所述线程的线程号。

可选地,所述确定待写入所述数据操作事务的目标事务文件,包括:

从已生成的事务文件中查找候选事务文件,所述候选事务文件为文件名中包含所述线程的线程号且文件序号最大的事务文件;

确定所述数据操作事务的大小;

判断所述候选事务文件的可用空间是否大于或等于所述数据操作事务的大小;

如果所述候选事务文件的可用空间大于或等于所述数据操作事务的大小,则确定所述候选事务文件为所述目标事务文件;

如果所述候选事务文件的可用空间小于所述数据操作事务的大小,则生成新的事务文件作为所述目标事务文件,所述新的事务文件的文件名中包含所述线程的线程号及文件序号,所述文件序号为将所述候选事务文件的文件名中的文件序号加一生成的。

可选地,在所述将所述事务号以及所述数据操作事务写入所述目标事务文件之后,所述方法还包括:

将所述目标事务文件同步至备用数据库服务器。

一种事务提交装置,应用于主数据库服务器的任一线程,所述装置包括:

接收单元,用于接收业务服务器发送的事务提交请求,所述事务提交请求用于指示所述线程将数据操作事务写入事务文件;

事务号生成单元,用于生成与所述数据操作事务对应的事务号;

目标事务文件确定单元,用于确定待写入所述数据操作事务的目标事务文件;

写事务单元,用于将所述事务号以及所述数据操作事务写入所述目标事务文件。

可选地,所述事务号生成单元,具体用于:

获取事务号变量的当前值;

将所述事务号变量的当前值加一生成新的当前值;

将所述新的当前值确定为与所述数据操作事务对应的事务号。

可选地,所述目标事务文件确定单元,具体用于:

从已生成的事务文件中查找文件名中包含所述线程的线程号的事务文件;

如果查找到,则确定所述文件名中包含所述线程的线程号的事务文件为所述目标事务文件;

如果未查找到,则生成新的事务文件作为所述目标事务文件,所述新的事务文件的文件名中包含所述线程的线程号。

可选地,所述目标事务文件确定单元,具体用于:

从已生成的事务文件中查找候选事务文件,所述候选事务文件为文件名中包含所述线程的线程号且文件序号最大的事务文件;

确定所述数据操作事务的大小;

判断所述候选事务文件的可用空间是否大于或等于所述数据操作事务的大小;

如果所述候选事务文件的可用空间大于或等于所述数据操作事务的大小,则确定所述候选事务文件为所述目标事务文件;

如果所述候选事务文件的可用空间小于所述数据操作事务的大小,则生成新的事务文件作为所述目标事务文件,所述新的事务文件的文件名中包含所述线程的线程号及文件序号,所述文件序号为将所述候选事务文件的文件名中的文件序号加一生成的。

可选地,所述装置还包括:

同步单元,用于在所述将所述事务号以及所述数据操作事务写入所述目标事务文件之后,将所述目标事务文件同步至备用数据库服务器。

一种存储介质,其上存储有程序,该程序被处理器执行时实现如上所述的事务提交方法。

一种电子设备,所述电子设备包括存储器和处理器,所述存储器用于存储程序,所述处理器用于运行程序,其中,所述程序运行时执行如上所述的事务提交方法。

借由上述技术方案,本发明提供的事务提交方法及装置,主数据库服务器的任一线程在接收到业务服务器发送的事务提交请求之后,生成与数据操作事务对应的事务号,并确定待写入数据操作事务的目标事务文件,将事务号以及数据操作事务写入目标事务文件。由于主数据库服务器的不同线程在接收不同的事务提交请求之后,将不同的数据操作事务写入不同的目标事务文件,因此,主数据库的服务器可并行处理多个事务提交,进而提高事务提交的效率。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1为本发明实施例公开的一种业务系统架构示意图;

图2为本发明实施例公开的一种事务提交方法的流程示意图;

图3是现有技术中事务提交方法应用示意图;

图4是本发明实施例中事务提交方法应用示意图;

图5为本发明实施例公开的一种事务提交装置的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

请参阅附图1,图1为本发明实施例公开的一种业务系统架构示意图,该系统包括业务客户端11、业务服务器12、主数据库服务器13以及备用数据库服务器14。其中,业务客户端11用于根据用户操作生成业务请求,并将业务请求发送至业务服务器,业务服务器可启用多个业务线程处理业务请求。

业务服务器的任一业务线程在接收到业务请求后,开启业务流程的处理,即,通过数据库句柄往主数据库服务器发送一个事务开启指令,主数据库服务器接收到事务开启指令之后,开启一个数据操作事务;业务服务器对该业务请求进行解析,生成该业务请求对应的业务流程所包含的数据库操作指令,通过数据库句柄将这些指令发送给主数据库服务器,主数据库服务器接收到数据库操作指令之后,进行数据库数据操作。在一种可实施方式中,数据库操作指令包括对数据库的数据表的各种操作,比如,对a表写入一条数据,对b表的某条数据进行修改,删除c表的某条(或某些数据)……等等。

业务流程完成之后,业务服务器通过数据库句柄往主数据库服务器发送事务提交指令,主数据库服务器接收到事务提交指令之后,会生成与数据操作事务对应的事务号,并确定待写入数据操作事务的目标事务文件,将所述事务号以及所述数据操作事务写入目标事务文件。

需要说明的是,数据库句柄为业务服务器先前创建,用来发送数据操作指令。同一个数据库句柄发送的指令,在主数据库服务器会由同一个线程来处理。一个完整的业务流程分解的数据库操作指令,业务服务器会由同一个数据库句柄来发送。例如:业务客户端发送了一笔转账业务请求,由a转100元给b,业务服务器收到该业务请求后,生成一个修改a资金减100的数据库操作指令,通过数据库句柄发送到主数据库服务器,指令执行成功后,再发送b资金增加100的数据库操作指令,通过数据库句柄发送到主数据库服务器,执行成功后,再通过数据库句柄发送事务提交指令,主数据库服务器收到事务提交请求。

在一种可实施方式中,主数据库服务器将数据操作事务写入目标事务文件之后,需将目标事务文件同步至备用数据库服务器。这样,备用数据库服务器可通过事务文件恢复数据。

请参阅附图2,图2为本发明实施例公开的一种事务提交方法的流程示意图,该方法应用于主数据库服务器的任一线程,该方法包括:

步骤s201:接收业务服务器发送的事务提交请求,所述事务提交请求用于指示所述线程将数据操作事务写入事务文件;

步骤s202:生成与所述数据操作事务对应的事务号;

在一种可实施方式中,所述生成与所述数据操作事务对应的事务号,包括:获取事务号变量的当前值;将所述事务号变量的当前值加一生成新的当前值;将所述新的当前值确定为与所述数据操作事务对应的事务号。

步骤s203:确定待写入所述数据操作事务的目标事务文件;

在一种可实施方式中,一个线程对应一个事务文件,则所述确定待写入所述数据操作事务的目标事务文件,包括:从已生成的事务文件中查找文件名中包含所述线程的线程号的事务文件;如果查找到,则确定所述文件名中包含所述线程的线程号的事务文件为所述目标事务文件;如果未查找到,则生成新的事务文件作为所述目标事务文件,所述新的事务文件的文件名中包含所述线程的线程号。

在又一种可实施方式中,一个线程对应多个事务文件,则所述确定待写入所述数据操作事务的目标事务文件,包括:从已生成的事务文件中查找候选事务文件,所述候选事务文件为文件名中包含所述线程的线程号且文件序号最大的事务文件;确定所述数据操作事务的大小;判断所述候选事务文件的可用空间是否大于或等于所述数据操作事务的大小;如果所述候选事务文件的可用空间大于或等于所述数据操作事务的大小,则确定所述候选事务文件为所述目标事务文件;如果所述候选事务文件的可用空间小于所述数据操作事务的大小,则生成新的事务文件作为所述目标事务文件,所述新的事务文件的文件名中包含所述线程的线程号及文件序号,所述文件序号为将所述候选事务文件的文件名中的文件序号加一生成的。

事务文件的文件名格式可以为redola_b.log,其中,a用于指示线程号,b用于指示文件序号,文件序号为递增的,a、b均为大于等于零的整数。

作为一种示例性描述,redo1_0.log、redo1_1.log、...、redo1_[no].log,其中,“redo1”中的“1”用于指示线程号为1,“_0”、“_1”、…、“_[no]”用于指示文件序号。redo2_0.log、redo2_1.log、...、redo2_[no].log,其中,“redo2”中的“2”用于指示线程号为2,“_0”、“_1”、…、“_[no]”用于指示文件序号。

步骤s204:将所述事务号以及所述数据操作事务写入所述目标事务文件。

在一种可实施方式中,可先把事务号写入所述目标事务文件,再把数据操作事务写入目标事务文件中。

本发明实施例公开的事务提交方法,主数据库服务器的任一线程在接收到业务服务器发送的事务提交请求之后,生成与数据操作事务对应的事务号,并确定待写入数据操作事务的目标事务文件,将事务号以及数据操作事务写入目标事务文件。由于主数据库服务器的不同线程在接收不同的事务提交请求之后,将不同的数据操作事务写入不同的目标事务文件,因此,主数据库的服务器可并行处理多个事务提交,进而提高事务提交的效率。

需要说明的是,本实施例仅仅说明了主数据库的服务器对业务服务器发送的一个事务提交请求的处理流程,实际上,主数据库的服务器可以同时接收业务服务器发送的多个事务提交请求由多个线程处理,但是,在生成与多个事务提交请求的数据操作事务对应的事务号时,各个线程之间是互斥的,即,生成的每个数据操作事务对应的事务号都是唯一的。这样,备用数据库服务器在通过事务文件恢复数据的时候,可把各个线程数据操作事务的事务号串成一个连续递增的序号,按照这个序号去加载相应的事务文件,从而保证恢复的数据与主数据库的服务器中的一致。

作为一种示例,图3是现有技术中事务提交方法应用示意图,线程1和线程2写同一个redo文件,当线程1和线程2同一时刻都提交事务操作时,会同时竞争redo_0.log文件,假设线程1竞争到了资源,那么就线程1先把事务的操作写到redo_0.log文件,而提交过程中线程2是一直在等待着事务文件,接收不了外部的其他请求,一直等到线程1写完。而当redo_0.log的大小超过事先设置好的大小之后,线程1和线程2又会同时去竞争redo_1.log文件。图4是本发明实施例中事务提交方法应用示意图,当线程1和线程2同一时刻都提交事务操作时,会同时竞争产生一个事务号,假设给线程1分配的是0,线程2分配的是1,那么产生事务号之后,线程1和线程2又可以各自走事务提交的过程。线程1会将0写到redo1_0.log中,再把事务操作的内容写进去;线程2会将1写到redo2_0.log中,再把事务操作的内容写进去。

请参阅附图5,图5为本发明实施例公开的又一种事务提交装置的结构示意图,该装置应用于主数据库的服务器,该装置包括:

接收单元51,用于接收业务服务器发送的事务提交请求,所述事务提交请求用于指示所述线程将数据操作事务写入事务文件;

事务号生成单元52,用于生成与所述数据操作事务对应的事务号;

目标事务文件确定单元53,用于确定待写入所述数据操作事务的目标事务文件;

写事务单元54,用于将所述事务号以及所述数据操作事务写入所述目标事务文件。

可选地,所述事务号生成单元,具体用于:

获取事务号变量的当前值;

将所述事务号变量的当前值加一生成新的当前值;

将所述新的当前值确定为与所述数据操作事务对应的事务号。

可选地,所述确定待写入所述数据操作事务的目标事务文件,包括:

从已生成的事务文件中查找文件名中包含所述线程的线程号的事务文件;

如果查找到,则确定所述文件名中包含所述线程的线程号的事务文件为所述目标事务文件;

如果未查找到,则生成新的事务文件作为所述目标事务文件,所述新的事务文件的文件名中包含所述线程的线程号。

可选地,所述目标事务文件确定单元,具体用于:

从已生成的事务文件中查找候选事务文件,所述候选事务文件为文件名中包含所述线程的线程号且文件序号最大的事务文件;

确定所述数据操作事务的大小;

判断所述候选事务文件的可用空间是否大于或等于所述数据操作事务的大小;

如果所述候选事务文件的可用空间大于或等于所述数据操作事务的大小,则确定所述候选事务文件为所述目标事务文件;

如果所述候选事务文件的可用空间小于所述数据操作事务的大小,则生成新的事务文件作为所述目标事务文件,所述新的事务文件的文件名中包含所述线程的线程号及文件序号,所述文件序号为将所述候选事务文件的文件名中的文件序号加一生成的。

可选地,所述装置还包括:

同步单元,用于在所述将所述事务号以及所述数据操作事务写入所述目标事务文件之后,将所述目标事务文件同步至备用数据库服务器。

需要说明的是,上述各个单元的具体功能实现已在方法实施例中详细说明,本实施例不再赘述。

所述事务提交装置包括处理器和存储器,上述各个单元均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。

处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来提高事务提交的效率。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram),存储器包括至少一个存储芯片。

本发明实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现所述事务提交方法。

本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述事务提交方法。

本发明实施例提供了一种电子设备,电子设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:

接收业务服务器发送的事务提交请求,所述事务提交请求用于指示所述线程将数据操作事务写入事务文件;

生成与所述数据操作事务对应的事务号;

确定待写入所述数据操作事务的目标事务文件;

将所述事务号以及所述数据操作事务写入所述目标事务文件。

可选地,所述生成与所述数据操作事务对应的事务号,包括:

获取事务号变量的当前值;

将所述事务号变量的当前值加一生成新的当前值;

将所述新的当前值确定为与所述数据操作事务对应的事务号。

可选地,所述确定待写入所述数据操作事务的目标事务文件,包括:

从已生成的事务文件中查找文件名中包含所述线程的线程号的事务文件;

如果查找到,则确定所述文件名中包含所述线程的线程号的事务文件为所述目标事务文件;

如果未查找到,则生成新的事务文件作为所述目标事务文件,所述新的事务文件的文件名中包含所述线程的线程号。

可选地,所述确定待写入所述数据操作事务的目标事务文件,包括:

从已生成的事务文件中查找候选事务文件,所述候选事务文件为文件名中包含所述线程的线程号且文件序号最大的事务文件;

确定所述数据操作事务的大小;

判断所述候选事务文件的可用空间是否大于或等于所述数据操作事务的大小;

如果所述候选事务文件的可用空间大于或等于所述数据操作事务的大小,则确定所述候选事务文件为所述目标事务文件;

如果所述候选事务文件的可用空间小于所述数据操作事务的大小,则生成新的事务文件作为所述目标事务文件,所述新的事务文件的文件名中包含所述线程的线程号及文件序号,所述文件序号为将所述候选事务文件的文件名中的文件序号加一生成的。

可选地,在所述将所述事务号以及所述数据操作事务写入所述目标事务文件之后,所述方法还包括:

将所述目标事务文件同步至备用数据库服务器。

本文中的电子设备可以是服务器、pc、pad、手机等。

本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:

接收业务服务器发送的事务提交请求,所述事务提交请求用于指示所述线程将数据操作事务写入事务文件;

生成与所述数据操作事务对应的事务号;

确定待写入所述数据操作事务的目标事务文件;

将所述事务号以及所述数据操作事务写入所述目标事务文件。

可选地,所述确定待写入所述数据操作事务的目标事务文件,包括:

从已生成的事务文件中查找文件名中包含所述线程的线程号的事务文件;

如果查找到,则确定所述文件名中包含所述线程的线程号的事务文件为所述目标事务文件;

如果未查找到,则生成新的事务文件作为所述目标事务文件,所述新的事务文件的文件名中包含所述线程的线程号。

可选地,所述生成与所述数据操作事务对应的事务号,包括:

获取事务号变量的当前值;

将所述事务号变量的当前值加一生成新的当前值;

将所述新的当前值确定为与所述数据操作事务对应的事务号。

可选地,所述确定待写入所述数据操作事务的目标事务文件,包括:

从已生成的事务文件中查找候选事务文件,所述候选事务文件为文件名中包含所述线程的线程号且文件序号最大的事务文件;

确定所述数据操作事务的大小;

判断所述候选事务文件的可用空间是否大于或等于所述数据操作事务的大小;

如果所述候选事务文件的可用空间大于或等于所述数据操作事务的大小,则确定所述候选事务文件为所述目标事务文件;

如果所述候选事务文件的可用空间小于所述数据操作事务的大小,则生成新的事务文件作为所述目标事务文件,所述新的事务文件的文件名中包含所述线程的线程号及文件序号,所述文件序号为将所述候选事务文件的文件名中的文件序号加一生成的。

可选地,在所述将所述事务号以及所述数据操作事务写入所述目标事务文件之后,所述方法还包括:

将所述目标事务文件同步至备用数据库服务器。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。存储器是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1