一种数据传输方法及装置
技术领域
本申请涉及互联网技术领域,尤其涉及一种数据传输方法及装置。
背景技术
在分布式系统中,执行任务的节点之间的数据交互很频繁,节点之间的数据交互效率决定着分布式系统的运行效率。
当节点之间进行数据交互时,为了便于接收方进行数据解析,除了有用的数据本身外,还会携带数据定义,这里的数据定义即为表示数据的含义的数据。比如,节点1向节点2传输对应的数据定义为“标识(Identity,ID)”的数据“A1B1C1”。在现有的JavaScript对象表示法(JavaScript Object Notation,JSON)、可扩展标记语言(Extensible MarkupLanguage,XML)及数据对象(Object)序列化等数据交互格式下,当传输同一数据定义对应的多个不同的数据时,数据定义也会被冗余多份传输,比如,若需要传输A1B1C1、A2B2C2、和A3B3C3这三个对应的数据定义为“ID”的数据时,传输的数据内容至少包括:“IDA1B1C1”、“ID A2B2C2”、和“ID A3B3C3”。
显然,在现有的数据交互格式下,当传输同一种数据定义对应的多个数据时,也需要对数据定义进行多次重复性的传输,从而浪费了网络传输资源,降低了数据传输效率。
发明内容
本申请实施例提供一种数据传输方法及装置,用以解决在现有的数据交互格式下,当传输同一数据定义对应的多个数据时,需要对同一数据定义进行多次重复性的传输,从而浪费了网络传输资源,降低了数据传输效率的问题。
本申请实施例提供的一种数据传输方法,包括:
第一节点确定待传输的多个数据及每个数据的数据定义;其中,存在至少两个数据的数据定义为同一种;
所述第一节点将所述数据定义作为第一数据集合、将所述多个数据作为第二数据集合传输给第二节点;其中,同一种数据定义在第一数据集合中只存在一次。
可选地,若待传输的数据定义有多种,则所述第一节点将所述第一数据集合和所述第二数据集合传输给第二节点之前,还包括:
所述第一节点按照各种数据定义在所述第一数据集合中的排列顺序,依次确定每个数据组内的各个数据的排列顺序,其中,每个数据组内包含每种数据定义下的一个数据,每个数据在所属数据组内的排列位置,与该数据的数据定义在所述第一数据集合中的排列位置相同。
可选地,所述第一节点将所述第一数据集合放置在第一数据文件中,将所述第二数据集合放置在第二数据文件中传输给第二节点。
可选地,所述第一节点将所述第一数据集合和第二数据集合采用分隔符隔离,放置在同一个数据文件中传输给第二节点。
本申请实施例提供的一种数据传输装置,包括:
确定模块,用于确定待传输的多个数据及每个数据的数据定义;其中,存在至少两个数据的数据定义为同一种;
传输模块,用于将所述数据定义作为第一数据集合、将所述多个数据作为第二数据集合传输给第二节点;其中,同一种数据定义在第一数据集合中只存在一次。
本申请实施例提供的一种数据传输系统,包括:
第一节点,用于确定待传输的多个数据及每个数据的数据定义;其中,存在至少两个数据的数据定义为同一种;将所述数据定义作为第一数据集合、将所述多个数据作为第二数据集合传输给第二节点;其中,同一种数据定义在第一数据集合中只存在一次;
第二节点,用于接收第一节点发送的所述第一数据集合和第二数据集合,根据所述第一数据集合包含的至少一种数据定义,确定所述第二数据集合中的每个数据的数据定义。
通过上述数据传输方法或装置,第一节点确定待传输的多个数据及每个数据的数据定义后,将所述数据定义作为第一数据集合、将所述多个数据作为第二数据集合传输给第二节点,同一种数据定义在第一数据集合中只存在一次。通过本申请实施例,当节点之间需要传输对应同一数据定义的多个数据时,只需传输这多个数据及一个数据定义即可,而无需在传输每个数据时都携带上其对应的数据定义,从而可以减少数据传输量,节省网络传输资源,并提高数据传输效率。
附图说明
图1为本申请实施例一提供的数据传输方法流程图;
图2为本申请实施例二提供的数据传输方法流程图;
图3为本申请实施例三提供的数据传输装置结构示意图;
图4为本申请实施例四提供的数据传输系统结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
实施例一
如图1所示,为本申请实施例一提供的数据传输方法流程图,包括:
S101:第一节点确定待传输的多个数据及每个数据的数据定义;其中,存在至少两个数据的数据定义为同一种。
在分布式系统中,当上一级节点向下一级节点传输数据,或各个并行节点之间相互传输数据时,首先确定待传输的每个数据及每个数据对应的数据定义,比如,待传输的数据定义及数据为:“IDA1B1C1”、“ID A2B2C2”、和“ID A3B3C3”,其中,“A1B1C1”、“A2B2C2”、和“A3B3C3”为数据,“用户ID”为数据定义。
S102:第一节点将所述数据定义作为第一数据集合、将所述多个数据作为第二数据集合传输给第二节点;其中,同一种数据定义在第一数据集合中只存在一次。
该步骤中,并不按照现有的数据交互格式,将每一个数据的数据定义和该数据一起都进行传输,而是将各种数据定义整体作为一个数据集合(每种数据定义在第一数据集合中只出现一次),将各个数据整体作为一个数据集合,将两者隔离进行传输。隔离的方式可以是将第一数据集合和第二数据集合分别采用不同的数据文件进行传输,或者,可以在一个数据文件中,将第一数据集合和第二数据集合采用分隔符隔离后进行传输。
S103:第二节点根据接收的第一数据集合中包含的至少一种数据定义,确定所述第二数据集合中的每个数据的数据定义。
在具体实施过程中,第二节点在接收到第一数据集合和第二数据集合后,为第二数据集合中的每个数据匹配数据定义,若第一数据集合中只包含一种数据定义,则可以将这一种数据定义确定为第二数据集合中的各个数据的数据定义;
若第一数据集合中包含多种数据定义,则第一节点可以按照各种数据定义分别与数据的对应关系,将多种数据定义排列在第一数据集合中,将多个数据排列在第二数据集合中。具体地,第一节点可以按照默认的规则确定各种数据定义在第一数据集合中的排列位置,以及确定各个数据在第二数据集合中的排列位置,第一节点也可以在第一数据集合或第二数据集合中指示数据与其对应的数据定义的排列位置之间的关系。
具体地,第二节点可以按照第一数据集合中的各种数据定义的排列顺序,以及第二数据集合中的各个数据在所属数据组内的排列顺序,确定每个数据的数据定义。或者,第一节点可以在第一数据集合中标注每种数据定义对应的各个数据的编号,或者,在第二数据集合中标注每个数据对应的数据定义的编号;比如,第一节点在第一数据集合中的每种数据定义后标注上匹配该数据定义的数据的编号,并将各个数据按照编号由大到小或由小到大的顺序排列在第二数据集合中,再比如,第一节点在第二数据集合中标注每个数据对应的数据定义的编号,并将各种数据定义按照编号由大到小或由小到大的顺序排列在第一数据集合中。但在第一数据集合或第二数据集合中添加编号的方式会增加数据的编号这种数据的传输量,因此在实际实施中还是优选第一种方式。
通过上述数据传输方法或装置,第一节点确定待传输的多个数据及每个数据的数据定义后,将待传输的至少一种数据定义作为第一数据集合、将所述多个数据作为第二数据集合传输给第二节点。通过本申请实施例,当节点之间需要传输对应同一数据定义的多个数据时,只需传输这多个数据及一个数据定义即可,而无需在传输每个数据时都携带上其对应的数据定义,从而可以减少数据传输量,节省网络传输资源,并提高数据传输效率。
下面通过一个具体的实施例对本申请实施例进行数据传输的思想作进一步说明。
实施例二
如图2所示,为本申请实施例二提供的数据传输方法流程图,包括:
S201:第一节点确定待传输的多个数据及每个数据的数据定义;其中,存在至少两个数据的数据定义为同一种。
这里,数据定义是指数据的含义,比如,第一节点确定需要传输两组数据,一组数据包括:数据定义“Id”及对应的数据“A1B1C1”、数据定义“value”及对应的数据“你好1””,另一组数据包括:数据定义“Id”及对应的数据“A2B2C2”、数据定义“value”及对应的数据“你好2”。按照现有的对象序列化的数据交互格式,传输数据的计算机语言如下:
class DO implementsSerializable{
int id;
String value;
}
DO do1=new DO;
do1.setId(A1B1C1);
do1.setValue(“你好1”);
DO do2=new DO;
do2.setId(A2B2C2);
do2.setValue(“你好2”);
显然,在上述数据交互格式中,“Id”、“value”这两种数据定义将被重复多次传输,而在本申请实施例中,只传输一次“Id”、“value”,具体传输方式见下述步骤。
S202:第一节点按照各种数据定义在所述第一数据集合中的排列顺序,依次确定每个数据组内的各个数据的排列顺序,其中,每个数据组内包含每种数据定义下的一个数据,每个数据在所属数据组内的排列位置,与该数据的数据定义在所述第一数据集合中的排列位置相同。
该步骤中,为了便于第二节点为第二数据集合中的数据匹配正确的数据定义,将第一数据集合中的每个数据定义按顺序进行排列,并将第二数据集合中每个数据组内的各个数据按照对应数据定义的顺序进行排列。这里,一个数据组内的数据的数目与第一数据集合中数据定义的数目相同,并且在一个数据组中不同的数据对应不同的数据定义。
比如,当传输在数据定义“Id”和“value”(对应用户Id的属性信息)下的多个数据时,传输的数据格式可以为:
val schema=Array(“id”,“value”)
val values=Array((“A1B1C1”,“你好1”),(“A2B2C2”,“你好2”)…)
第二节点通过schema解析文件,获知在第二数据集合中,是按照两种数据定义(“id”,“value”)存储对应的数据的。也即,在第二数据集合中,每个数据组内第一个数据是“id”这一数据定义下的数据,第二个数据是“value”这一数据定义下的数据。通过这种数据格式可以节省传输的数据定义的数量。
再比如,当传输的数据格式如下时:
val schema=Array((“id”,“value”),(“linkid”,“objectIds”))
val values=Array((“A1B1C1”,“你好1”),(“linkid1”,“objectIds1”),(“A2B2C2”,“你好2”),(“linkid2”,“objectIds2”)…)
第二节点通过schema解析文件,获知在第二数据集合中,是按照数据定义(“id”,“value”)、(“linkid”,“objectIds”)存储对应的数据的,(“A1B1C1”,“你好1”),(“linkid1”,“objectIds1”)为第一个数据组,(“A2B2C2”,“你好2”),(“linkid2”,“objectIds2”)为第二个数据组。
S203:第一节点将所述数据定义作为第一数据集合、将所述多个数据作为第二数据集合传输给第二节点。
方式一:
所述第一节点将所述第一数据集合放置在第一数据文件中,将所述第二数据集合放置在第二数据文件中传输给第二节点。
在该方式下,第一节点将第一数据集合和第二数据集合分别放置在不同的数据文件中进行传输,也即将第一数据集合作为一个独立的数据文件,将第二数据集合作为一个独立的数据文件,并约定先后传输的两个数据文件哪个文件中是数据定义,哪个文件中是数据。这样,第二节点在接收到第一数据文件和第二数据文件后,就知道具体哪些数据内容是数据,哪些数据内容是数据定义了。
方式二:
所述第一节点将所述第一数据集合和第二数据集合采用分隔符隔离,放置在同一个数据文件中传输给第二节点。
在该方式下,第一节点可以将第一数据集合和第二数据集合都放置在同一数据文件中,并将两者采用预设的分隔符隔离开,这样,第二节点在接收到该数据文件后,基于该预设的分隔符,可以区分哪些数据是数据,哪些数据是数据定义。
S204:第二节点根据所述第一数据集合包含的至少一种数据定义,确定所述第二数据集合中的每个数据的数据定义。
具体地,若所述第一数据集合中包含一种数据定义,则将这一种数据定义确定为所述第二数据集合中的各个数据的数据定义;
若所述第一数据集合中包含多种数据定义,则按照所述第一数据集合中的各种数据定义的排列顺序,以及所述第二数据集合中的各个数据在所属数据组内的排列顺序,确定每个数据的数据定义;其中,每个数据在所属数据组内的排列位置,与该数据的数据定义在所述第一数据集合中的排列位置相同。
基于同一发明构思,本申请实施例中还提供了一种与数据传输方法对应的数据传输装置,由于该装置解决问题的原理与本申请实施例数据传输方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
实施例三
如图3所示,为本申请实施例三提供的数据传输装置结构示意图,包括:
确定模块31,用于确定待传输的多个数据及每个数据的数据定义;其中,存在至少两个数据的数据定义为同一种;
传输模块32,用于将所述数据定义作为第一数据集合、将所述多个数据作为第二数据集合传输给第二节点;其中,同一种数据定义在第一数据集合中只存在一次。
可选地,若待传输的数据定义有多种,则所述传输模块32具体用于:
在将所述第一数据集合和所述第二数据集合传输给第二节点之前,按照各种数据定义在所述第一数据集合中的排列顺序,依次确定在所述第二数据集合中每个数据组内的各个数据的排列顺序,其中,每个数据组内包含每种数据定义下的一个数据,每个数据在所属数据组内的排列位置,与该数据的数据定义在所述第一数据集合中的排列位置相同。
可选地,所述传输模块32具体用于:
将所述第一数据集合放置在第一数据文件中,将所述第二数据集合放置在第二数据文件中传输给第二节点。
可选地,所述传输模块32具体用于:
将所述第一数据集合和第二数据集合采用分隔符隔离,放置在同一个数据文件中传输给第二节点。
实施例四
如图4所示,为本申请实施例四提供的数据传输系统40结构示意图,包括:
第一节点41,用于确定待传输的多个数据及每个数据的数据定义;其中,存在至少两个数据的数据定义为同一种;将所述数据定义作为第一数据集合、将所述多个数据作为第二数据集合传输给第二节点;其中,同一种数据定义在第一数据集合中只存在一次;
第二节点42,用于接收第一节点发送的所述第一数据集合和第二数据集合,根据所述第一数据集合包含的至少一种数据定义,确定所述第二数据集合中的每个数据的数据定义。
可选地,所述第一节点41具体用于:按照各种数据定义在所述第一数据集合中的排列顺序,依次确定在所述第二数据集合中每个数据组内的各个数据的排列顺序,其中,每个数据组内包含每种数据定义下的一个数据,每个数据在所属数据组内的排列位置,与该数据的数据定义在所述第一数据集合中的排列位置相同;
所述第二节点42具体用于:在所述第一数据集合中包含一种数据定义时,将这一种数据定义确定为所述第二数据集合中的各个数据的数据定义;在所述第一数据集合中包含多种数据定义时,按照所述第一数据集合中的各种数据定义的排列顺序,以及所述第二数据集合中的各个数据在所属数据组内的排列顺序,确定每个数据的数据定义。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。