CN117573620A - 一种大文件拆分并发读取方法和系统 - Google Patents
一种大文件拆分并发读取方法和系统 Download PDFInfo
- Publication number
- CN117573620A CN117573620A CN202410035732.8A CN202410035732A CN117573620A CN 117573620 A CN117573620 A CN 117573620A CN 202410035732 A CN202410035732 A CN 202410035732A CN 117573620 A CN117573620 A CN 117573620A
- Authority
- CN
- China
- Prior art keywords
- file
- data
- split
- reading
- read
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 66
- 238000012216 screening Methods 0.000 claims abstract description 6
- 238000012937 correction Methods 0.000 claims description 12
- 230000002159 abnormal effect Effects 0.000 claims description 3
- 238000004806 packaging method and process Methods 0.000 claims description 2
- 238000012545 processing Methods 0.000 claims description 2
- 238000004891 communication Methods 0.000 description 18
- 230000006870 function Effects 0.000 description 5
- 230000000903 blocking effect Effects 0.000 description 4
- 238000004590 computer program Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000013508 migration Methods 0.000 description 3
- 230000005012 migration Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及数据读取技术领域,提供一种大文件拆分并发读取方法和系统,本发明的方法包括:通过本地路径对待读取的文件进行定位,校验定位所得文件的大小,根据拆分阈值筛选需要拆分的文件;将需要拆分的文件拆分为多个数据块,生成记录每个数据块起止位置的动态数组;遍历所述动态数组,根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取。本发明的大文件拆分并发读取方法和系统,可以防止内存溢出,在更充分地利用机器的CPU、磁盘IO以及网络带宽等系统资源的同时,提高对大文件的读取效率并保证相邻数据块读取不越界。
Description
技术领域
本发明涉及数据读取技术领域,尤其涉及一种大文件拆分并发读取方法和系统。
背景技术
随着信息技术的发展,CPU计算速度不断提高,磁盘存储容量不断增大,网络带宽不断增加。大数据时代的到来,每个公司的业务数据以及系统运行日志文件一般都是几百GP甚至TB或GB级数据。由于操作系统内存限制,这些文件一般无法直接打开,当对这些数据文件进行下载、迁移入库、分析等操作时,如果直接文件为单位进行读取分析操作,即以一个文件为单位,一行一行的读取数据,然后按行分析处理数据,这种方式效率十分低下,无法完全利用机器的性能。
因此,如何提供一种更加高效的文件读取方法,成为亟待解决的技术问题。
发明内容
有鉴于此,为了克服现有技术的不足,本发明旨在提供一种大文件拆分并发读取方法和系统。
根据本发明的第一方面,提供一种大文件拆分并发读取方法,包括:
通过本地路径对待读取的文件进行定位,校验定位所得文件的大小,根据拆分阈值筛选需要拆分的文件;
将需要拆分的文件拆分为多个数据块,生成记录每个数据块起止位置的动态数组;
遍历所述动态数组,根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取。
优选的,本发明的大文件拆分并发读取方法,通过本地路径对待读取的文件进行定位,校验定位所得文件的大小,根据拆分阈值筛选需要拆分的文件,包括:
在对待读取的文件进行定位后,判断所述待读取的文件是否存在;
当所述待读取的文件存在,获取所述待读取文件的数据量,当所述待读取的文件的数据量小于或等于拆分阈值,将所述待读取的文件判定为不做拆分的文件;当所述待读取的文件的数据量大于拆分阈值,将所述待读取的文件判定为需要做拆分的文件;
当所述待读取的文件不存在,生成异常日志并结束读取。
优选的,本发明的大文件拆分并发读取方法,将需要拆分的文件拆分为多个数据块,生成记录每个数据块起止位置的动态数组,包括:
根据需要拆分的文件的数据量和拆分后数据块的目标数据量,计算拆分后数据块的总数量;
通过确定数据块的初始字节位置和终止字节位置,将需要拆分的文件按照数据块的目标数据量进行拆分;
根据每个数据块的起始字节位置和终止字节位置生成动态数组。
优选的,本发明的大文件拆分并发读取方法,根据需要拆分的文件的数据量和拆分后数据块的目标数据量,计算拆分后数据块的总数量,包括:
当需要拆分的文件的数据量与拆分后数据块的目标数据量的比值为整数,将所述比值作为拆分后数据块的总数量;
当需要拆分的文件的数据量与拆分后数据块的目标数据量的比值为非整数,将所述比值做加1处理得到修正比值,将所述修正比值作为拆分后数据块的总数量。
优选的,本发明的大文件拆分并发读取方法,通过确定数据块的初始字节位置和终止字节位置,将需要拆分的文件按照数据块的目标数据量进行拆分,包括:
将文件定位指针定位至数据块的起始字节位置,根据目标数据量将文件定位指针定位至数据块的终止字节位置;
当所述文件定位指针定位的终止字节位置在数据块最后一行的行尾,根据所述起始字节位置和所述终止字节位置对数据块进行拆分;
当所述文件定位指针定位的终止字节位置不在数据块最后一行的行尾,将所述文件定位指针移动到数据块最后一行的行尾,将数据块最后一行的行尾作为调整后的终止字节位置,根据所述起始字节位置和调整后的终止字节位置对数据块进行拆分。
优选的,本发明的大文件拆分并发读取方法,遍历所述动态数组,根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取,包括:遍历动态数组,根据动态数组中记录的数据块的起始字节位置和终止字节位置将数据块的读取封装为读取任务,通过执行封装的读取任务对拆分后的数据块进行并发读取。
优选的,本发明的大文件拆分并发读取方法,遍历所述动态数组,根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取,包括:
将文件定位指针定位至数据块的起始字节位置,获取读取所述数据块的读取通道,采用所述读取通道将读取的数据读取至缓冲区;
在采用所述读取通道将读取的数据读取至缓冲区前,根据所述数据块需要读取的数据量和缓冲区的大小计算读取的总次数。
优选的,本发明的大文件拆分并发读取方法,根据所述数据块需要读取的数据量和缓冲区的大小计算读取的总次数,包括:
当数据块需要读取的数据量和缓冲区的大小的比值为整数,将所述比值作为读取的总次数;
当数据块需要读取的数据量和缓冲区的大小的比值为非整数,将所述比值作为读取的总次数,将所述比值做加1处理得到修正比值,将所述修正比值作为读取的总次数,并增加一个缓冲区用于存储增加的读取次数读取的数据。
优选的,本发明的大文件拆分并发读取方法,遍历所述动态数组,根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取,还包括:当从一个缓冲区中读取的数据的最后一行是不完整的,记录不完整的最后一行数据,在将数据读取至下一个缓冲区时将所述不完整的最后一行数据添加至读取至下一个缓存区的最前端。
根据本发明的第二方面,提供一种大文件拆分并发读取系统,所述系统包括拆分并发读取服务端,用于通过本地路径对待读取的文件进行定位,校验定位所得文件的大小,根据拆分阈值筛选需要拆分的文件;将需要拆分的文件拆分为多个数据块,生成记录每个数据块起止位置的动态数组;遍历所述动态数组,根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取。
根据本发明的第三方面,提供一种计算机设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现本发明第一方面所述的方法。
本发明的大文件拆分并发读取方法和系统,通过将数据量大的文件在内存中拆分成多个小份的数据块,并发地对这些数据块进行数据读取,将读取的数据供消费者直接进行数据分析、数据下载或者数据迁移等消费,可以防止内存溢出,在更充分地利用机器的如CPU、磁盘IO以及网络带宽等系统资源的同时,提高对大文件的读取效率并保证相邻数据块读取不越界。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为一种适用于本申请实施例的大文件拆分并发读取方法的系统的示意图;
图2为根据本发明实施例的一种大文件拆分并发读取方法的步骤流程图;
图3为图2所示大文件拆分并发读取方法的执行流程示例图;
图4为本发明提供的设备的结构示意图。
具体实施方式
下面结合附图对本发明实施例进行详细描述。
需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合;并且,基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
图1示出了一种适用于本申请实施例的大文件拆分并发读取方法的示例性系统。如图1所示,该系统可以包括拆分并发读取服务端101、通信网络102和/或一个或多个拆分并发读取客户端103,图1中示例为多个拆分并发读取客户端103。
拆分并发读取服务端101可以时用于存储信息、数据、程序和/或任何其他合适类型的内容的任何适当的服务器。在一些实施例中,拆分并发读取服务端101可以执行适当的功能。例如,在一些实施例中,拆分并发读取服务端101可以用于对大文件进行拆分并发读取。作为可选的示例,在一些实施例中,拆分并发读取服务端101可以被用于通过生成动态数组并根据生成的动态数组对大文件进行拆分并发读取。例如,拆分并发读取服务端101可以用于通过本地路径对待读取的文件进行定位,校验定位所得文件的大小,根据拆分阈值筛选需要拆分的文件;将需要拆分的文件拆分为多个数据块,生成记录每个数据块起止位置的动态数组;遍历所述动态数组,根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取。
作为另一示例,在一些实施例中,拆分并发读取服务端101可以根据拆分并发读取客户端103的请求,将大文件拆分并发读取方法发送到拆分并发读取客户端103供用户使用。
作为可选的示例,在一些实施例中,拆分并发读取客户端103用于提供可视化读取界面,该可视化读取界面用于接收用户对大文件进行拆分并发读取的选择输入操作,以及,用于响应于选择输入操作,从拆分并发读取服务端101获取与选择输入操作所选择的选项所对应的读取界面并展示读取界面,读取界面中至少展示有对大文件进行拆分并发读取的信息以及针对对大文件进行拆分并发读取的信息的操作选项。
在一些实施例中,通信网络102可以是一个或多个有线和/或无线网络的任何适当的组合。例如,通信网络102能够包括以下各项中的任何一种或多种:互联网、内联网、广域网(WAN)、局域网(LAN)、无线网络、数字订户线路(DSL)网络、帧中继网络、异步转移模式(ATM)网络、虚拟专用网(VPN)和/或任何其它合适的通信网络。拆分并发读取客户端103能够通过一个或多个通信链路(例如,通信链路104)连接到通信网络102,该通信网络102能够经由一个或多个通信链路(例如,通信链路105)被链接到拆分并发读取服务端101。通信链路可以是适合于在拆分并发读取客户端103和拆分并发读取服务端101之间传送数据的任何通信链路,诸如网络链路、拨号链路、无线链路、硬连线链路、任何其它合适的通信链路或此类链路的任何合适的组合。
拆分并发读取客户端103可以包括通过适当形式呈现与对大文件进行拆分并发读取相关的界面,以供用户使用和操作的任何一个或多个客户端。在一些实施例中,拆分并发读取客户端103可以包括任何合适类型的设备。例如,在一些实施例中,拆分并发读取客户端103可以包括移动设备、平板计算机、膝上型计算机、台式计算机和/或任何其他合适类型的客户端设备。
尽管将拆分并发读取服务端101图示为一个设备,但是在一些实施例中,可以使用任何适当数量的设备来执行由拆分并发读取服务端101执行的功能。例如,在一些实施例中,可以使用多个设备来实现由拆分并发读取服务端101执行的功能。或者,可使用云服务实现拆分并发读取服务端101的功能。
基于上述系统,本发明实施例提供了一种大文件拆分并发读取方法,以下通过以下实施例进行说明。
参照图2,示出了根据本发明实施例的一种大文件拆分并发读取方法的步骤流程图。图3示出了图2所示方法的执行流程示例图。
本实施例的大文件拆分并发读取方法可在拆分并发读取服务端执行,如图2和图3所示,该大文件拆分并发读取方法包括以下步骤:
步骤S201:通过本地路径对待读取的文件进行定位,校验定位所得文件的大小,根据拆分阈值筛选需要拆分的文件。
作为一种示例,本实施例方法中,根据给定的本地路径,通过java提供的接口newFile来定位文件,在对待读取的文件进行定位后,通过File对象提供的exists方法判断待读取的文件是否存在,当所述待读取的文件存在,根据File对象的length方法获取所述待读取文件的数据量,当所述待读取的文件的数据量小于或等于拆分阈值,将所述待读取的文件判定为不做拆分的文件;当所述待读取的文件的数据量大于拆分阈值,将所述待读取的文件判定为需要做拆分的文件;当所述待读取的文件不存在,生成异常日志并结束读取。
举例来说,将拆分阈值设置为1GB,当待读取的文件的数据量小于等于1GB,直接通过数据缓冲区读取数据,然后将数据流入数据消费通道中。如果待读取的文件的数据量大于1GB,将该文件进行拆分。
步骤S202:将需要拆分的文件拆分为多个数据块,生成记录每个数据块起止位置的动态数组。
本实施例方法中,将数据拆分城多个均匀的数据块,是基于相关的计算在大文件上标记每个数据块的起始位置和终止位置。由于数据缓冲区是按行读取数据的,并且数据消费也是按完整行来消费数据的,因此本实施例方法需要保证拆分所得得每一个数据块的最后一行是完整的。
本实施例方法将需要拆分的文件拆分为多个数据块,生成记录每个数据块起止位置的动态数组,按以下方式实施:
根据需要拆分的文件的数据量和拆分后数据块的目标数据量,计算拆分后数据块的总数量。需要说明的是,当需要拆分的文件的数据量与拆分后数据块的目标数据量的比值为整数,将所述比值作为拆分后数据块的总数量;当需要拆分的文件的数据量与拆分后数据块的目标数据量的比值为非整数,将所述比值做加1处理得到修正比值,将所述修正比值作为拆分后数据块的总数量。
举例来说,计算机存容量单位有bit,B,KB,MB,GB,TB,它们之间的换算关系为:1B=8bit,1KB=1024B,1MB=1024KB,1GB=1024MB,1TB=1024GB。
假设待读取的文件的大小为1TB,要拆分成数据块的大小为1GB, 使用1TB除以1GB得到该文件要分成的splitNumber个数据块,即splitNumber=1 * 1024 * 1024 * 1024 *1024 / 1 * 1024 * 1024 * 1024 = 1024。如果待读取的文件的大小是1025GB,即大文件拆分成1024个数据块时还有余下的1GB数据,这些余下的数据就作为一个数据块,因此splitNumber= splitNumber + 1。
在完成对拆分后数据块总数量的计算后,本实施例还需要通过确定数据块的初始字节位置和终止字节位置,将需要拆分的文件按照数据块的目标数据量进行拆分。作为一种示例,本实施例方法中,通过确定数据块的初始字节位置和终止字节位置,将需要拆分的文件按照数据块的目标数据量进行拆分,按以下方式实施:
将文件定位指针定位至数据块的起始字节位置,根据目标数据量将文件定位指针定位至数据块的终止字节位置;当所述文件定位指针定位的终止字节位置在数据块最后一行的行尾,根据所述起始字节位置和所述终止字节位置对数据块进行拆分;当所述文件定位指针定位的终止字节位置不在数据块最后一行的行尾,将所述文件定位指针移动到数据块最后一行的行尾,将数据块最后一行的行尾作为调整后的终止字节位置,根据所述起始字节位置和调整后的终止字节位置对数据块进行拆分。
举例来说,第一个数据块的起始位置从0开始,如上文所述,数据块大小假设为1GB,通过随机文件流RandomAccessFile的seek方法将文件定位指针跳到1GB位置,也就是文件指针指向1073741824个字节处,这时的文件定位指针位置有三种情况,即在数据块最后一行的行首、行中间或行尾的位置,不论在哪种位置,本实施例先通过随机流RandomAccessFile的readLine方法将文件定位指针挪到行的末尾位置,然后在通过getFilePointer方法得到第一个数据块的实际大小,假设得到数据块的大小为1073741832(即文件定位指针在1073741824位置处向后挪8个字节),那么第一个数据块的位置就是0到1073741832,第二个数据块就从1073741833位置开始,按照第一个数据块的方法计算第二个数据块的结束位置,从而实现调整每个数据块的最后一行为完整的数据行,以此类推,将所有splitNumber数据块的起始位置和终止位置都计算出来。大文件拆分的结果是一个动态数组,该数组记录每个数据块的起始位置和终止位置,以便下一步并发读取数据。
需要说明的是,本实施例方法通过RandomAccessFile的api将大文件拆分成数据块,RandomAccessFile既可以读取文件内容,也可以向文件输出数据,同时支持“随机访问”的方式,可以直接跳转到文件的任意地方来读写数据。本实施例方法中,对于数据块位置的定位,对于数据块实际大小的获得,可有本领域技术人员根据实际应用场景选择适当的算法或方法实现,本实施例方法对此不做限制。
步骤S203:遍历所述动态数组,根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取。
作为一种示例,本实施例方法通过遍历动态数组,根据动态数组中记录的数据块的起始字节位置和终止字节位置将数据块的读取封装为读取任务,通过执行封装的读取任务对拆分后的数据块进行并发读取。
作为另一种示例,本实施例方法通过将文件定位指针定位至数据块的起始字节位置,获取读取所述数据块的读取通道,采用所述读取通道将读取的数据读取至缓冲区。需要注意的是,在采用所述读取通道将读取的数据读取至缓冲区前,本实施例还需要根据所述数据块需要读取的数据量和缓冲区的大小计算读取的总次数。当数据块需要读取的数据量和缓冲区的大小的比值为整数,将所述比值作为读取的总次数;当数据块需要读取的数据量和缓冲区的大小的比值为非整数,将所述比值作为读取的总次数,将所述比值做加1处理得到修正比值,将所述修正比值作为读取的总次数,并增加一个缓冲区用于存储增加的读取次数读取的数据。
举例来说,通过遍历动态数组,采用java nio将每个数据块读取封装成一个任务,通过随机文件流RandomAccessFile的seek方法将文件定位指针跳到数据块的开始位置,并通过该RandomAccessFile得到一个读取通道FileChannel,读取通道将读取的数据放到一个缓冲区ByteBuffer中,假设缓冲区的大小capacity为1024*512个字节。以第一个数据块读取为例,起始位置为0,结束位置为1073741832,该数据块需要读取的总字节数为1073741832,数据块读取前需要计算总共需要读取多少次数据到缓冲区中,以防数据块数据读取越界。需要读取次数计算如下:totalReadCount = 1073741832 / (1024*512) =2048次,读取2048次后还剩1073741832 % (1024*512) = 8个字节没有读取,因此还要开启一个缓冲区来读取这剩余的8个字节。在完成对数据块读取的任务封装后,将任务提交线程池ThreadPoolExcutor来执行。
java nio的全称是Java non-blocking IO, 是一种为所有原始数据类型提供缓存支持的数据容器,使用它可以及进行非阻塞式的读写,充分利用机器资源。与java nio对应的是以前常用的java io,java io流是阻塞式io,使用这种io流读取文件时,主线程就进入阻塞状态。java nio包含三大块,分别为缓冲区(Buffer), 通道区(Channel),选择器(Selector)。网络IO会用到选择器,通道区负责传送数据,需要和缓冲区绑定使用。
本实施例方法在将大文件拆分成小数据片段时,会为每个数据块生成一个读取通道,然后通过读取通道去读取该数据块。线程池是一种线程使用模式,线程池中维护着一组线程,当有任务提交时,直接从中拿出一个线程来执行任务,当任务执行完成后,不销毁线程,而是放入线程池中,等待下一个任务来时再重新使用。使用线程池可以降低资源的消耗,使得线程可以重复使用不需要在创建线程和销毁线程上浪费资源;可以提高响应速度,当任务到达时线程不需要创建就可以执行;还可以使得线程可管理,线程池可以对线程进行管理监控和调优。
作为另一种示例,本实施例方法在根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取的过程中,当从一个缓冲区中读取的数据的最后一行是不完整的,记录不完整的最后一行数据,在将数据读取至下一个缓冲区时将所述不完整的最后一行数据添加至读取至下一个缓存区的最前端。从而使每次处理的一批数据都是一个完整的多行数据,这批数据可以直接解析导入到数据库中,也可以放到队列中,用户可以根据用途不同,做各种数据消费,比如跨网络数据下载,或者数据迁移导入到数据库中,或者放到内存的数据队列中,然后再做其他消费。由于整个过程是并发运行的,与直接读取单个大文件相比,效率显著提高。
本实施例方法对于大文件进行读取时,通过将文件拆分成多个数据块,并保证数据块是完整多行数据,然后并发对多个数据块进行读取,为了进一步提高读取数据性能,一般是以一个buffer为单位进行数据读取,为了保证数据能正常分析,需要对该批数据处理成完整行,这样该批数据可以直接被消费,防止内存溢出。
如图4所示,本发明还提供了一种设备,包括处理器310、通信接口320、用于存储处理器可执行计算机程序的存储器330及通信总线340。其中,处理器310、通信接口320及存储器330通过通信总线340完成相互间的通信。处理器310通过运行可执行计算机程序以实现上述的大文件拆分并发读取方法。
其中,存储器330中的计算机程序可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的系统实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以基于实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种大文件拆分并发读取方法,其特征在于,所述方法包括:
通过本地路径对待读取的文件进行定位,校验定位所得文件的大小,根据拆分阈值筛选需要拆分的文件;
将需要拆分的文件拆分为多个数据块,生成记录每个数据块起止位置的动态数组;
遍历所述动态数组,根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取。
2.根据权利要求1所述的大文件拆分并发读取方法,其特征在于,通过本地路径对待读取的文件进行定位,校验定位所得文件的大小,根据拆分阈值筛选需要拆分的文件,包括:
在对待读取的文件进行定位后,判断所述待读取的文件是否存在;
当所述待读取的文件存在,获取所述待读取文件的数据量,当所述待读取的文件的数据量小于或等于拆分阈值,将所述待读取的文件判定为不做拆分的文件;当所述待读取的文件的数据量大于拆分阈值,将所述待读取的文件判定为需要做拆分的文件;
当所述待读取的文件不存在,生成异常日志并结束读取。
3.根据权利要求1所述的大文件拆分并发读取方法,其特征在于,将需要拆分的文件拆分为多个数据块,生成记录每个数据块起止位置的动态数组,包括:
根据需要拆分的文件的数据量和拆分后数据块的目标数据量,计算拆分后数据块的总数量;
通过确定数据块的初始字节位置和终止字节位置,将需要拆分的文件按照数据块的目标数据量进行拆分;
根据每个数据块的起始字节位置和终止字节位置生成动态数组。
4.根据权利要求3所述的大文件拆分并发读取方法,其特征在于,根据需要拆分的文件的数据量和拆分后数据块的目标数据量,计算拆分后数据块的总数量,包括:
当需要拆分的文件的数据量与拆分后数据块的目标数据量的比值为整数,将所述比值作为拆分后数据块的总数量;
当需要拆分的文件的数据量与拆分后数据块的目标数据量的比值为非整数,将所述比值做加1处理得到修正比值,将所述修正比值作为拆分后数据块的总数量。
5.根据权利要求3所述的大文件拆分并发读取方法,其特征在于,通过确定数据块的初始字节位置和终止字节位置,将需要拆分的文件按照数据块的目标数据量进行拆分,包括:
将文件定位指针定位至数据块的起始字节位置,根据目标数据量将文件定位指针定位至数据块的终止字节位置;
当所述文件定位指针定位的终止字节位置在数据块最后一行的行尾,根据所述起始字节位置和所述终止字节位置对数据块进行拆分;
当所述文件定位指针定位的终止字节位置不在数据块最后一行的行尾,将所述文件定位指针移动到数据块最后一行的行尾,将数据块最后一行的行尾作为调整后的终止字节位置,根据所述起始字节位置和调整后的终止字节位置对数据块进行拆分。
6.根据权利要求1所述的大文件拆分并发读取方法,其特征在于,遍历所述动态数组,根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取,包括:
遍历动态数组,根据动态数组中记录的数据块的起始字节位置和终止字节位置将数据块的读取封装为读取任务,通过执行封装的读取任务对拆分后的数据块进行并发读取。
7.根据权利要求1所述的大文件拆分并发读取方法,其特征在于,遍历所述动态数组,根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取,包括:
将文件定位指针定位至数据块的起始字节位置,获取读取所述数据块的读取通道,采用所述读取通道将读取的数据读取至缓冲区;
在采用所述读取通道将读取的数据读取至缓冲区前,根据所述数据块需要读取的数据量和缓冲区的大小计算读取的总次数。
8.根据权利要求7所述的大文件拆分并发读取方法,其特征在于,根据所述数据块需要读取的数据量和缓冲区的大小计算读取的总次数,包括:
当数据块需要读取的数据量和缓冲区的大小的比值为整数,将所述比值作为读取的总次数;
当数据块需要读取的数据量和缓冲区的大小的比值为非整数,将所述比值作为读取的总次数,将所述比值做加1处理得到修正比值,将所述修正比值作为读取的总次数,并增加一个缓冲区用于存储增加的读取次数读取的数据。
9.根据权利要求1所述的大文件拆分并发读取方法,其特征在于,遍历所述动态数组,根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取,还包括:
当从一个缓冲区中读取的数据的最后一行是不完整的,记录不完整的最后一行数据,在将数据读取至下一个缓冲区时将所述不完整的最后一行数据添加至读取至下一个缓存区的最前端。
10.一种大文件拆分并发读取系统,其特征在于,所述系统包括拆分并发读取服务端,用于通过本地路径对待读取的文件进行定位,校验定位所得文件的大小,根据拆分阈值筛选需要拆分的文件;将需要拆分的文件拆分为多个数据块,生成记录每个数据块起止位置的动态数组;遍历所述动态数组,根据动态数组中数据块的起止位置对拆分所得的数据块进行并发读取。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410035732.8A CN117573620B (zh) | 2024-01-10 | 2024-01-10 | 一种大文件拆分并发读取方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410035732.8A CN117573620B (zh) | 2024-01-10 | 2024-01-10 | 一种大文件拆分并发读取方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117573620A true CN117573620A (zh) | 2024-02-20 |
CN117573620B CN117573620B (zh) | 2024-04-02 |
Family
ID=89890350
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410035732.8A Active CN117573620B (zh) | 2024-01-10 | 2024-01-10 | 一种大文件拆分并发读取方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117573620B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103077241A (zh) * | 2013-01-10 | 2013-05-01 | 中国银行股份有限公司 | 将文件拆分后并行加载数据入库的方法 |
CN104123280A (zh) * | 2013-04-24 | 2014-10-29 | 中国银联股份有限公司 | 文件比对方法和设备 |
WO2019196226A1 (zh) * | 2018-04-09 | 2019-10-17 | 平安科技(深圳)有限公司 | 制度信息查询方法、装置、计算机设备和存储介质 |
CN110554843A (zh) * | 2019-09-10 | 2019-12-10 | 深圳市得一微电子有限责任公司 | 一种文件数据多个存储设备存储的方法及系统 |
US20200301878A1 (en) * | 2019-03-22 | 2020-09-24 | Bank Of America Corporation | Dynamic Server Pool Data Segmentation Using Dynamic Ordinal Partition Key Without Locks |
CN112597228A (zh) * | 2020-12-26 | 2021-04-02 | 中国农业银行股份有限公司 | 一种文件处理方法及系统 |
CN112732650A (zh) * | 2020-12-31 | 2021-04-30 | 中国工商银行股份有限公司 | 文件分片方法及装置 |
CN116150043A (zh) * | 2022-11-23 | 2023-05-23 | 建信金融科技有限责任公司 | 一种文件读取方法及装置 |
-
2024
- 2024-01-10 CN CN202410035732.8A patent/CN117573620B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103077241A (zh) * | 2013-01-10 | 2013-05-01 | 中国银行股份有限公司 | 将文件拆分后并行加载数据入库的方法 |
CN104123280A (zh) * | 2013-04-24 | 2014-10-29 | 中国银联股份有限公司 | 文件比对方法和设备 |
WO2019196226A1 (zh) * | 2018-04-09 | 2019-10-17 | 平安科技(深圳)有限公司 | 制度信息查询方法、装置、计算机设备和存储介质 |
US20200301878A1 (en) * | 2019-03-22 | 2020-09-24 | Bank Of America Corporation | Dynamic Server Pool Data Segmentation Using Dynamic Ordinal Partition Key Without Locks |
CN110554843A (zh) * | 2019-09-10 | 2019-12-10 | 深圳市得一微电子有限责任公司 | 一种文件数据多个存储设备存储的方法及系统 |
CN112597228A (zh) * | 2020-12-26 | 2021-04-02 | 中国农业银行股份有限公司 | 一种文件处理方法及系统 |
CN112732650A (zh) * | 2020-12-31 | 2021-04-30 | 中国工商银行股份有限公司 | 文件分片方法及装置 |
CN116150043A (zh) * | 2022-11-23 | 2023-05-23 | 建信金融科技有限责任公司 | 一种文件读取方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN117573620B (zh) | 2024-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101792582B1 (ko) | 칼럼형 데이터베이스의 히스토그램을 이용한 효율적인 질의 처리 | |
US20130097402A1 (en) | Data prefetching method for distributed hash table dht storage system, node, and system | |
US8307164B2 (en) | Automatic determination of read-ahead amount | |
US10523743B2 (en) | Dynamic load-based merging | |
CN110347651A (zh) | 基于云存储的数据同步方法、装置、设备及存储介质 | |
CN102880616A (zh) | 浏览器页面加载方法及装置 | |
CN102982182B (zh) | 一种数据存储规划方法及装置 | |
CN107402950A (zh) | 基于分库分表的文件处理方法和装置 | |
US11947842B2 (en) | Method for writing data in append mode, device and storage medium | |
US20210216231A1 (en) | Method, electronic device and computer program product for rebuilding disk array | |
US20200034040A1 (en) | Data Architecture Based on Sub-allocation and References from Fragmented Data Blocks | |
CN107977167A (zh) | 一种基于纠删码的分布式存储系统的退化读优化方法 | |
CN107402870A (zh) | 一种元数据服务器中日志段的处理方法及装置 | |
CN103177080A (zh) | 文件预读的方法和装置 | |
CN105068875A (zh) | 一种智能数据处理方法及装置 | |
CN111309432B (zh) | 一种故障演练方法、装置及系统 | |
CN107657434A (zh) | 游戏充值支付结果的通知方法、装置和网关设备 | |
CN117573620B (zh) | 一种大文件拆分并发读取方法和系统 | |
CN104281587B (zh) | 一种建立连接的方法及装置 | |
CN115993932A (zh) | 数据处理方法、装置、存储介质以及电子设备 | |
CN109358811A (zh) | 存储设备管理方法、装置及可读存储介质 | |
JP5913043B2 (ja) | キャッシュ領域管理プログラム及び方法、並びに情報処理装置 | |
CN113806249B (zh) | 一种对象存储有序列举方法、装置、终端及存储介质 | |
JP3780913B2 (ja) | レスポンス計測における計測モジュールを配布するアクセス管理システム、及びアクセス管理プログラム | |
CN105608212B (zh) | 一种确保MapReduce的数据输入分片包含完整记录的方法与系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |