CN107861885A - 一种数据传输方法及传输装置 - Google Patents
一种数据传输方法及传输装置 Download PDFInfo
- Publication number
- CN107861885A CN107861885A CN201711084194.8A CN201711084194A CN107861885A CN 107861885 A CN107861885 A CN 107861885A CN 201711084194 A CN201711084194 A CN 201711084194A CN 107861885 A CN107861885 A CN 107861885A
- Authority
- CN
- China
- Prior art keywords
- character
- data block
- current
- data
- row
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种数据传输方法及传输装置,包括:预先获取至少一个逗号分隔值CSV文件;接收外部输入的导出指令;根据所述导出指令,从所述至少一个CSV文件中确定出待导出CSV文件;确定所述待导出CSV文件中的数据量;根据所述数据量,将所述待导出CSV文件拆分为至少两个数据块;依次将每一个所述数据块映射到内存中;依次对映射在内存中的所述数据块进行处理;根据所述导出指令,将处理后所产生的待导出数据发送给指定目标。本方案能够提高应用程序处理数据的速度。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种数据传输方法及传输装置。
背景技术
随着计算机、通信和信息技术的迅速发展和广泛应用,人类正在进入信息化社会,世界各地的人们通过建立网络,相互间可以自由而廉价地利用别人的资源,实现相互间不同地域、不同时间的数据共享,而在共享数据时如何快速的传输数据已经越来越引起人们的关注。
目前,大多数的数据库支持将数据导出为逗号分隔值(Comma-Separated Values,CSV)文件,再将导出的CSV文件加载到缓存中进行处理。但是,当CSV文件中的数据量比较大时,会使得应用程序在处理CSV文件中的数据时占用过多的内存,从而导致应用程序处理数据的效率降低。
发明内容
本发明实施例提供了一种数据传输方法及传输装置,能够提高应用程序处理数据的速度。
第一方面,本发明实施例提供了一种数据传输方法,包括:
预先获取至少一个逗号分隔值CSV文件;
接收外部输入的导出指令;
根据所述导出指令,从所述至少一个CSV文件中确定出待导出CSV文件;
确定所述待导出CSV文件中的数据量;
根据所述数据量,将所述待导出CSV文件拆分为至少两个数据块;
依次将每一个所述数据块映射到内存中;
依次对映射在内存中的所述数据块进行处理;
根据所述导出指令,将处理后所产生的待导出数据发送给指定目标。
优选地,所述依次将每一个所述数据块映射到内存中,包括:
分别确定每一个所述数据块对应的映射顺序,并将所述映射顺序中的第一个所述数据块作为当前数据块;
根据所述映射顺序,将所述当前数据块映射到内存中;
所述依次对映射在内存中的所述数据块进行处理,包括:
获取映射在内存中的所述当前数据块对应的内存地址;
根据所述内存地址,获取所述当前数据块中的内容;
解析获取的所述当前数据块中的内容;
根据所述映射顺序,确定是否存在未获取的所述数据块;
如果是,根据所述映射顺序,将所述当前数据块的下一个数据块作为当前数据块,执行将所述当前数据块对应的当前地址映射到内存中。
优选地,在所述解析获取的所述当前数据块之前,进一步包括:
设置字段缓存、行缓存和多行缓存;
所述解析获取的所述当前数据块中的内容,包括:
S0:确定获取所述当前数据块中每一个字符的字符顺序,并将所述字符顺序中第一个字符作为当前字符;
S1:确定获取的所述当前字符是否为双引号中的前引号,如果是,执行步骤S2,否则执行步骤S3;
S2:根据所述字符顺序,获取每一个所述字符,在遇到与所述前引号相对应的后引号时,将所述前引号与所述后引号内由各个所述字符组成的字段加入到所述字段缓存中,并根据所述字符顺序,将所述后引号的下一个字符作为当前字符,返回S0;
S3:确定所述当前字符是否为分隔符,如果是,执行步骤S4,否则,执行步骤S5;
S4:将所述字段缓存中,在所述分隔符之前的所述字段加入到所述行缓存中,并根据所述字符顺序,将所述分隔符的下一个所述字符作为当前字符,返回S0;
S5:确定所述当前字符是否为换行符,如果是,执行步骤S6,否则,执行步骤S7;
S6:将所述行缓存中,在所述换行符之前由各个所述字段组成的当前数据行加入到所述多行缓存中,根据所述字符顺序,将所述换行符的下一个所述字符作为当前字符,返回S0;
S7:将所述当前字符加入到所述字段缓存中,根据所述字符顺序,将所述当前字符的下一个所述字符作为当前字符,返回S0。
优选地,在所述换行符之前由各个所述字段组成的当前数据行加入到所述多行缓存中之后,进一步包括:
确定所述当前数据行是否为所述待导出CSV文件中的第一行;
如果不是,判断所述当前数据行与所述当前数据行的上一个数据行的列式是否一致;
如果不一致,则停止解析当前数据块。
优选地,在所述依次对映射在内存中的所述数据块进行处理之后,在所述将处理后所产生的待导出数据发送给指定目标之前,进一步包括:
确定所述待导出数据是否达到预设发送值;
如果是,触发生成轻量级的数据交换格式JSON文件;
将生成的所述JSON文件发送给指定目标。
第二方面,本发明实施例提供了一种数据传输装置,包括:
获取单元,用于预先获取至少一个逗号分隔值CSV文件;接收外部输入的导出指令;
确定单元,用于根据所述获取单元接收的所述导出指令,从所述获取单元获取的所述至少一个CSV文件中确定出待导出CSV文件;确定所述待导出CSV文件中的数据量;
处理单元,用于根据所述确定单元确定的所述数据量,将所述待导出CSV文件拆分为至少两个数据块;依次将每一个所述数据块映射到内存中;依次对映射在内存中的所述数据块进行处理;
发送单元,用于根据所述获取单元获取的所述导出指令,将通过所述处理单元处理后所产生的待导出数据发送给指定目标。
优选地,所述处理单元,用于分别确定每一个所述数据块对应的映射顺序,并将所述映射顺序中的第一个所述数据块作为当前数据块;根据所述映射顺序,将所述当前数据块映射到内存中;获取映射在内存中的所述当前数据块对应的内存地址;根据所述内存地址,获取所述当前数据块中的内容;解析获取的所述当前数据块中的内容;根据所述映射顺序,确定是否存在未获取的所述数据块;如果是,根据所述映射顺序,将所述当前数据块的下一个数据块作为当前数据块,执行将所述当前数据块对应的当前地址映射到内存中。
优选地,所述处理单元,进一步用于设置字段缓存、行缓存和多行缓存;
S0:确定获取所述当前数据块中每一个字符的字符顺序,并将所述字符顺序中第一个字符作为当前字符;
S1:确定获取的所述当前字符是否为双引号中的前引号,如果是,执行步骤S2,否则执行步骤S3;
S2:根据所述字符顺序,获取每一个所述字符,在遇到与所述前引号相对应的后引号时,将所述前引号与所述后引号内由各个所述字符组成的字段加入到所述字段缓存中,并根据所述字符顺序,将所述后引号的下一个字符作为当前字符,返回S0;
S3:确定所述当前字符是否为分隔符,如果是,执行步骤S4,否则,执行步骤S5;
S4:将所述字段缓存中,在所述分隔符之前的所述字段加入到所述行缓存中,并根据所述字符顺序,将所述分隔符的下一个所述字符作为当前字符,返回S0;
S5:确定所述当前字符是否为换行符,如果是,执行步骤S6,否则,执行步骤S7;
S6:将所述行缓存中,在所述换行符之前由各个所述字段组成的当前数据行加入到所述多行缓存中,根据所述字符顺序,将所述换行符的下一个所述字符作为当前字符,返回S0;
S6:将所述当前字符加入到所述字段缓存中,根据所述字符顺序,将所述当前字符的下一个所述字符作为当前字符,返回S0。
优选地,所述处理单元,进一步用于确定所述当前数据行是否为所述待导出CSV文件中的第一行;如果不是,判断所述当前数据行与所述当前数据行的上一个数据行的列式是否一致;如果不一致,则停止解析当前数据块。
优选地,所述处理单元,进一步用于确定所述待导出数据是否达到预设发送值;如果是,触发生成轻量级的数据交换格式JSON文件;
所述发送单元,用于将所述处理单元生成的所述JSON文件发送给指定目标。
在本发明实施例中,在根据导出指令确定出待导出CSV文件后,不是将待导出CSV文件加载到内存中进行解析处理,而是根据待导出CSV文件中的数据量,将待导出CSV文件拆分为数据块,再采用内存文件映射的方式,分别加载数据块进行处理,将数据块处理后所产生的待导出数据发送给指定目标,完成数据的传输。综上可见,将待导出CSV文件分成数据块,且采用内存映射的方式处理各个数据块,可以避免应用程序在处理数据时占用太多的内存,从而可以提高应用程序处理数据的效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例提供的一种数据传输方法的流程图;
图2是本发明一实施例提供的另一种数据传输方法的流程图;
图3是本发明一实施例提供的一种数据传输装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明实施例提供了一种数据传输方法,包括:
步骤101:预先获取至少一个逗号分隔值CSV文件;
步骤102:接收外部输入的导出指令;
步骤103:根据所述导出指令,从所述至少一个CSV文件中确定出待导出CSV文件;
步骤104:确定所述待导出CSV文件中的数据量;
步骤105:根据所述数据量,将所述待导出CSV文件拆分为至少两个数据块;
步骤106:依次将每一个所述数据块映射到内存中;
步骤107:依次对映射在内存中的所述数据块进行处理;
步骤108:根据所述导出指令,将处理后所产生的待导出数据发送给指定目标。
在本发明实施例中,在根据导出指令确定出待导出CSV文件后,不是将待导出CSV文件加载到内存中进行解析处理,而是根据待导出CSV文件中的数据量,将待导出CSV文件拆分为数据块,再采用内存文件映射的方式,分别加载数据块进行处理,将数据块处理后所产生的待导出数据发送给指定目标,完成数据的传输。综上可见,将待导出CSV文件分成数据块,且采用内存映射的方式处理各个数据块,可以避免应用程序在处理数据时占用太多的内存,从而可以提高应用程序处理数据的效率。
在本发明一实施例中,所述依次将每一个所述数据块映射到内存中,包括:
分别确定每一个所述数据块对应的映射顺序,并将所述映射顺序中的第一个所述数据块作为当前数据块;
根据所述映射顺序,将所述当前数据块映射到内存中;
所述依次对映射在内存中的所述数据块进行处理,包括:
获取映射在内存中的所述当前数据块对应的内存地址;
根据所述内存地址,获取所述当前数据块中的内容;
解析获取的所述当前数据块中的内容;
根据所述映射顺序,确定是否存在未获取的所述数据块;
如果是,根据所述映射顺序,将所述当前数据块的下一个数据块作为当前数据块,执行将所述当前数据块对应的当前地址映射到内存中。
在本发明实施例中,在将数据块映射到内存中后,如需获取数据块中的内容,需要获取数据块对应的内存地址,根据内存地址即可获取对应的数据块中的内容,而在将各个数据块映射到内存中时,采取的是分次映射的方式,在内存中所映射的数据块被获取、解析后,会释放内存中映射的数据块,再继续映射下一个数据块。综上可见,通过分次映射数据块、分次解析数据块,可以在解析数据块后及时释放内存,避免应用程序占用太多内存,从而达到处理数据占用内存少的目的。
在本发明一实施例中,在所述解析获取的所述当前数据块之前,进一步包括:
设置字段缓存、行缓存和多行缓存;
所述解析获取的所述当前数据块中的内容,包括:
S0:确定获取所述当前数据块中每一个字符的字符顺序,并将所述字符顺序中第一个字符作为当前字符;
S1:确定获取的所述当前字符是否为双引号中的前引号,如果是,执行步骤S2,否则执行步骤S3;
S2:根据所述字符顺序,获取每一个所述字符,在遇到与所述前引号相对应的后引号时,将所述前引号与所述后引号内由各个所述字符组成的字段加入到所述字段缓存中,并根据所述字符顺序,将所述后引号的下一个字符作为当前字符,返回S0;
S3:确定所述当前字符是否为分隔符,如果是,执行步骤S4,否则,执行步骤S5;
S4:将所述字段缓存中,在所述分隔符之前的所述字段加入到所述行缓存中,并根据所述字符顺序,将所述分隔符的下一个所述字符作为当前字符,返回S0;
S5:确定所述当前字符是否为换行符,如果是,执行步骤S6,否则,执行步骤S7;
S6:将所述行缓存中,在所述换行符之前由各个所述字段组成的当前数据行加入到所述多行缓存中,根据所述字符顺序,将所述换行符的下一个所述字符作为当前字符,返回S0;
S7:将所述当前字符加入到所述字段缓存中,根据所述字符顺序,将所述当前字符的下一个所述字符作为当前字符,返回S0。
在本发明实施例中,CSV文件中,对应双引号有特殊的使用,一对双引号中间的内容为一个字段的内容,里面可以包括换行符或分隔符,所以在解析各个数据块时,需要确定每一个字符的所表达的含义,当且仅当在双引号外的分隔符表示为一个字段的结束,以及在双引号外的换行符表示为一个数据行的结束。综上可见,在解析数据块时,通过每一个字符所表示的含义,来确定数据块中数据的格式,可以避免数据块在解析后出现数据格式出现变动,而导致接收方在接收到数据时无法使用。
在本发明一实施例中,在所述换行符之前由各个所述字段组成的当前数据行加入到所述多行缓存中之后,进一步包括:
确定所述当前数据行是否为所述待导出CSV文件中的第一行;
如果不是,判断所述当前数据行与所述当前数据行的上一个数据行的列式是否一致;
如果不一致,则停止解析当前数据块。
在本发明实施例中,在当前数据块已被解析的数据行的个数大于等于2时,需要确定相邻的两个数据行的列式是否一致,可以避免解析后出现每行数据的格式不一致的情况,而在确定相邻的两行数据的数据列不一致时,则应停止解析当前数据块来,避免接收方在接收到解析后的数据而无法使用的情况。
在本发明一实施例中,在所述依次对映射在内存中的所述数据块进行处理之后,在所述将处理后所产生的待导出数据发送给指定目标之前,进一步包括:
确定所述待导出数据是否达到预设发送值;
如果是,触发生成轻量级的数据交换格式JSON文件;
将生成的所述JSON文件发送给指定目标。
在本发明实施例中,由于将数据通过网络发送出去的时间不可预期,所以在解析当前数据块后所产生的待导出数据的数据量达到一定预设发送值时,触发生成JSON文件,并将JSON文件发送给指定目标,而在解析当前数据块和生成JSON文件可以分在不同的线程处理,从而可以加快处理待导出CSV文件的速度。
如图2所示,为了更加清楚的说明本发明的技术方案及优点,对本发明实施例提供了一种数据传输方法进行详细说明,具体可以包括以下步骤:
步骤201:在获取到外部输入的导出指令时,从预先获取的至少一个CSV文件中确定出与导出指令对应的待导出CSV文件。
具体地,如需传输数据,则需要向应用程序发送指令,以使应用程序根据指令来确定需要传输的数据。
举例来说,预先获取CSV文件a和CSV文件b;
在接收外部输入的将CSV文件a导出的指令,确定预先获取的CSV文件a为待导出文件a。
步骤202:确定待导出CSV文件中的数据量。
具体地,在文件的传输中,需要确定所要传输的文件的大小,避免文件过大,而导致应用程序在处理文件时占用过多内存。
举例来说,确定待导出CSV文件a的数据量为40GB。
步骤203:根据确定出的数据量,将待导出CSV文件拆分为至少两个数据块。
具体地,为了避免所要传输的文件过大而导致应用程序占用太多内存,在确定出文件的数据量后,如果大于预设的传输值,则需要将待导出CSV文件拆分为数据块,通过传输各个数据块来降低应用程序所占用的内存,同时也能提高应用程序处理待导出CSV文件的速度。
举例来说,预设的传输值为30GB;
待导出CSV文件a的数据量为40GB,所以将待导出CSV文件a拆分为数据块1和数据块2。
步骤204:依次映射每一个数据块到内存中。
具体地,为了避免应用程序在处理各个数据块时占用过多的内存,在映射数据块时,不是将所有的数据块全部映射到内存中,而是采取每次映射一块数据块到内存的方式,通过分次映射数据块的方式,可以在映射的数据被解析后及时释放内存,避免应用程序在处理数据块时占用过多的内存,从而能够提高处理数据块速度的目的。
举例来说,先将数据块1映射到内存中,在数据块1解析完之后,再将数据块2映射到内存中。
步骤205:获取映射在内存中的数据块所对应的内存地址,根据内存地址获取对应的数据块。
具体地,在获取数据块时,根据数据块所对应的内存地址,即可从磁盘中获取对应的数据块,可以避免将数据块加载到内存中,从而可以减少数I/O操作,实现提高处理数据块效率的目的。
举例来说,获取数据块1的内存地址q1;
根据内存地址q1获取数据块1中第一行数据“a,b”和第二行数据ABC。
步骤206:针对每一个数据块中的当前数据块,确定获取当前数据块中每一个字符的字符顺序,并将字符顺序中第一个字符作为当前字符。
具体地,在获取当前数据块后,需要根据数据块中每一个字符的生成顺序依次解析每一个字符,避免遗漏某些字符而导致解析后的数据块无法被识别。
举例来说,确定获取数据块1中第一行数据“a,b”和第二行数据ABC各个字符的字符顺序为从上到下,从左到后。
步骤207:确定解析的当前字符是否为双引号中的前引号,如果是,执行步骤208,否则执行步骤209。
具体地,在解析每一个字符时,需要先确定该字符的所表示的含义,根据字符所表示的含义来确定数据块中数据的格式。
举例来说,在数据块1中的当前字符“为双引号中的前引号,所以将“”中的a,b加入到预设的字段缓存中。
步骤208:获取双引号中的每一个字符,将由各个字符组成的字段加入到预设的字段缓存中,并根据字符顺序,将后引号的下一个字符作为当前字符,返回步骤207。
具体地,CSV文件中,对应双引号有特殊的使用,一对双引号中间的内容为一个字段的内容,里面可以包括换行符或分隔符,所以在解析各个数据块时,需要确定每一个字符的所表达的含义。
步骤209:确定当前字符是否为分隔符,如果是,执行步骤210,否则,执行步骤211。
具体地,在确定当前字符不是双引号中的前引号时,需要确定当前字符是否为分隔符,如果是,则表示一个字段结束,否则,需要确定当前字符是否为换行符,根据当前字符所表示的含义来确定当前数据块中数据的格式,可以避免数据块在解析后出现数据格式变动,而导致接收方在接收到数据时无法使用。
步骤210:将字段缓存中在分隔符之前的字段加入到预设的行缓存中,并根据字符顺序,将分隔符的下一个字符作为当前字符,返回步骤207。
具体地,在确定当前字符为分隔符时,则表示一个字段的结束,需要将分隔符前的字段加入到行缓存中。
步骤211:确定当前字符是否为换行符,如果是,执行步骤212,否则执行步骤213。
具体地,在确定当前字符不是双引号或分隔符时,需要确定当前字符是否为换行符,当且仅当在当前字符为换行符时,可以确定数据块中的当前数据行解析完毕。
步骤212:将行缓存中在换行符之前由各个字段组成的当前数据行加入到预设的多行缓存中,执行步骤214。
具体地,在确定当前字符为换行符时,表示数据块中的当前数据行已解析完毕。
步骤213:将当前字符加入到字段缓存中,并根据字符顺序,将当前字符的下一个字符作为当前字符,返回步骤207。
具体地,在确定当前字符不是双引号、分隔符或换行符时,则确定当前字符为普通字符,所以可以将当前字符加入到字段缓存中。
步骤214:确定已被解析的数据行的数量是否大于等于2。
具体地,在CSV文件中,每行有相同的数据列,所以在解析已解析的数据行的数量大于等于2时,才可以确定每行数据的数据列是否一致。
步骤215:当已解析的数据行的数量大于等于2时,确定当前数据行与当前数据行的上一个数据行的列式是否一致,如果是,执行步骤216,否则执行步骤219。
具体地,在确定已解析的数据行的数量大于等于2时,需要将当前数据行与上一个数据行进行对比,确定两个数据行的列式是否一致,避免解析后的数据行之间的列式不一致而导致接收方无法使用该数据。
举例来说,在确定数据快1已解析的数据行的数量等于2时,将已解析完的第二行数据与第一行数据列式进行对比,如果两行数据的列式一致,则可以确定已解析的数据是否达到预设发送值,否则,应停止解析。
步骤216:确定解析后所产生的待导出数据的数据量是否达到预设发送值。
具体地,由于将数据通过网络发送出去的时间不可预期,所以在将已解析的当前数据行与上一个数据行的数列之后,需要确定已解析的数据量是否满足发送的条件,当且仅当在满足预设的条件时,则将数据发送给指定目标,否则需要继续解析待导出数据。
举例来说,预设的发送值为2行数据;
数据块1已解析的数据为两行,所以满足预设发送值。
步骤217:当待导出数据的数据量达到预设发送值时,触发生成JSON文件。
具体地,为了提高待导出数据的接收方获取待导出数据的速度,在确定已解析的待导出数据达到预设发送值时,需要将已解析的待导出数据以JSON格式发送给指定目标。
步骤218:根据导出指令,将生成的JSON文件发送给指定目标。
具体地,在将待导出数据发送出去之前,需要确定待导出数据的接收方,而待导出数据的接收方根据接收到的导出指令即可确定。
步骤219:否则停止解析当前数据块。
具体地,在将当前数据行与上一个数据行进行对比,当两个数据行的列式不一致时,应停止解析当前数据块,避免待导出数据的接收方在获取待导出数据后无法使用该数据。
如图3所示,本发明实施例提供了一种数据传输装置,包括:
获取单元301,用于预先获取至少一个逗号分隔值CSV文件;接收外部输入的导出指令;
确定单元302,用于根据所述获取单元301接收的所述导出指令,从所述获取单元获取的所述至少一个CSV文件中确定出待导出CSV文件;确定所述待导出CSV文件中的数据量;
处理单元303,用于根据所述确定单元302确定的所述数据量,将所述待导出CSV文件拆分为至少两个数据块;依次将每一个所述数据块映射到内存中;依次对映射在内存中的所述数据块进行处理;
发送单元304,用于根据所述获取单元301获取的所述导出指令,将通过所述处理单元303处理后所产生的待导出数据发送给指定目标。
在本发明实施例中,处理单元在通过确定单元根据导出指令确定出待导出CSV文件后,不是将待导出CSV文件加载到内存中进行解析处理,而是根据待导出CSV文件中的数据量,将待导出CSV文件拆分为数据块,再采用内存文件映射的方式,分别加载数据块进行处理,以使发送单元将数据块处理后所产生的待导出数据发送给指定目标,完成数据的传输。综上可见,将待导出CSV文件分成数据块,且采用内存映射的方式处理各个数据块,可以避免应用程序在处理数据时占用太多的内存,从而可以提高应用程序处理数据的效率。
在本发明一实施例中,所述处理单元,用于分别确定每一个所述数据块对应的映射顺序,并将所述映射顺序中的第一个所述数据块作为当前数据块;根据所述映射顺序,将所述当前数据块映射到内存中;获取映射在内存中的所述当前数据块对应的内存地址;根据所述内存地址,获取所述当前数据块中的内容;解析获取的所述当前数据块中的内容;根据所述映射顺序,确定是否存在未获取的所述数据块;如果是,根据所述映射顺序,将所述当前数据块的下一个数据块作为当前数据块,执行将所述当前数据块对应的当前地址映射到内存中。
在本发明一实施例中,所述处理单元,进一步用于设置字段缓存、行缓存和多行缓存;
S0:确定获取所述当前数据块中每一个字符的字符顺序,并将所述字符顺序中第一个字符作为当前字符;
S1:确定获取的所述当前字符是否为双引号中的前引号,如果是,执行步骤S2,否则执行步骤S3;
S2:根据所述字符顺序,获取每一个所述字符,在遇到与所述前引号相对应的后引号时,将所述前引号与所述后引号内由各个所述字符组成的字段加入到所述字段缓存中,并根据所述字符顺序,将所述后引号的下一个字符作为当前字符,返回S0;
S3:确定所述当前字符是否为分隔符,如果是,执行步骤S4,否则,执行步骤S5;
S4:将所述字段缓存中,在所述分隔符之前的所述字段加入到所述行缓存中,并根据所述字符顺序,将所述分隔符的下一个所述字符作为当前字符,返回S0;
S5:确定所述当前字符是否为换行符,如果是,执行步骤S6,否则,执行步骤S7;
S6:将所述行缓存中,在所述换行符之前由各个所述字段组成的当前数据行加入到所述多行缓存中,根据所述字符顺序,将所述换行符的下一个所述字符作为当前字符,返回S0;
S7:将所述当前字符加入到所述字段缓存中,根据所述字符顺序,将所述当前字符的下一个所述字符作为当前字符,返回S0。
在本发明一实施例中,所述处理单元,进一步用于确定所述当前数据行是否为所述待导出CSV文件中的第一行;如果不是,判断所述当前数据行与所述当前数据行的上一个数据行的列式是否一致;如果不一致,则停止解析当前数据块。
在本发明一实施例中,所述处理单元,进一步用于确定所述待导出数据是否达到预设发送值;如果是,触发生成轻量级的数据交换格式JSON文件;
所述发送单元,用于将所述处理单元生成的所述JSON文件发送给指定目标。
本发明各个实施例至少具有如下有益效果:
1、在本发明一实施例中,在根据导出指令确定出待导出CSV文件后,不是将待导出CSV文件加载到内存中进行解析处理,而是根据待导出CSV文件中的数据量,将待导出CSV文件拆分为数据块,再采用内存文件映射的方式,分别加载数据块进行处理,将数据块处理后所产生的待导出数据发送给指定目标,完成数据的传输。综上可见,将待导出CSV文件分成数据块,且采用内存映射的方式处理各个数据块,可以避免应用程序在处理数据时占用太多的内存,从而可以提高应用程序处理数据的效率。
2、在本发明一实施例中,在将数据块映射到内存中后,如需获取数据块中的内容,需要获取数据块对应的内存地址,根据内存地址即可获取对应的数据块中的内容,而在将各个数据块映射到内存中时,采取的是分次映射的方式,在内存中所映射的数据块被获取、解析后,会释放内存中映射的数据块,再继续映射下一个数据块。综上可见,通过分次映射数据块、分次解析数据块,可以在解析数据块后及时释放内存,避免应用程序占用太多内存,从而达到处理数据占用内存少的目的。
3、在本发明一实施例中,CSV文件中,对应双引号有特殊的使用,一对双引号中间的内容为一个字段的内容,里面可以包括换行符或分隔符,所以在解析各个数据块时,需要确定每一个字符的所表达的含义,当且仅当在双引号外的分隔符表示为一个字段的结束,以及在双引号外的换行符表示为一个数据行的结束。综上可见,在解析数据块时,通过每一个字符所表示的含义,来确定数据块中数据的格式,可以避免数据块在解析后出现数据格式出现变动,而导致接收方在接收到数据时无法使用。
4、在本发明一实施例中,在当前数据块已被解析的数据行的个数大于等于2时,需要确定相邻的两个数据行的列式是否一致,可以避免解析后出现每行数据的格式不一致的情况,而在确定相邻的两行数据的数据列不一致时,则应停止解析当前数据块来,避免接收方在接收到解析后的数据而无法使用的情况。
5、在本发明一实施例中,由于将数据通过网络发送出去的时间不可预期,所以在解析当前数据块后所产生的待导出数据的数据量达到一定预设发送值时,触发生成JSON文件,并将JSON文件发送给指定目标,而在解析当前数据块和生成JSON文件可以分在不同的线程处理,从而可以加快处理待导出CSV文件的速度。
需要说明的是,在本文中,诸如第一和第二之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个〃····〃”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同因素。
最后需要说明的是:以上所述仅为本发明的较佳实施例,仅用于说明本发明的技术方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所做的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (10)
1.一种数据传输方法,其特征在于,包括:
预先获取至少一个逗号分隔值CSV文件;
接收外部输入的导出指令;
根据所述导出指令,从所述至少一个CSV文件中确定出待导出CSV文件;
确定所述待导出CSV文件中的数据量;
根据所述数据量,将所述待导出CSV文件拆分为至少两个数据块;
依次将每一个所述数据块映射到内存中;
依次对映射在内存中的所述数据块进行处理;
根据所述导出指令,将处理后所产生的待导出数据发送给指定目标。
2.根据权利要求1所述的方法,其特征在于,
所述依次将每一个所述数据块映射到内存中,包括:
分别确定每一个所述数据块对应的映射顺序,并将所述映射顺序中的第一个所述数据块作为当前数据块;
根据所述映射顺序,将所述当前数据块映射到内存中;
所述依次对映射在内存中的所述数据块进行处理,包括:
获取映射在内存中的所述当前数据块对应的内存地址;
根据所述内存地址,获取所述当前数据块中的内容;
解析获取的所述当前数据块中的内容;
根据所述映射顺序,确定是否存在未获取的所述数据块;
如果是,根据所述映射顺序,将所述当前数据块的下一个数据块作为当前数据块,执行将所述当前数据块对应的当前地址映射到内存中。
3.根据权利要求2所述的方法,其特征在于,
在所述解析获取的所述当前数据块之前,进一步包括:
设置字段缓存、行缓存和多行缓存;
所述解析获取的所述当前数据块中的内容,包括:
S0:确定获取所述当前数据块中每一个字符的字符顺序,并将所述字符顺序中第一个字符作为当前字符;
S1:确定获取的所述当前字符是否为双引号中的前引号,如果是,执行步骤S2,否则执行步骤S3;
S2:根据所述字符顺序,获取每一个所述字符,在遇到与所述前引号相对应的后引号时,将所述前引号与所述后引号内由各个所述字符组成的字段加入到所述字段缓存中,并根据所述字符顺序,将所述后引号的下一个字符作为当前字符,返回S0;
S3:确定所述当前字符是否为分隔符,如果是,执行步骤S4,否则,执行步骤S5;
S4:将所述字段缓存中,在所述分隔符之前的所述字段加入到所述行缓存中,并根据所述字符顺序,将所述分隔符的下一个所述字符作为当前字符,返回S0;
S5:确定所述当前字符是否为换行符,如果是,执行步骤S6,否则,执行步骤S7;
S6:将所述行缓存中,在所述换行符之前由各个所述字段组成的当前数据行加入到所述多行缓存中,根据所述字符顺序,将所述换行符的下一个所述字符作为当前字符,返回S0;
S7:将所述当前字符加入到所述字段缓存中,根据所述字符顺序,将所述当前字符的下一个所述字符作为当前字符,返回S0。
4.根据权利要求3所述的方法,其特征在于,
在所述换行符之前由各个所述字段组成的当前数据行加入到所述多行缓存中之后,进一步包括:
确定所述当前数据行是否为所述待导出CSV文件中的第一行;
如果不是,判断所述当前数据行与所述当前数据行的上一个数据行的列式是否一致;
如果不一致,则停止解析当前数据块。
5.根据权利要求1至4中任一所述的方法,其特征在于,
在所述依次对映射在内存中的所述数据块进行处理之后,在所述将处理后所产生的待导出数据发送给指定目标之前,进一步包括:
确定所述待导出数据是否达到预设发送值;
如果是,触发生成轻量级的数据交换格式JSON文件;
将生成的所述JSON文件发送给指定目标。
6.一种数据传输装置,其特征在于,包括:
获取单元,用于预先获取至少一个逗号分隔值CSV文件;接收外部输入的导出指令;
确定单元,用于根据所述获取单元接收的所述导出指令,从所述获取单元获取的所述至少一个CSV文件中确定出待导出CSV文件;确定所述待导出CSV文件中的数据量;
处理单元,用于根据所述确定单元确定的所述数据量,将所述待导出CSV文件拆分为至少两个数据块;依次将每一个所述数据块映射到内存中;依次对映射在内存中的所述数据块进行处理;
发送单元,用于根据所述获取单元获取的所述导出指令,将通过所述处理单元处理后所产生的待导出数据发送给指定目标。
7.根据权利要求6所述的传输装置,其特征在于,
所述处理单元,用于分别确定每一个所述数据块对应的映射顺序,并将所述映射顺序中的第一个所述数据块作为当前数据块;根据所述映射顺序,将所述当前数据块映射到内存中;获取映射在内存中的所述当前数据块对应的内存地址;根据所述内存地址,获取所述当前数据块中的内容;解析获取的所述当前数据块中的内容;根据所述映射顺序,确定是否存在未获取的所述数据块;如果是,根据所述映射顺序,将所述当前数据块的下一个数据块作为当前数据块,执行将所述当前数据块对应的当前地址映射到内存中。
8.根据权利要求7所述的传输装置,其特征在于,
所述处理单元,进一步用于设置字段缓存、行缓存和多行缓存;
S0:确定获取所述当前数据块中每一个字符的字符顺序,并将所述字符顺序中第一个字符作为当前字符;
S1:确定获取的所述当前字符是否为双引号中的前引号,如果是,执行步骤S2,否则执行步骤S3;
S2:根据所述字符顺序,获取每一个所述字符,在遇到与所述前引号相对应的后引号时,将所述前引号与所述后引号内由各个所述字符组成的字段加入到所述字段缓存中,并根据所述字符顺序,将所述后引号的下一个字符作为当前字符,返回S0;
S3:确定所述当前字符是否为分隔符,如果是,执行步骤S4,否则,执行步骤S5;
S4:将所述字段缓存中,在所述分隔符之前的所述字段加入到所述行缓存中,并根据所述字符顺序,将所述分隔符的下一个所述字符作为当前字符,返回S0;
S5:确定所述当前字符是否为换行符,如果是,执行步骤S6,否则,执行步骤S7;
S6:将所述行缓存中,在所述换行符之前由各个所述字段组成的当前数据行加入到所述多行缓存中,根据所述字符顺序,将所述换行符的下一个所述字符作为当前字符,返回S0;
S7:将所述当前字符加入到所述字段缓存中,根据所述字符顺序,将所述当前字符的下一个所述字符作为当前字符,返回S0。
9.根据权利要求8所述的传输装置,其特征在于,
所述处理单元,进一步用于确定所述当前数据行是否为所述待导出CSV文件中的第一行;如果不是,判断所述当前数据行与所述当前数据行的上一个数据行的列式是否一致;如果不一致,则停止解析当前数据块。
10.根据权利要求6至9中任一所述的传输装置,其特征在于,
所述处理单元,进一步用于确定所述待导出数据是否达到预设发送值;如果是,触发生成轻量级的数据交换格式JSON文件;
所述发送单元,用于将所述处理单元生成的所述JSON文件发送给指定目标。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711084194.8A CN107861885A (zh) | 2017-11-07 | 2017-11-07 | 一种数据传输方法及传输装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711084194.8A CN107861885A (zh) | 2017-11-07 | 2017-11-07 | 一种数据传输方法及传输装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107861885A true CN107861885A (zh) | 2018-03-30 |
Family
ID=61701152
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711084194.8A Pending CN107861885A (zh) | 2017-11-07 | 2017-11-07 | 一种数据传输方法及传输装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107861885A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110188069A (zh) * | 2019-05-21 | 2019-08-30 | 广东和新科技有限公司 | 一种csv文件存储方法、装置及计算机设备 |
CN113590533A (zh) * | 2021-08-12 | 2021-11-02 | 城云科技(中国)有限公司 | 文件入库方法、装置及电子装置、计算机程序产品 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101789013A (zh) * | 2010-02-04 | 2010-07-28 | 浪潮集团山东通用软件有限公司 | 一种用于描述关系数据的增强型csv文件格式 |
US20110119678A1 (en) * | 2009-11-18 | 2011-05-19 | International Business Machines Corporation | Isolating workload partition space |
CN102439572A (zh) * | 2011-10-27 | 2012-05-02 | 华为技术有限公司 | 控制缓存映射的方法及缓存系统 |
CN104317582A (zh) * | 2014-10-17 | 2015-01-28 | 浪潮电子信息产业股份有限公司 | 一种基于机器学习特征的符号回归gp算法 |
US20150113088A1 (en) * | 2013-10-23 | 2015-04-23 | International Business Machines Corporation | Persistent caching for operating a persistent caching system |
CN105677698A (zh) * | 2015-12-11 | 2016-06-15 | 重庆川仪自动化股份有限公司 | 一种报表数据导出方法 |
CN105843819A (zh) * | 2015-01-15 | 2016-08-10 | 中国移动通信集团河南有限公司 | 一种数据导出方法及装置 |
JP2017016497A (ja) * | 2015-07-03 | 2017-01-19 | 株式会社日立システムズ | Csvデータ変換システム及びcsvデータ変換プログラム |
CN106776843A (zh) * | 2016-11-28 | 2017-05-31 | 浪潮软件集团有限公司 | 一种基于xml解析的导入excel文件的方法 |
WO2017090054A1 (en) * | 2015-11-26 | 2017-06-01 | Satyam Sandepogu | Editfile |
CN107102973A (zh) * | 2017-03-15 | 2017-08-29 | 中国互联网络信息中心 | 一种csv格式文件的数据提取方法及系统 |
-
2017
- 2017-11-07 CN CN201711084194.8A patent/CN107861885A/zh active Pending
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110119678A1 (en) * | 2009-11-18 | 2011-05-19 | International Business Machines Corporation | Isolating workload partition space |
CN101789013A (zh) * | 2010-02-04 | 2010-07-28 | 浪潮集团山东通用软件有限公司 | 一种用于描述关系数据的增强型csv文件格式 |
CN102439572A (zh) * | 2011-10-27 | 2012-05-02 | 华为技术有限公司 | 控制缓存映射的方法及缓存系统 |
US20150113088A1 (en) * | 2013-10-23 | 2015-04-23 | International Business Machines Corporation | Persistent caching for operating a persistent caching system |
CN104317582A (zh) * | 2014-10-17 | 2015-01-28 | 浪潮电子信息产业股份有限公司 | 一种基于机器学习特征的符号回归gp算法 |
CN105843819A (zh) * | 2015-01-15 | 2016-08-10 | 中国移动通信集团河南有限公司 | 一种数据导出方法及装置 |
JP2017016497A (ja) * | 2015-07-03 | 2017-01-19 | 株式会社日立システムズ | Csvデータ変換システム及びcsvデータ変換プログラム |
WO2017090054A1 (en) * | 2015-11-26 | 2017-06-01 | Satyam Sandepogu | Editfile |
CN105677698A (zh) * | 2015-12-11 | 2016-06-15 | 重庆川仪自动化股份有限公司 | 一种报表数据导出方法 |
CN106776843A (zh) * | 2016-11-28 | 2017-05-31 | 浪潮软件集团有限公司 | 一种基于xml解析的导入excel文件的方法 |
CN107102973A (zh) * | 2017-03-15 | 2017-08-29 | 中国互联网络信息中心 | 一种csv格式文件的数据提取方法及系统 |
Non-Patent Citations (1)
Title |
---|
周宁: "《信息组织》", 30 September 2017 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110188069A (zh) * | 2019-05-21 | 2019-08-30 | 广东和新科技有限公司 | 一种csv文件存储方法、装置及计算机设备 |
CN110188069B (zh) * | 2019-05-21 | 2021-06-29 | 广东和新科技有限公司 | 一种csv文件存储方法、装置及计算机设备 |
CN113590533A (zh) * | 2021-08-12 | 2021-11-02 | 城云科技(中国)有限公司 | 文件入库方法、装置及电子装置、计算机程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11310313B2 (en) | Multi-threaded processing of search responses returned by search peers | |
CN103984745B (zh) | 分布式视频垂直搜索方法及系统 | |
JP5466257B2 (ja) | 表検索方法 | |
JP5668145B2 (ja) | メッセージを表示するための方法およびデバイス | |
CN105843819B (zh) | 一种数据导出方法及装置 | |
CN100445999C (zh) | 一种数据存储及搜索方法 | |
US10120938B2 (en) | Systems and methods for automating the transmission of partitionable search results from a search engine | |
US10666758B2 (en) | Browser resource pre-pulling method, terminal and storage medium | |
US20150135061A1 (en) | Systems and methods for parallel traversal of document object model tree | |
CN104040977B (zh) | 缓存报文的方法和装置 | |
US20160103931A1 (en) | Translation of a sparql query to a sql query | |
CN109726004B (zh) | 一种数据处理方法及装置 | |
CN110502546A (zh) | 一种数据处理方法及装置 | |
CN103997514A (zh) | 一种文件并行传输的方法及系统 | |
CN110287163A (zh) | 安全日志采集解析方法、装置、设备及介质 | |
CN104424240B (zh) | 多表关联方法、主服务节点、计算节点及系统 | |
CN113568938B (zh) | 数据流处理方法、装置、电子设备及存储介质 | |
KR101660860B1 (ko) | 분산 시스템에 기반한 스트리밍 방식으로 데이터 큐브를 생성하는 방법 및 장치 | |
CN104025520B (zh) | 查找表的创建方法、查询方法、控制器、转发设备和系统 | |
CN107861885A (zh) | 一种数据传输方法及传输装置 | |
CN108108384A (zh) | 一种数据存储方法及装置 | |
US20160028805A1 (en) | Collecting client-side application performance monitoring information | |
CN112199390B (zh) | 一种数据库中数据查询方法、装置、设备及存储介质 | |
CN107346312A (zh) | 一种大数据处理方法及系统 | |
CN106445968A (zh) | 一种数据合并方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180330 |
|
RJ01 | Rejection of invention patent application after publication |