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

文档序号:16608813发布日期:2019-01-14 21:23阅读:166来源:国知局
数据存储方法、装置、计算机设备及存储介质与流程

本发明涉及数据库访问存储领域,尤其涉及到一种数据存储方法、装置、计算机设备及存储介质。



背景技术:

进入大数据时代后,企业需要存储记录的数据量激增,容易导致一个数据库中存储、堆积有巨量的数据信息。当需要查询某个数据时,往往需要遍历该数据库中的数据才能得到查询结果,这不仅对数据库的性能要求极高,而且使得查询数据的效率低下。

因此,寻找一种有利于提高数据库访问性能的数据存储方法成为本领域技术人员亟需解决的问题。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种可以提高数据库访问性能的数据存储方法、装置、计算机设备及存储介质。

一种数据存储方法,包括:

获取待存储数据的数据类型和数据状态;

根据预设的类型库对应关系从各个数据库中选取一个与所述数据类型对应的数据库作为目标数据库,所述类型库对应关系记录了数据类型与数据库的对应关系;

根据预设的状态表对应关系从所述目标数据库内的各个数据表中选取一个与所述数据状态对应的数据表作为目标数据表,所述预设的状态表对应关系记录了数据状态与数据表的对应关系;

根据预设的限速规则确定所述目标数据表的写入速度;

以所述写入速度将所述待存储数据存储至所述目标数据库内的所述目标数据表中。

一种数据存储装置,包括:

数据获取模块,用于获取待存储数据的数据类型和数据状态;

数据库对应模块,用于根据预设的类型库对应关系从各个数据库中选取一个与所述数据类型对应的数据库作为目标数据库,所述类型库对应关系记录了数据类型与数据库的对应关系;

数据表对应模块,用于根据预设的状态表对应关系从所述目标数据库内的各个数据表中选取一个与所述数据状态对应的数据表作为目标数据表,所述预设的状态表对应关系记录了数据状态与数据表的对应关系;

确定模块,用于根据预设的限速规则确定所述目标数据表的写入速度;

存储模块,用于以所述写入速度将所述待存储数据存储至所述目标数据库内的所述目标数据表中。

一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述数据存储方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述数据存储方法的步骤。

上述提供了一种数据存储方法、装置、计算机设备及存储介质,首先,获取待存储数据的数据类型和数据状态;然后,根据预设的类型库对应关系从各个数据库中选取一个与所述数据类型对应的数据库作为目标数据库,所述类型库对应关系记录了数据类型与数据库的对应关系;接着,根据预设的状态表对应关系从所述目标数据库内的各个数据表中选取一个与所述数据状态对应的数据表作为目标数据表,所述预设的状态表对应关系记录了数据状态与数据表的对应关系;之后,根据预设的限速规则确定所述目标数据表的写入速度;最后,以所述写入速度将所述待存储数据存储至所述目标数据库内的所述目标数据表中。这样,通过依据数据类型和数据状态将待存储的数据划分中不同的数据库以及不同的数据表中,可以实现数据的分离存储,避免了大量数据堆积在同一数据库或者同一数据表中导致数据查询效率低下的问题,有利于提高数据库访问性能。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本发明一实施例中数据存储方法的一应用环境示意图;

图2是本发明一实施例中数据存储方法的一流程图;

图3是本发明一实施例中数据存储方法在一个应用场景下预先得到类型库对应关系的流程示意图;

图4是本发明一实施例中数据存储方法步骤s206在一个应用场景下的流程示意图;

图5是本发明一实施例中数据存储方法步骤s103在一个应用环境下的流程示意图;

图6是本发明一实施例中数据存储方法在一个应用环境下数据访问过程的流程示意图;

图7是本发明一实施例中数据存储装置的结构示意图;

图8是本发明一实施例中计算机设备的一示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本申请提供的一种数据存储方法,可应用在如图1的应用环境中,其中,客户端通过网络与服务器进行通信。其中,客户端可以但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。

在一实施例中,如图2所示,提供一种数据存储方法,以该方法应用在图1中的服务器为例进行说明,包括如下步骤:

s101、获取待存储数据的数据类型和数据状态;

本实施例中,这些待存储数据均具有数据类型、数据状态的属性,具体可以是在生成数据时就赋予的属性。其中,数据类型可以包括但不限于审批类、会议类、公文类、督办类,等等。数据状态可以包括但不限于已提交、处理中、已完结、已归档,等等。特别地,在必要是,数据状态还可以记录数据的生成时间、归档时间、办结时间等信息。

在某个应用场景中,客户端向服务器请求将某数据归档,服务器接收到该请求后,可以获取到要归档的数据,即上述的待存储数据。然后,服务器可以从该待存储数据中直接获取到其数据类型和数据状态,也可以要求该客户端提供该待存储数据的数据类型和数据状态。

s102、根据预设的类型库对应关系从各个数据库中选取一个与所述数据类型对应的数据库作为目标数据库,所述类型库对应关系记录了数据类型与数据库的对应关系;

本实施例中,服务器可以预先设置有类型库对应关系,该类型库对应关系记录了数据类型与数据库的对应关系。比如,设共有3个数据类型,分别为审批类、会议类、公文类;共有3个数据库,分别为数据库a、数据库b和数据库c,该类型库对应关系记录了审批类与数据库a对应、会议类与数据库b对应、公文类与数据库c对应。从而,服务器在获取到待存储数据的数据类型后,可以依据该类型库对应关系确定与之对应的数据库,将其作为目标数据库。

进一步地,如图3所示,所述类型库对应关系可以通过以下步骤预先得到:

s201、分别收集各个数据类型下的历史数据;

s202、针对每个数据类型,统计收集到的所述数据类型下的历史数据的数据量;

s203、按照历史数据的数据量从大到小的顺序对各个数据类型进行排序,得到第一序列;

s204、分别获取各个数据库的可用存储空间;

s205、按照可用存储空间从大到小的顺序对各个数据库进行排序,得到第二序列;

s206、将所述第一序列的各个数据类型与所述第二序列的各个数据库进行配对,得到所述类型库对应关系。

对于步骤s201,可以理解的是,服务器在建立类型库对应关系之前,可以先收集每种数据类型的历史数据,这些历史数据是指属于某个数据类型的、曾经存储过至数据库中的数据。

对于步骤s202,由于不同数据类型下的历史数据的数据量不相同,有些数据类型的历史数据较多,有些数据类型的历史数据则较少,可以认为,对于历史数据较多的数据类型,将来要存储至数据库中的该类型的数据也会更多,反之,对于历史数据较少的数据类型,将来要存储至数据库中的该类型的数据也相应更少些。因此,通过统计每个数据类型下的历史数据的数据量,后续可以以数据量作为考量标准来配对这些数据类型和数据库。

对于步骤s203,在统计得到各个数据类型下历史数据的数据量后,可以按照历史数据的数据量从大到小的顺序对各个数据类型进行排序,得到第一序列。可知,在第一序列中越靠前的数据类型,其历史数据的数据量越大;反之,在第一序列中越靠后的数据类型,其历史数据的数据量越小。

对于步骤s204,在建立类型库对应关系之前,服务器可以获知到哪些数据库是可以被用于存储数据的,然后分别获取这些数据库的可用存储空间。这里说的可用存储空间是指数据库的剩余可以存储数据的空间。比如某个数据库总存量为1000t,已使用100t,则该数据库的可用存储空间为900t。

对于步骤s205,在分别获取各个数据库的可用存储空间之后,可以按照可用存储空间从大到小的顺序对各个数据库进行排序,得到第二序列。可知,在第二序列中越靠前的数据库,其可用存储空间越大;反之,在第二序列中越靠后的数据库,其可用存储空间越小。

对于步骤s206,可以理解的是,在建立类型库对应关系时,应当考虑到数据库将来可能存储的数据量与可用存储空间两者是否匹配。一般来说,可用存储空间越大的数据库应当分配给将来可能需要存储的数据量越大的数据类型。因此,本实施例中,具体可以将第一序列上的各个数据类型与第二序列上的各个数据库一一对应配对,建立两者对应关系,即得到该类型库对应关系。例如,第一序列中依次包括的数据类型有:类型1、类型2、类型3、类型4;第二序列中依次包括的数据库有:数据库a、数据库b、数据库c、数据库d,则配对后,该类型库对应关系记录有:类型1与数据库a对应、类型2与数据库b对应、类型3与数据库c对应、类型4与数据库d对应。

更进一步地,考虑到在某些情况下,数据库的数量可能会少于数据类型的数量,比如企业可用的数据库为5个,但划分为6个数据类型出来,此时建立类型库对应关系时需要区分两者数量上的区别,如图4所示,所述步骤s206具体可以包括:

s301、判断所述各个数据库的数量是否大于或等于所述各个数据类型的数量,若是,则执行步骤s302,若否,则执行步骤s303;

s302、将所述第一序列的各个数据类型与所述第二序列中位于前列的各个数据库一一配对,得到所述类型库对应关系;

s303、将所述第一序列中位于前列的各个数据类型与所述第二序列的各个数据库一一配对,然后将未配对的数据类型与所述第二序列中排列最后的一个数据库进行配对,得到所述类型库对应关系。

对于步骤s301-s303,可以理解的是,当所述各个数据库的数量大于或等于所述各个数据类型的数量时,所述各个数据类型是可以一一分配给不同的数据库的,因此可以选取第二序列中位于前列的数据库进行一一配对。例如,第一序列中依次包括的数据类型有:类型1、类型2、类型3、类型4;第二序列中依次包括的数据库有:数据库a、数据库b、数据库c、数据库d、数据库e,则配对时,将类型1、类型2、类型3、类型4与位于第二序列中前列的数据库a、数据库b、数据库c、数据库d进行一一配对,从而配对后,该类型库对应关系记录有:类型1与数据库a对应、类型2与数据库b对应、类型3与数据库c对应、类型4与数据库d对应。

当所述各个数据库的数量小于所述各个数据类型的数量时,可知,所述各个数据类型是无法一一分配给不同的数据库的,总得有两个以上的数据类型共用同一个数据库。因此,可以先将第一序列中位于前列的各个数据类型与所述第二序列的各个数据库一一配对,然后再将未配对的数据类型与所述第二序列中排列最后的一个数据库进行配对。例如,设第一序列中依次包括的数据类型有:类型1、类型2、类型3、类型4、类型5;第二序列中依次包括的数据库有:数据库a、数据库b、数据库c、数据库d,则配对时,先将类型1、类型2、类型3、类型4与数据库a、数据库b、数据库c、数据库d进行一一配对,然后,将还未配对的类型5与位于第二序列最后的数据库d配对,从而配对后,该类型库对应关系记录有:类型1与数据库a对应、类型2与数据库b对应、类型3与数据库c对应、类型4和类型5与数据库d对应。

s103、根据预设的状态表对应关系从所述目标数据库内的各个数据表中选取一个与所述数据状态对应的数据表作为目标数据表,所述状态表对应关系记录了数据状态与数据表的对应关系;

本实施例中,服务器可以预先设置有状态表对应关系,该状态表对应关系记录了数据状态与数据表的对应关系。比如,设共有3个数据状态,分别为处理中、已完结、已归档;该目标数据库内共有3个数据表,分别为表1、表2和表3,则该状态表对应关系可以记录“处理中”状态的数据存储至表1、“已完结”状态的数据存储至表2、“已归档”状态的数据存储至表3。从而,服务器在获取到待存储数据的数据状态后,可以根据该状态表对应关系确定与之对应的数据表,将其作为目标数据表。

进一步地,所述数据状态包括所述待存储数据的存储时间。本实施例中,在将数据存储至数据库时,可以依据存档时间(即存储数据的时间)将不同的数据划分至不同的数据表中,以便于后续查询、访问数据时可以从时间维度上检索数据。因此,所述状态表对应关系具体记录了各个时间区间与各个数据表的一一对应关系,如图5所示,所述步骤s103具体可以包括:

s401、确定所述待存储数据的存储时间落入的目标时间区间;

s402、根据所述状态表对应关系确定所述各个数据表中与所述目标时间区间对应的数据表作为目标数据表。

对于步骤s401,在获取到该待存储数据的存储时间之后,可以直接确定出该存储时间落入的目标时间区间。比如,设该状态表对应关系中记录了3个时间区间,分别为月初(1号至10号)、月中(11号至20号)和月尾(21号至31号),若该存储时间为8月3日,则可以确定该待存储数据落入“月初”这一时间区间,即目标时间区间为月初。

