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

文档序号:19610172发布日期:2020-01-03 14:02阅读:149来源:国知局

技术领域
:】本发明涉及计算机应用
技术领域
:,尤其涉及一种数据同步方法及装置、计算机设备与可读介质。
背景技术
::基于数据库的数据处理大致可以分成两大类:联机事务处理(on-linetransactionprocessing;oltp)、联机分析处理(on-lineanalyticalprocessing;olap)。其中oltp是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。olap是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。目前各类应用场景出现越来越多的分钟或小时级别的oltp数据分析需求,如金融领域的客户关系管理(customerrelationshipmanagement;crm)相关业务需要使用线上实时数据给用户打标签,分析评估客户的回访效果;以及金融商业智能(businessintelligence;bi)部门需要实现现金贷实时放款人数、金额的实时统计,快速发现业务可能存在的问题等。大多olap系统支持不同异构数据库之间以文件的方式进行数据同步,可以很方便通过全量数据导出的方式进行同步,但是如果数据文件很大,该种方式的数据导出导入方式不仅耗费源系统和目的系统所在服务器的磁盘io、网络资源,同时很难满足业务分钟级别或小时级别的oltp数据分析需求。因此亟需提供一种将第一系统如oltp系统中的数据准实时同步至第二系统如olap系统的方法,解决日益增多的分钟或小时级别的oltp系统的数据分析需求。技术实现要素:本发明提供了一种数据同步方法及装置、计算机设备与可读介质,用于提供一种数据同步方案,以满足日益增多的分钟或小时级别的oltp系统的数据分析需求。本发明提供一种数据同步方法,所述方法包括:将第一系统的源数据库的结构对象迁移至第二系统的目标数据库中;将所述源数据库中预设历史时间点对应的全量数据迁移至所述目标数据库中;将所述源数据库中所述预设历史时间点后对应的实时数据批量同步至所述目标数据库中。进一步可选地,如上所述的方法中,将第一系统的源数据库的结构对象迁移至第二系统的目标数据库中,包括:将所述第一系统的所述源数据库中的源库/表名称和源表中的字段类型经过映射后迁移至所述第二系统的所述目标数据库中。进一步可选地,如上所述的方法中,将所述第一系统的所述源数据库中的源库/表名称和源表中的字段类型经过映射后迁移至所述第二系统的所述目标数据库中,包括:从所述第一系统的所述源数据库中读取建表语句;所述建表语句中包括所创建的所述源库/表名称以及源表中的字段类型;检测所述建表语句中所创建的所述源库/表名称是否在预先配置的需要迁移的库/表白名单中;若在,根据预设的库表映射器,将所述建表语句中的所述源库/表名称映射为所述目标数据库中对应的目标库/表名称,同时根据预设的字段类型映射表,将所述源表中的字段类型映射为目标表中的字段类型;根据所述目标库/表名称,检测预先设置的进度管理节点中存储的库/表列表中是否包括对应的所述目标库/表名称;所述进度管理节点独立于所述第一系统和所述第二系统来实现信息持久化存储;若未包括,对所述建表语句分别进行语法解析和语法转换,得到转换后的目标建表语句;根据所述目标建表语句,在所述第二系统的所述目标数据库中创建对应的所述目标库/表;将所述目标库/表名称存入所述进度管理节点中。进一步可选地,如上所述的方法中,若所述建表语句包括注释和/或唯一键,对所述建表语句分别进行语法解析和语法转换,包括:对所述建表语句中的所述注释和/或所述唯一键分别进行语法解析和语法转换,以使得所述注释和所述唯一键能够被迁移至所述第二系统的所述目标数据库中。进一步可选地,如上所述的方法中,将所述源数据库中预设历史时间点对应的全量数据迁移至所述目标数据库中,包括:采用多线程并发处理的方式从所述源数据库中获取所述预设历史时间点对应的所述全量数据中、未迁移的各数据及对应的源库/表名称;根据预设的库表映射器,将各所述数据的源库/表名称映射为所述目标数据库中对应的所述目标库/表名称;将各所述数据以及对应的所述目标库/表名称,写入预设的内存中;判断所述内存的写入时长是否达到预设时长,或者所述内存中写入的总数据的大小是否达到预设阈值;若是,将所述内存中写入的各所述数据以及对应的所述目标库/表名称写入预设的队列中;通过轮询所述队列,将所述队列中的各所述数据,按照对应的所述目标库/表名称写入至所述目标数据库的全量表中。进一步可选地,如上所述的方法中,采用多线程并发处理的方式从所述源数据库中获取所述预设历史时间点对应的所述全量数据中、未迁移的各数据及对应的源库/表名称,包括:采用多线程并发处理的方式,按照主键值由小到大的顺序分别从所述源数据库中的所述全量数据中获取未迁移的各数据及对应的源库/表名称;对应地,通过轮询所述队列,将所述队列中的各所述数据,按照对应的所述目标库/表名称写入至所述目标数据库中之后,所述方法还包括:将写入所述目标数据库中的各所述数据的主键名称和主键值存储至进度管理节点中,所述进度管理节点独立于所述第一系统和所述第二系统来实现信息持久化存储。进一步可选地,如上所述的方法中,若同步中断并恢复后,所述方法还包括:从所述进度管理节点中获取存储的最大主键值;将所述最大主键值后最近邻的主键值对应的数据作为重启后数据同步的起点,以便于继续按照主键值由小到大的顺序分别从所述源数据库中获取未迁移的各数据,进行数据同步处理。进一步可选地,如上所述的方法中,将所述源数据库中所述预设历史时间点后对应的实时数据批量同步至所述目标数据库中,包括:对于所述源数据库中所述预设历史时间点后对应的各源dml语句,获取各所述源dml语句中的数据的源库/表名称以及操作属性;根据所述库表映射器,将各所述源dml语句中的数据的源库/表名称映射为所述目标数据库中对应的所述目标库/表名称;将各所述源dml语句中的数据、对应的所述目标库/表名称以及所述操作属性,写入预设的所述内存中;判断所述内存的写入时长是否达到预设时长,或者所述内存中写入的总数据的大小是否达到预设阈值;若是,将所述内存中写入的各所述源dml语句中的数据、对应的所述目标库/表名称以及所述操作属性写入预设的所述队列中;通过轮询所述队列,将所述队列中的各所述源dml语句中的数据,按照对应的所述目标库/表名称以及所述操作属性写入至所述目标数据库的增量表中。进一步可选地,如上所述的方法中,若各所述源dml语句中还包括数据的唯一键值,根据预设的库表映射器,将各所述源dml语句中的数据的源库/表名称映射为所述目标数据库中对应的所述目标库/表名称之后,将各所述源dml语句中的数据、对应的所述目标库/表名称以及所述操作属性,写入预设的内存中之前,所述方法还包括:判断所述内存中是否存储有所述唯一键值对应的数据,若存在,删除所述内存中所述唯一键值对应的数据、对应的所述目标库/表名称以及所述操作属性。进一步可选地,如上所述的方法中,将所述源数据库中的实时数据批量同步至所述目标数据库中,包括:对于所述源数据库中各的源ddl语句,获取各所述源ddl语句中的源库/表名称;检测各所述源ddl语句中的源库/表名称是否在预先配置的需要迁移的库/表白名单中;若在,根据预设的库表映射器,将各所述源ddl语句中的源库/表名称映射为所述目标数据库中对应的目标库/表名称;根据进度管理节点中存储的所述第二系统中已存在的目标库/表名称,判断所述各源ddl语句是否需要同步至所述第二系统的所述目标数据库中;若需要,对各所述源ddl语句分别进行语法解析和语法转换,得到转换后对应的目标ddl语句;将各所述目标ddl语句写入预设的所述内存中;判断所述内存的写入时长是否达到预设时长,或者所述内存中写入的总数据的大小是否达到预设阈值;若是,将所述内存中写入的各所述目标ddl语句写入预设的所述队列中;通过轮询所述队列,将所述队列中的各所述目标ddl语句作用在所述全量表和所述增量表中。进一步可选地,如上所述的方法中,对于所述源数据库中增加字段的源ddl语句,将所述队列中的对应地所述目标ddl语句作用在所述全量表和所述增量表中之后,所述方法还包括:在所述进度管理节点中记录各表字段在所述源数据库中所处的位置与在所述目标数据库中对应的表字段所处的位置的映射关系。进一步可选地,如上所述的方法中,若所述源数据库中的多张分表同步在所述目标数据库中为一张目标表时,对于各所述分表的增加字段的源ddl语句,将所述队列中的对应地所述目标ddl语句作用在所述全量表和所述增量表中之后,所述方法还包括:在所述进度管理节点中记录所述增加字段对应的所述分表的中间状态信息,以标识在对应的所述分表中所述增加字段已插入;和/或在各所述分表的中间状态信息中设置所述增加字段的位置值,且未插入所述增加字段的位置值设置为一个不同于正常位置值的异常值。本发明提供一种数据同步装置,所述装置包括:结构迁移单元,用于将第一系统的源数据库的结构对象迁移至第二系统的目标数据库中;全量数据迁移单元,用于将所述源数据库中预设历史时间点对应的全量数据迁移至所述目标数据库中;增量数据迁移单元,用于将所述源数据库中所述预设历史时间点后对应的实时数据批量同步至所述目标数据库中。本发明还提供一种计算机设备,所述设备包括:一个或多个处理器;存储器,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上所述的数据同步方法。本发明还提供一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的数据同步方法。本发明的数据同步方法及装置、计算机设备与可读介质,通过采用上述方案,能够实现第一系统如oltp系统至第二系统如olap系统的数据迁移和数据准实时同步,不仅能够支持结构同步,同时还支持全量同步和增量同步,方便用户快速实现同步功能。而且本发明的技术方案支持ddl语句的同步,不会因为表结构的变更而导致任务失败。同时通过在独立于第一系统和第二系统的外部的进度管理节点中存储信息,有效支持上游分表情况同步至下游一张表的场景,保证数据同步的准确性。再者,本发明的技术方案,还支持断点续传,大大减少运维人力成本。另外本发明同步过程中,通过批量写入第二系统的目标数据库中,能够减少第二系统的目标数据库的压力,提高性能,同步延迟可降至秒级别。同时本发明对源数据中的表结构限制度小,能最大程度满足用户分钟级别分析需求。【附图说明】图1为本发明的数据同步方法实施例一的流程图。图2为本实施例的数据同步方法的一种应用场景图。图3为本发明的数据同步方法实施例二的流程图。图4为本发明提供一种数据同步装置的工作示意图。图5为本发明的数据同步方法实施例三的流程图。图6为本发明的数据同步方法实施例四的流程图。图7为本实施例的数据同步方法的一种示意图。图8为本发明的数据同步方法实施例五的流程图。图9为本发明的数据同步装置实施例的结构图。图10为本发明的计算机设备实施例的结构图。图11为本发明提供的一种计算机设备的示例图。【具体实施方式】为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。基于如何将第一系统如oltp系统中的数据准实时同步至第二系统如olap系统的技术需求,现有技术中也提供有多种实现方式,最典型的为如下三种:1)开源的rds_dbsync工具的方法;在同步过程中,将开启两个进程,一个进程从oltp系统的源mysql拉取和解析binlog并存放到临时postgresql数据库中。另一个进程从临时postgresql数据库中读取增量数据,并做适当的处理,批量写入到olap系统中的目标greenplum中去。该方案将增量数据先存储在临时postgresql数据库,用于合并单条记录的多次操作,通过批量写入目的端,减少目标端的压力,提高性能。但是,该方案不支持数据库模式定义语言(datadefinitionlanguage;ddl)语句的同步,如果在同步过程中发生表结构变更,将导致同步失败。同时需要部署postgresql数据库,额外多维护一个组件,增加运维负担。2)通过数据库表中的日期字段来实现同步;该方案中,先通过select+where条件将上游源增量数据导出,再将数据写入下游olap系统。配置where子句+定时执行作业方式来同步上游增量数据,可以实现自动导出任意指定日期内的数据,如分钟、小时、天、周或者月。该方案中同样不支持ddl语句同步,限制数据表中有时间日期字段或时间戳字段,且必须保证不会更新或删除已存在的记录,这对oltp系统来说,基本很难保证适应的场景,大打折扣。3)通过实时回放上游所有执行语句来实现同步;该方案通过实时监听上游源系统的binlog文件获取到用户执行的dml语句和ddl语句,然后将上游的dml语句在目的端实时回放,达到实时同步的目的。该方案直接将上游数据操纵语言(datamanipulationlanguage;dml)语句在下游回放,表单条记录插入的效率较低,该种方式对分布式分析型数据库并不友好。基于以上所述,可以知道现有的将第一系统如oltp系统中的数据准实时同步至第二系统如olap系统的方案,仅能够实现某些局限性的数据的同步,都存在不同程度的缺陷,无法真正实现全面的数据同步。基于此,提出本发明的技术方案,来提供一种数据同步方案。图1为本发明的数据同步方法实施例一的流程图。如图1所示,本实施例的数据同步方法,具体可以包括如下步骤:100、将第一系统的源数据库的结构对象迁移至第二系统的目标数据库中;本实施例的数据同步方法的执行主体为数据同步装置,通过该数据同步装置,实现将第一系统中的源数据库中的数据同步至第二系统中的目标数据库中。图2为本实施例的数据同步方法的一种应用场景图。如图2所示,数据同步装置位于第一系统和第二系统之间,本实施例的数据同步方法都部署在该数据同步装置中,通过采用本实施例的数据同步方法,便可以将第一系统的源数据库中的数据同步至第二系统中的目标数据库中。本实施例中的第一系统和第二系统可以均采用服务器来实现,数据同步装置可以采用计算机设备来实现。101、将源数据库中预设历史时间点对应的全量数据迁移至目标数据库中;102、将源数据库中预设历史时间点后对应的实时数据批量同步至目标数据库中。具体地,本实施例中,可以将不同系统间的数据同步,分为三个层面:第一层面:存储数据的结构对象的迁移;数据在数据库中存储的时候,是按照一定的结构存储的,在数据迁移过程中,为了保证迁移后的数据也能够存储在一相对应的结构中,以便于使用,所以本实施例的第一步是将第一系统的源数据库的结构对象迁移至第二系统的目标数据库中,以为后续的数据迁移作为好准备工作。第二层面:全量数据的迁移;由于随着时间的变化,第一系统的源数据库中存储的数据是不断变化地,为了能够准确地对数据进行迁移,本实施例中,可以选取一个历史时间点,取源数据库中该历史时间点对应的全量数据,批量同步至目标数据库中。本实施例的历史时间点也可以称之为历史快照点,相当于照下来该时间点对应的全量数据,进行迁移。本实施例的历史快照点可以取当前时刻之前的任意时刻,在此不做限定。第三层面:增量数据的迁移;由于在历史时间点之后,源数据库中的数据还会经过不断地操作产生实时数据,该层面是为了保证历史时间点之后的实时数据也能够被同步到第二系统的目标数据库中。本实施例中第一系统可以为oltp系统,第二系统可以为olap系统。其中oltp系统中可以对应包括有mysql等各种类型的数据库,olap系统中对应可以包括有greenplum(也可以简称为gp)等各种类型的数据库。本实施例中以第一系统的源数据库为oltp中的mysql数据库为例,第二系统的目标数据库以olap中的greenplum数据库为例,同理,第一系统的源数据库也可以为oltp中的其他类型的数据库,第二系统的目标数据库也可以为olap中的其他类型的数据库,在此不做限定。具体地,在本实施例的第一层面中将第一系统的源数据库的结构对象迁移至第二系统的目标数据库中,具体可以包括:将第一系统的源数据库中的源库/表名称和源表中的字段类型经过映射后迁移至第二系统的目标数据库中。本实施例的源库/表名称包括源库名称和源表名称,对应地目标库/表名称包括目标库名称和目标表名称。例如,由于oltp和olap不同系统中,库名称和表名称可能并不相同,在oltp中的库1和表2,在olap中可能分别为库3和表5之类的,且对于表中的字段类型也可以标识不相同,例如,在oltp可能采用标识1表示字段类型为整型,而在olap中可能采用标识2来标识字段类型为整型。为了便于在各自的系统中能够正确识别,本实施例中需要将oltp系统的mysql数据库中的源库名称、源表名称和源表中的字段类型经过映射后迁移至olap系统的greenplum数据库中。另外,在实际应用中,oltp系统的mysql数据库中多张分表,迁移至olap系统的greenplum数据库,可以采用一张目标表来保存,也就是说,本实施例的将第一系统的源数据库中的源库/表名称和源表中的字段类型经过映射后迁移至第二系统的目标数据库中,同时能够支持实现将第一系统的源数据库中的多张分表同步至第二系统的目标数据库中的一张目标表中。图3为本发明的数据同步方法实施例二的流程图。本实施例的数据同步方法,详细介绍“将第一系统的源数据库中的源库/表名称和源表中的字段类型经过映射后迁移至第二系统的目标数据库中”的一种实现方式,如图3所示,具体可以包括如下步骤:200、从第一系统的源数据库中读取建表语句;建表语句中包括所创建的源库/表名称以及源表中的字段类型;例如该建表语句也可以被称为create语句。201、检测建表语句中所创建的源库/表名称是否在预先配置的需要迁移的库/表白名单中;若在,执行步骤202;否则返回步骤200重新读取下一条建表语句进行处理。其中若库/表白名单中未包括相应的源库或者源表,此时表示相应的源库和源表中的数据并不需要进行迁移。本实施例中的库/表白名单可以为工作人员预先配置的。202、根据预设的库表映射器,将建表语句中的源库/表名称映射为目标数据库中对应的目标库/表名称,同时根据预设的字段类型映射表,将源表中的字段类型映射为目标表中的字段类型;执行步骤203;本实施例的库表映射器可以由工作人员预先配置,其中可以包括oltp系统的mysql数据库和olap系统的greenplum中的所有库和表的名称的映射关系。这样,使用时,可以根据该库表映射器,将将建表语句中的源库/表名称映射为greenplum中对应的目标库/表名称,以便于在greenplum数据库中存储。同理,也需要预先由工作人员配置字段类型映射表,并将建表语句中的源表中的每个字段类型映射为目标表中对应的字段类型。203、根据目标库/表名称,检测预先设置的进度管理节点中存储的库/表列表中是否包括对应的目标库/表;若包括,不需要执行库表结构的迁移,此时返回步骤200,重新读取下一条建表语句进行处理。若未包括,执行步骤204;本实施例的进度管理节点独立于第一系统和第二系统来实现信息持久化存储;例如,该进度管理节点可以位于图2所述实施例中的数据同步装置中,或者还可以位于其他存储器上,只要能够保证独立于第一系统和第二系统,且信息不会丢失即可。本实施例中,由于上游的oltp系统的mysql数据库中的多张分表如128张,映射到下游的olap系统的greenplum中,仅只有一张目标表。这样,只要读取上游的一张分表,下游的目标表便建立了。此时读取后面的各种分表,不需要再重复创建对应的目标表。为了防止上游读取后面的各种分表,下游重复创建对应的目标表,本实施例中,可以在进度管理节点中存储下游即olap系统的greenplum中已经创建的库/表的名称,构成库/表列表,具体可以分为库列表和表列表。对应地,库列表中包括下游已创建的库名称,表列表中包括已创建的表名称。本实施例中,可以先从进度管理节点中获取存储的库/表列表,然后判断库/表列表中是否包括对应的目标库/表名称,若包括,此时不用再进行结构对应的迁移,若未包括,则可以继续执行后续步骤。204、对建表语句分别进行语法解析和语法转换,得到转换后的目标建表语句;执行步骤205;此时的建表语句非步骤200获取的建表语句,而是已经经过步骤202已经经过库/表名称映射后的建表语句。本实施例中的语法解析是为了能够分析该建表语句中的每一部分的语法内容,语法转换基于语法解析来进行,在确定建表语句的每一部分语法内容后,将相应的语法转换为适用于第二系统的目标数据库的语言,从而能够在第二系统的目标数据库中被解析和执行。需要说明的是,若建表语句包括注释和/或唯一键,此时还可以包括:对建表语句中的注释和/或唯一键分别进行语法解析和语法转换,以使得注释和唯一键能够被迁移至第二系统的目标数据库中。例如唯一键在转移时可以被转换为分布键。205、根据目标建表语句,在第二系统的目标数据库中创建对应的目标库/表;执行步骤206;具体地,就是在第二系统的目标数据库中执行目标建表语句,便能够创建对应的目标库/表。206、将目标库/表名称存入进度管理节点中。该步骤是为了保证目标库/表名称的持久化。图4为本发明提供一种数据同步装置的工作示意图。如图4所示,本实施例的数据同步装置中,上述三个步骤100、101和102可以均由reader模块、formatter模块和writer模块来实现。首先是reader模块,该模块用于从源数据库中读取信息;接着是formatter模块,该模块用于源数据系统与目标数据系统的语法或者格式转换;最后是writer模块,该模块用于与目的第二系统进行交互完成数据的写入。具体地,该writer模块中还可以设置有生产者线程、预设大小的内存、预设长度的队列(queue)以及消费者线程。例如,图2所示实施例的步骤200采用reader模块来实现,步骤201-204采用formatter模块来实现,步骤206采用writer模块来实现。具体地,reader模块可以从oltp系统的mysql数据库中提取create语句;formatter模块将reader模块提取的create语句先通过设置有库/表白名单的库表过滤器进行过滤,通过后,再分别经过库表映射器映射、基于进度管理节点中的库/表列表进行检测,若未包括,再经过语法解析器和语法转换器,完成将所有列名称和类型信息、默认值、注释的语法解析和转换,拼接成满足olap系统的greenplum语法结构的建表语句。writer模块中生产者线程将语句丢入队列,消费者线程完成与greenplum数据库进行连接,同时创建增量表和全量表。为了实现上游多分表的情况,进度管理节点中还可以增加全局变量用于存储下游greenplum数据库中已经同步的schema_name.table_name。在writer模块写入greenplum数据库成功后,将信息保存至外部存储如zookeeper或者mysql等中。本实施例中还可以设置一个进度管理器,由该进度管理器负载将需要存储的信息都存储在外部的进度管理节点中。图5为本发明的数据同步方法实施例三的流程图。本实施例的数据同步方法,详细介绍“将源数据库中预设历史时间点对应的全量数据迁移至目标数据库中”的一种实现方式,如图4所示,具体可以包括如下步骤:300、采用多线程并发处理的方式从源数据库中获取预设历史时间点对应的全量数据中、未迁移的各数据及对应的源库/表名称;具体地,该步骤由reader模块来实现,例如reader模块采用多线程并发处理的方式从mysql数据库中获取预设历史时间点对应的全量数据中、未迁移的各数据及对应的源库/表名称。需要说明的是,若各数据中还包括有对应的主键名称和主键值时,此时可以采用多线程并发处理的方式,按照主键值由小到大的顺序分别从源数据库中的全量数据中获取未迁移的各数据及对应的源库/表名称。也就是说,读取数据的时候,是按照主键值由小到大的顺序来读取,这样,根据当前读取的数据的主键值的大小,便可以得知数据同步的进度信息。301、根据预设的库表映射器,将各数据的源库/表名称映射为目标数据库中对应的目标库/表名称;该步骤可以由formatter模块来实现。302、将各数据以及对应的目标库/表名称,写入预设的内存中;303、判断内存的写入时长是否达到预设时长,或者内存中写入的总数据的大小是否达到预设阈值;若是,执行步骤304;否则,返回步骤300继续获取数据;304、将内存中写入的各数据以及对应的目标库/表名称写入预设的队列中;执行步骤305;305、通过轮询队列,将队列中的各数据,按照对应的目标库/表名称写入至目标数据库的全量表中。对应地,步骤302-305可以由writer模块来实现,具体地,步骤302-304由生产者线程来实现,305由消费者线程来实现向目标数据库如greenplum的全量表中写入数据。从同步性能考虑,首先greenplum数据库的appendoptimized表单条记录插入的效率非常低,并不适用于类似oltp数据库同步方式,直接在将上游的dml语句下游实时回放。其次,结构同步过程中由于信息数据量比较小,效率不存在问题。然而全量和增量同步过程中批量数据可能达到千万甚至上亿的量级,写入需要一定的时间,会阻塞reader模块的数据读取以及formatter模块的数据处理。greenplum数据库采取通过一定周期批量方式写入下游数据库,需要考虑上游数据量特别大,如达上亿级别,以及下游数据库与管控节点物理位置的绝对时延,批量写入可能需要分钟级别的时间,这会阻塞reader模块的数据读取以及formatter模块的数据处理。因此,本实施例中提出在writer模块将数据写入greenplum数据库作为消费者线程与读取上游数据的生产者线程进行解耦。reader模块采用多线程并发导出的方式,将多个表的导出的数据存储到共享的队列中。如果下游写入速度特别慢,可能出现读写速度不匹配导致本地内存撑爆的问题,因此本实施例中,还设计如下限速导入数据方案,生产者线程获取从上游同步下来的数据写入内存然后返回,formatter模块继续从reader模块读取数据,然后继续同步给生产者线程,生产者线程继续写入内存,直到超过一定的周期或者写入的数据超过固定的内存大小,生产者线程再将数据写入队列中,消费者线程轮询到队列中有数据,则将数据写入下游的数据库。为防止读写速度不匹配导致内存撑爆,本实施例中,可以为队列分配固定的内存大小以及固定的长度,超过其中之一的限制,将进行循环检测并等待,限制上游同步数据的读取速度,直到消费者线程将数据消费,队列低于限制,读取才能恢复正常。对应地,该步骤305之后还包括:将写入目标数据库中的各数据的主键名称pk和主键值value存储至进度管理节点中,进度管理节点独立于第一系统和第二系统来实现信息持久化存储。进一步可选地,由于本实施例中在进度管理节点中存储有数据的主键值,这样,即使在同步过程中,发生中断,而进度管理节点中的信息是持久化的,此时还可以根据进度管理节点中的最大主键值来进行断点续传。具体地,可以在同步中断并恢复后,从进度管理节点中获取存储的最大主键值;并将最大主键值后最近邻的主键值对应的数据作为重启后数据同步的起点,以便于继续按照主键值由小到大的顺序分别从源数据库中获取未迁移的各数据,进行数据同步处理。图6为本发明的数据同步方法实施例四的流程图。本实施例的数据同步方法,详细介绍“将源数据库中预设历史时间点后对应的实时数据批量同步至目标数据库中”的一种实现方式,如图6所示,具体可以包括如下步骤:400、对于源数据库中预设历史时间点后对应的各源dml语句,获取各源dml语句中的数据的源库/表名称以及操作属性;本实施例的方案时基于预设历史时间点后对应的各源dml语句进行数据批量同步。401、根据库表映射器,将各源dml语句中的数据的源库/表名称映射为目标数据库中对应的目标库/表名称;402、将各源dml语句中的数据、对应的目标库/表名称以及操作属性,写入预设的内存中;进一步可选地,本实施例中,若各源dml语句中还包括数据的唯一键值,此时在步骤401根据预设的库表映射器,将各源dml语句中的数据的源库/表名称映射为目标数据库中对应的目标库/表名称之后,步骤402将各源dml语句中的数据、对应的目标库/表名称以及操作属性,写入预设的内存中之前,还可以包括:判断内存中是否存储有唯一键值对应的数据,若存在,删除内存中唯一键值对应的数据、对应的目标库/表名称以及操作属性。本实施例的方案中,从上游同步下来的数据会保留它的操作属性,如插入(insert;简称i),删除(delete;简称d)或者更新(update;简称u)。且在写入内存的同时,如果唯一键值和内存之前已有的数据发生重复,可以仅保留最新同步下来的数据,将之前的数据删除,确保内存中同一批次写入下游的数据唯一键值是唯一的。例如,图7为本实施例的数据同步方法的一种示意图。如图7所示的方案,即表示对于内存中同一批次写入下游的数据仅保留最新的即时间最靠后的变更数据。403、判断内存的写入时长是否达到预设时长,或者内存中写入的总数据的大小是否达到预设阈值;若是,执行步骤404;否则,返回步骤400继续获取数据;404、将内存中写入的各源dml语句中的数据、对应的目标库/表名称以及操作属性写入预设的队列中;405、通过轮询队列,将队列中的各源dml语句中的数据,按照对应的目标库/表名称以及操作属性写入至目标数据库的增量表中。本实施例中,需要在下游的数据库中创建全量表对应的增量表,该增量表相比全量表增加操作属性字段。增量同步时,需要将批量数据首先写入增量表,再根据唯一键值做类似mysql中的replaceinto操作,实现根据增量表更新全量表。该方案的前提上游需要同步的数据必须存在唯一键值。本实施例中,根据增量表更新全量表过程是由第二系统如olat系统在greenplum数据库来实现的。对用户而言,最终使用的是全量表,对增量表是无感知的。同理,该实施例的各步骤也可以通过reader模块、formatter模块和writer模块来实现。对应地,步骤400可以由read模块来实现,步骤401可以由formatter模块来实现,步骤402-405可以由writer模块来实现,具体地,步骤402-404由生产者线程来实现,405由消费者线程来实现。图8为本发明的数据同步方法实施例五的流程图。本实施例的数据同步方法,详细介绍“将源数据库中预设历史时间点后对应的实时数据批量同步至目标数据库中”的一种实现方式,如图8所示,具体可以包括如下步骤:500、对于源数据库中各源ddl语句,获取各源ddl语句中的源库/表名称;本实施例的方案时基于预设历史时间点后对应的各源ddl语句进行数据批量同步。501、检测各源ddl语句中的源库/表名称是否在预先配置的需要迁移的库/表白名单中;若在,执行步骤502;否则,若不在,返回步骤500,获取下一条源ddl语句;502、根据预设的库表映射器,将各源ddl语句中的源库/表名称映射为目标数据库中对应的目标库/表名称;执行步骤503;503、根据进度管理节点中存储的第二系统的目标数据库中已存在的目标库/表名称,判断各源ddl语句是否需要同步至第二系统的目标数据库中;若需要,执行步骤504;若不需要,返回步骤500,获取下一条源ddl语句;504、对各源ddl语句分别进行语法解析和语法转换,得到转换后对应的目标ddl语句;返回步骤505;505、将各目标ddl语句写入预设的内存中;506、判断内存的写入时长是否达到预设时长,或者内存中写入的总数据的大小是否达到预设阈值;若是,执行步骤507;否则,返回步骤500继续获取数据;507、将内存中写入的各目标ddl语句写入预设的队列中;执行步骤508;508、通过轮询队列,将队列中的各目标ddl语句作用在全量表和增量表中。需要说明的是,实际应用中,本实施例的技术方案,可以位于图6所示实施例之后执行,即可以先同步dml语句,再同步ddl语句。此时,在同步ddl语句之前,需要立即把内存中原来的dml语句数据写入到队列,然后再把ddl语句也写入队列,防止dml语句和ddl语句混在同一批次了。反之亦然,如果先同步ddl语句,再同步dml语句时,也需要现将内存中原来的ddl语句数据写入到队列,然后再把dml语句也写入队列,防止ddl语句和dml语句混在同一批次了。同理,该实施例的各步骤也可以通过reader模块、formatter模块和writer模块来实现。对应地,步骤500可以由read模块来实现,步骤501-504可以由formatter模块来实现,步骤505-508可以由writer模块来实现,具体地,步骤505-507由生产者线程来实现,508由消费者线程来实现。本实施例中,仍以第一系统的源数据库为oltp中的mysql数据库为例,第二系统的目标数据库以olap中的greenplum数据库为例,步骤504为了能够顺序将各源ddl语句转换为greenplum数据库的语法对应的语句,在每个ddl语句的语法解析中,对于每种类型和对应的关键字,需要获取如下表1所示的信息,实现对各源ddl语句的语法解析和语法转换。表1进一步,可选地,由于greenplum只支持在表字段末尾增加字段,为了兼容mysql随意位置增加字段语法,本实施例中,还可以在进度管理节点中记录各表字段在源数据库中所处的位置与在目标数据库中对应的表字段所处的位置的映射关系。例如,本实施例中,可以取增加的表字段在源数据库中的位置下标与在目标数据库中的位置下标之间的对应关系,作为相应的映射关系,从而可以实现在进度管理节点中增加保存表所有要同步的字段列greenplum与mysql对应位置映射关系。这样,后续对于每个增加字段对应的操作,formatter模块在解析时,可以去获取上游传入的具体字段下标,并根据映射关系,确定在greenplum中对应的字段位置下标,重新组装操作后传给writer模块,以保证数据更新的准确性。由于需要考虑上游是分表的情况,为了保证ddl语句的正确同步,每一个分表都维护一个表结构中间状态信息。如果所有分表只维护一个表结构的中间状态信息,第一个分表进行了加字段或者操作,那么保存的mysql下标位置和greenplum下标位置的映射关系均会根据新的位置关系发生调整,但是其余分表并不是相同的映射关系,导致根据同一映射关系插入数据时,在greenplum中插入的字段位置不对而失败。因此,本实施例中,可以在进度管理节点中记录增加字段对应的分表的中间状态信息,以标识在对应的分表中增加字段已插入。也就是说,每个分表分别维护一个中间状态信息,在该中间状态信息中标识插增加了哪个字段,对应维护一个该分表的增加的表字段在mysql下标位置与在greenplum的目标表中的下标位置的映射关系。这样的话,可以清楚得知每一个分表是否插入字段,以能够有效地保证数据同步的准确性。进一步可选地,为了解决各个分表添加字段不同步问题,每个分表的中间状态信息中还需要添加默认值属性以及对应的位置值,对于未加字段的分表数据同步至下游时,需要在formatter模块主动添加默认值以及对应的位置值。另外对于多分表修改字段类型的问题,为了下游不重复处理,在每个分表的中间状态信息也需要添加列对应的类型。因此,在进度管理节点中分表的中间状态信息格式可以为:库名1.表名1:[列名1:greenplum字段位置下标,mysql中的字段位置下标,列类型,列默认值|列名2:greenplum字段位置下标,mysql中的字段位置下标,列类型,列默认值,...];库名2.表名2:[列名1:greenplum字段位置下标,mysql中的字段位置下标,列类型,列默认值|列名2:greenplum字段位置下标,mysql中的字段位置下标,列类型,列默认值,...]。其中默认值可以根据用户传入的配置值获取。需要说明的是,在各分表中设置增加字段的位置值,对于已插入增加字段的位置值为该字段的正确位置,如可采用所处位置的下标来表示。而未插入增加字段的对应位置值可以设置为不同于正常位置值的异常值,如-1或者无穷大之类的。可选地,本实施例的方案也能够保证断点续传,在执行过程中,确保mysql中的表结构、进度管理节点中的各分表的中间状态信息、greenplum中表结构三者一致即可,在writer模块每次写入成功后,将进度管理节点中的各分表的中间状态信息保存入外部系统,当任务重启,保证数据的一致性。本实施例的数据同步方法,通过采用上述方案,能够实现第一系统如oltp系统至第二系统如olap系统的数据迁移和数据准实时同步,不仅能够支持结构同步,同时还支持全量同步和增量同步,方便用户快速实现同步功能。而且本实施例的技术方案支持ddl语句的同步,不会因为表结构的变更而导致任务失败。同时通过在外部的进度管理节点中存储信息,有效支持上游分表情况同步至下游一张表的场景,保证数据同步的准确性。再者,本实施例的技术方案,还支持断点续传,大大减少运维人力成本。另外本实施例同步过程中,通过批量写入目的端,能够减少目标端的压力,提高性能,同步延迟可降至秒级别。同时本实施例对源数据中的表结构限制度小,能最大程度满足用户分钟级别分析需求。图9为本发明的数据同步装置实施例的结构图。如图9所示,本实施例的数据同步装置,具体可以包括:结构迁移单元10用于将第一系统的源数据库的结构对象迁移至第二系统的目标数据库中;全量数据迁移单元11用于将源数据库中预设历史时间点对应的全量数据迁移至目标数据库中;增量数据迁移单元12用于将源数据库中预设历史时间点后对应的实时数据批量同步至目标数据库中。结构迁移单元10工作完成后触发全量数据迁移单元11启动,全量数据迁移单元11迁移完成后,触发增量数据迁移单元12启动。本实施例的结构迁移单元10、全量数据迁移单元11以及增量数据迁移单元12分别可以采用图4所示实施例中的reader模块、formatter模块和writer模块来实现。进一步可选地,结构迁移单元10用于:将第一系统的源数据库中的源库/表名称和源表中的字段类型经过映射后迁移至第二系统的目标数据库中。进一步可选地,结构迁移单元10用于:从第一系统的源数据库中读取建表语句;建表语句中包括所创建的源库/表名称以及源表中的字段类型;检测建表语句中所创建的源库/表名称是否在预先配置的需要迁移的库/表白名单中;若在,根据预设的库表映射器,将建表语句中的源库/表名称映射为目标数据库中对应的目标库/表名称,同时根据预设的字段类型映射表,将源表中的字段类型映射为目标表中的字段类型;根据目标库/表名称,检测预先设置的进度管理节点中存储的库/表列表中是否包括对应的目标库/表名称;进度管理节点独立于第一系统和第二系统来实现信息持久化存储;若未包括,对建表语句分别进行语法解析和语法转换,得到转换后的目标建表语句;根据目标建表语句,在第二系统的目标数据库中创建对应的目标库/表;将目标库/表名称存入进度管理节点中。进一步可选地,结构迁移单元10用于:对建表语句中的注释和/或唯一键分别进行语法解析和语法转换,以使得注释和唯一键能够被迁移至第二系统的目标数据库中。进一步可选地,全量数据迁移单元11用于:采用多线程并发处理的方式从源数据库中获取预设历史时间点对应的全量数据中、未迁移的各数据及对应的源库/表名称;根据预设的库表映射器,将各数据的源库/表名称映射为目标数据库中对应的目标库/表名称;将各数据以及对应的目标库/表名称,写入预设的内存中;判断内存的写入时长是否达到预设时长,或者内存中写入的总数据的大小是否达到预设阈值;若是,将内存中写入的各数据以及对应的目标库/表名称写入预设的队列中;通过轮询队列,将队列中的各数据,按照对应的目标库/表名称写入至目标数据库的全量表中。进一步可选地,全量数据迁移单元11用于:采用多线程并发处理的方式,按照主键值由小到大的顺序分别从源数据库中的全量数据中获取未迁移的各数据及对应的源库/表名称;对应地,还用于:将写入目标数据库中的各数据的主键名称和主键值存储至进度管理节点中,进度管理节点独立于第一系统和第二系统来实现信息持久化存储。进一步可选地,全量数据迁移单元11用于:若同步中断并恢复后,从进度管理节点中获取存储的最大主键值;将最大主键值后最近邻的主键值对应的数据作为重启后数据同步的起点,以便于继续按照主键值由小到大的顺序分别从源数据库中获取未迁移的各数据,进行数据同步处理。进一步可选地,增量数据迁移单元12用于:对于源数据库中预设历史时间点后对应的各源dml语句,获取各源dml语句中的数据的源库/表名称以及操作属性;根据库表映射器,将各源dml语句中的数据的源库/表名称映射为目标数据库中对应的目标库/表名称;将各源dml语句中的数据、对应的目标库/表名称以及操作属性,写入预设的内存中;判断内存的写入时长是否达到预设时长,或者内存中写入的总数据的大小是否达到预设阈值;若是,将内存中写入的各源dml语句中的数据、对应的目标库/表名称以及操作属性写入预设的队列中;通过轮询队列,将队列中的各源dml语句中的数据,按照对应的目标库/表名称以及操作属性写入至目标数据库的增量表中。进一步可选地,增量数据迁移单元12:若各源dml语句中还包括数据的唯一键值,判断内存中是否存储有唯一键值对应的数据,若存在,删除内存中唯一键值对应的数据、对应的目标库/表名称以及操作属性。进一步可选地,增量数据迁移单元12用于:对于源数据库中各的源ddl语句,获取各源ddl语句中的源库/表名称;检测各源ddl语句中的源库/表名称是否在预先配置的需要迁移的库/表白名单中;若在,根据预设的库表映射器,将各源ddl语句中的源库/表名称映射为目标数据库中对应的目标库/表名称;根据进度管理节点中存储的第二系统的目标数据库中已存在的目标库/表名称,判断各源ddl语句是否需要同步至第二系统的目标数据库中;若需要,对各源ddl语句分别进行语法解析和语法转换,得到转换后对应的目标ddl语句;将各目标ddl语句写入预设的内存中;判断内存的写入时长是否达到预设时长,或者内存中写入的总数据的大小是否达到预设阈值;若是,将内存中写入的各目标ddl语句写入预设的队列中;通过轮询队列,将队列中的各目标ddl语句作用在全量表和增量表中。进一步可选地,增量数据迁移单元12用于:在进度管理节点中记录增加字段在源数据库中的位置与在目标数据库中的位置的映射关系。进一步可选地,增量数据迁移单元12用于:若源数据库中的多张分表同步在目标数据库中为一张目标表时,在进度管理节点中记录增加字段对应的分表的中间状态信息,以标识在对应的分表中增加字段已插入;和/或在各分表的中间状态信息中设置增加字段的默认值,且未插入增加字段的默认值不同于已插入增加字段的默认值。本实施例的数据同步装置,通过采用上述模块实现数据同步的实现原理以及技术效果与上述相关方法实施例的实现相同,详细可以参考上述相关方法实施例的记载,在此不再赘述。图10为本发明的计算机设备实施例的结构图。如图10所示,本实施例的计算机设备,包括:一个或多个处理器30,以及存储器40,存储器40用于存储一个或多个程序,当存储器40中存储的一个或多个程序被一个或多个处理器30执行,使得一个或多个处理器30实现如上图1-图8所示实施例的数据同步方法。图10所示实施例中以包括多个处理器30为例。例如,图11为本发明提供的一种计算机设备的示例图。图11示出了适于用来实现本发明实施方式的示例性计算机设备12a的框图。图11显示的计算机设备12a仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图11所示,计算机设备12a以通用计算设备的形式表现。计算机设备12a的组件可以包括但不限于:一个或者多个处理器16a,系统存储器28a,连接不同系统组件(包括系统存储器28a和处理器16a)的总线18a。总线18a表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(isa)总线,微通道体系结构(mac)总线,增强型isa总线、视频电子标准协会(vesa)局域总线以及外围组件互连(pci)总线。计算机设备12a典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12a访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。系统存储器28a可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(ram)30a和/或高速缓存存储器32a。计算机设备12a可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34a可以用于读写不可移动的、非易失性磁介质(图11未显示,通常称为“硬盘驱动器”)。尽管图11中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如cd-rom,dvd-rom或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18a相连。系统存储器28a可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明上述图1-图9各实施例的功能。具有一组(至少一个)程序模块42a的程序/实用工具40a,可以存储在例如系统存储器28a中,这样的程序模块42a包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42a通常执行本发明所描述的上述图1-图9各实施例中的功能和/或方法。计算机设备12a也可以与一个或多个外部设备14a(例如键盘、指向设备、显示器24a等)通信,还可与一个或者多个使得用户能与该计算机设备12a交互的设备通信,和/或与使得该计算机设备12a能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口22a进行。并且,计算机设备12a还可以通过网络适配器20a与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器20a通过总线18a与计算机设备12a的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备12a使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。处理器16a通过运行存储在系统存储器28a中的程序,从而执行各种功能应用以及数据处理,例如实现上述实施例所示的数据同步方法。本发明还提供一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如上述实施例所示的数据同步方法。本实施例的计算机可读介质可以包括上述图11所示实施例中的系统存储器28a中的ram30a、和/或高速缓存存储器32a、和/或存储系统34a。随着科技的发展,计算机程序的传播途径不再受限于有形介质,还可以直接从网络下载,或者采用其他方式获取。因此,本实施例中的计算机可读介质不仅可以包括有形的介质,还可以包括无形的介质。本实施例的计算机可读介质可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、rf等等,或者上述的任意合适的组合。可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如”c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1