对于步骤s402,在确定出目标时间区间之后,根据状态表对应关系可以确定出与该目标时间区间对应的数据表,将确定出的数据表作为该目标数据表即可。

由上述内容可知,通过上述步骤s401和s402,可以使得数据存储至数据库中的数据表后,根据存储时间的不同存储在不同的数据表中,在查询数据时,可以从时间维度上快速定位查询对应的数据表,从而提高查询数据的效率,节省数据库的性能。

s104、根据预设的限速规则确定所述目标数据表的写入速度;

本实施例中,服务器可以预先设置有限速规则,该限速规则限定了各个数据表的读取速度和写入速度。这里,由于仅需存储数据,因此根据该限速规则确定出该目标数据表的写入速度即可。

s105、以所述写入速度将所述待存储数据存储至所述目标数据库内的所述目标数据表中。

在确定出所述写入速度之后,可以以所述写入速度将所述待存储数据存储至所述目标数据库内的所述目标数据表中。可以理解的是,由于限速规则的存在,可以很好地保护目标数据库的性能,当同时运行多个写入任务时,由于规定好了各个数据表的写入速度,即便多线程写入多个任务,也不容易出现数据丢失或写入错误的情况,提高了数据存储的稳定性、可靠性,也使得数据库在使用时可以同时运行多个读写任务,提升数据库的数据吞吐效率。

进一步地,如图6所示,在将所述待存储数据存储至所述目标数据库内的所述目标数据表中之后,还可以包括与数据存储对应的数据访问过程。具体地,数据访问的过程可以包括:

s501、获取待读取数据的当前数据类型和当前数据状态;

s502、根据所述类型库对应关系从各个数据库中确定出与所述当前数据类型对应的数据库作为访问数据库;

s503、根据所述状态表对应关系从所述访问数据库内的各个数据表中确定出与所述当前数据状态对应的数据表作为访问数据表;

s504、根据所述限速规则确定所述访问数据表的读取速度;

s505、以所述读取速度从所述访问数据库内的所述访问数据表中读取出所述待读取数据。

对于步骤s501,可以理解的是,在数据访问的过程中,获取该待读取数据的当前数据类型和当前数据状态,其与上述步骤s101同理,此处不再赘述。

对于步骤s502,在读取数据之前,需要先确定该待读取数据位于哪个数据库中,因此,服务器可以查询该类型库对应关系,从各个数据库中确定出与所述当前数据类型对应的数据库作为访问数据库。可以理解的是,服务器查询的该类型库对应关系可以存放在服务器上,也可以存放在服务器与数据库之间的路由上,对此本实施例不作具体限定。

对于步骤s503,在确定出该待读取数据在哪个数据库(即该访问数据库)后,还需要确定该待读取数据具体在访问数据库中的哪个数据表中,对此,服务器可以根据所述状态表对应关系从所述访问数据库内的各个数据表中确定出与所述当前数据状态对应的数据表作为访问数据表。可以理解的是,服务器查询的该状态表对应关系可以存放在服务器上,也可以存放在服务器与数据库之间的路由上,对此本实施例不作具体限定。

对于步骤s504,与上述步骤s104同理,服务器可以预先设置有限速规则,该限速规则限定了各个数据表的读取速度和写入速度。这里,由于仅需读取数据,因此根据该限速规则确定出该访问数据表的读取速度即可。

对于步骤s505,在确定出该访问数据表要求的读取速度之后,可以以所述读取速度从所述访问数据库内的所述访问数据表中读取出所述待读取数据。同理,由于限速规则的存在,可以很好地保护目标数据库的性能,当同时运行多个读取任务时,由于规定好了各个数据表的读取速度,即便多线程读取多个任务,也不容易出现数据丢失或读取错误的情况,提高了数据访问的稳定性、可靠性,也使得数据库在使用时可以同时运行多个读写任务,提升数据库的数据吞吐效率。

综上所示,上述提高了一种数据存储方法,首先,获取待存储数据的数据类型和数据状态;然后,根据预设的类型库对应关系从各个数据库中选取一个与所述数据类型对应的数据库作为目标数据库,所述类型库对应关系记录了数据类型与数据库的对应关系;接着,根据预设的状态表对应关系从所述目标数据库内的各个数据表中选取一个与所述数据状态对应的数据表作为目标数据表,所述状态表对应关系记录了数据状态与数据表的对应关系;之后,根据预设的限速规则确定所述目标数据表的写入速度;最后,以所述写入速度将所述待存储数据存储至所述目标数据库内的所述目标数据表中。这样,通过依据数据类型和数据状态将待存储的数据划分中不同的数据库以及不同的数据表中,可以实现数据的分离存储,避免了大量数据堆积在同一数据库或者同一数据表中导致数据查询效率低下的问题,有利于提高数据库访问性能。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

在一实施例中,提供一种提高数据库访问性能的数据存储的装置,该提高数据库访问性能的数据存储的装置与上述实施例中提高数据库访问性能的数据存储的方法一一对应。如图7所示,该提高数据库访问性能的数据存储的装置包括数据获取模块601、数据库对应模块602、数据表对应模块603、确定模块604和存储模块605。各功能模块详细说明如下:

数据获取模块601,用于获取待存储数据的数据类型和数据状态;

数据库对应模块602,用于根据预设的类型库对应关系从各个数据库中选取一个与所述数据类型对应的数据库作为目标数据库,所述类型库对应关系记录了数据类型与数据库的对应关系;

数据表对应模块603,用于根据预设的状态表对应关系从所述目标数据库内的各个数据表中选取一个与所述数据状态对应的数据表作为目标数据表,所述状态表对应关系记录了数据状态与数据表的对应关系;

确定模块604,用于根据预设的限速规则确定所述目标数据表的写入速度;

存储模块605,用于以所述写入速度将所述待存储数据存储至所述目标数据库内的所述目标数据表中。

进一步地,所述类型库对应关系可以通过以下模块预先得到:

收集模块,用于分别收集各个数据类型下的历史数据;

统计模块,用于针对每个数据类型,统计收集到的所述数据类型下的历史数据的数据量;

数据量排序模块,用于按照历史数据的数据量从大到小的顺序对各个数据类型进行排序,得到第一序列;

获取模块,用于分别获取各个数据库的可用存储空间;

存储空间排序模块,用于按照可用存储空间从大到小的顺序对各个数据库进行排序,得到第二序列;

配对对应模块,用于将所述第一序列的各个数据类型与所述第二序列的各个数据库进行配对,得到所述类型库对应关系。

进一步地,所述配对对应模块可以包括:

判断单元,用于判断所述各个数据库的数量是否大于或等于所述各个数据类型的数量;

对应单元,用于若所述判断单位的判断结果为是,则将所述第一序列的各个数据类型与所述第二序列中位于前列的各个数据库一一配对,得到所述类型库对应关系;

配对单元,用于若所述判断单位的判断结果为否,则将所述第一序列中位于前列的各个数据类型与所述第二序列的各个数据库一一配对,然后将未配对的数据类型与所述第二序列中排列最后的一个数据库进行配对,得到所述类型库对应关系。

进一步地,所述数据表对应模块可以包括:

时间区间确定模块,用于确定所述待存储数据的存储时间落入的目标时间区间;

目标数据表对应模块,用于根据所述状态表对应关系确定所述各个数据表中与所述目标时间区间对应的数据表作为目标数据表。

进一步地,所述数据存储装置还可以包括:

获取数据类型状态模块,用于获取待读取数据的当前数据类型和当前数据状态;

访问数据库确定模块,用于根据所述类型库对应关系从各个数据库中确定出与所述的当前数据类型对应的数据库作为访问数据库;

关于数据存储装置的具体限定可以参见上文中对于数据存储方法的限定,在此不再赘述。上述提高数据库访问性能的数据存储装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储数据存储方法中涉及到的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据存储方法。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例中数据存储方法的步骤,例如图2所示的步骤s101至步骤s105。或者,处理器执行计算机程序时实现上述实施例中装置的各模块/单元的功能,例如图7所示模块601至模块605的功能。为避免重复,这里不再赘述。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例中数据存储方法的步骤,例如图2所示的步骤s101至步骤s105。或者,计算机程序被处理器执行时实现上述实施例中提高数据库访问性能的数据存储装置的各模块/单元的功能,例如图7所示模块601至模块605的功能。为避免重复,这里不再赘述。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。

以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。

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