CN108234594A - 文件存储方法和装置、电子设备、程序和介质 - Google Patents
文件存储方法和装置、电子设备、程序和介质 Download PDFInfo
- Publication number
- CN108234594A CN108234594A CN201711217713.3A CN201711217713A CN108234594A CN 108234594 A CN108234594 A CN 108234594A CN 201711217713 A CN201711217713 A CN 201711217713A CN 108234594 A CN108234594 A CN 108234594A
- Authority
- CN
- China
- Prior art keywords
- file
- buffering area
- small documents
- blocked
- blocked file
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (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
本发明实施例公开了一种文件存储方法和装置、电子设备、程序和介质,其中,方法包括:响应于接收到写请求,服务器上的至少一个第一进程将所述写请求中的小文件存储在所述进程的缓冲区内,确定所述小文件的索引;其中,所述小文件的索引包括:所述小文件所在分块文件的分块文件标识、以及所在节的节标识和节内偏移量;响应于满足所述缓冲区中数据的写入条件,所述第一进程将所述缓冲区中的数据追加写入到网络附属存储器中的一个分块文件中。本发明实施例实现了小文件的合并存储,可以优化存储性能、进行分布式扩展。
Description
技术领域
本发明涉及数据处理技术,尤其是一种文件存储方法和装置、电子设备、程序和介质。
背景技术
存储模块是一个应用系统中负责数据保存与访问的模块。在智能监控领域,高效且安全地存储历史数据是整个应用系统正常运行的必要前提。
存储模块通常由硬件与软件两部分组成。其中,硬件部分即实际存储数据的物理设备,例如机械硬盘、固态硬盘等;软件部分则是给应用系统提供数据存储接口的系统,例如文件系统、数据库等。根据实际应用需求进行软件与硬件选型是设计存储模块的关键。
发明内容
本发明实施例提供一种文件存储技术方案。
根据本发明实施例的一个方面,提供的一种文件存储方法,包括:
响应于接收到写请求,服务器上的至少一个第一进程将所述写请求中的小文件存储在所述第一进程的缓冲区内,确定所述小文件的索引;其中,所述小文件的索引包括:所述小文件所在分块文件的分块文件标识、以及所在节的节标识和节内偏移量;
响应于满足所述缓冲区中数据的写入条件,所述第一进程将所述缓冲区中的数据写入到网络附属存储器中的一个分块文件中。
可选地,在本发明上述各方法实施例中,所述满足所述缓冲区中数据的写入条件,所述第一进程将所述缓冲区中的数据写入到网络附属存储器中的一个分块文件中,包括:
响应于所述缓冲区中的数据量达到一个节的大小,所述第一进程将所述缓冲区中的数据作为一个节,追加写入到网络附属存储器中的一个分块文件中;和/或
响应于所述缓冲区中的数据在所述缓冲区中的最长保存时间达到预设时长阈值,所述第一进程将所述缓冲区中的数据追加写入到网络附属存储器中的一个分块文件中。
可选地,在本发明上述各方法实施例中,所述服务器包括至少一个,每个服务器上运行有至少一个进程;所述网络附属存储器挂载到所述至少一个服务器上;
所述方法还包括:
响应于接收到第一应用发送的写请求,负载均衡器将所述写请求分发给至少一个服务器上的至少一个所述第一进程。
可选地,在本发明上述各方法实施例中,所述缓冲区的大小为一个节的大小,或者所述缓冲区的大小大于一个节的大小。
可选地,在本发明上述各方法实施例中,将所述写请求中的小文件存储在所述第一进程的缓冲区内,包括:
将所述小文件的二进制内容、元信息和校验码组合成一个数据包,存储在所述第一进程的缓冲区内。
可选地,在本发明上述各方法实施例中,将所述缓冲区中的数据写入到网络附属存储器中的一个分块文件中,包括:
将所述缓冲区内的所有数据包、统计信息和校验码追加写入到网络附属存储器中的一个分块文件中;所述统计信息包括:所述缓冲区内小文件的个数、所有二进制内容的大小。
可选地,在本发明上述各方法实施例中,所述小文件的索引还包括:所述小文件所在分块文件的日期。
可选地,在本发明上述各方法实施例中,将所述缓冲区中的数据写入到网络附属存储器中的一个分块文件中之前,还包括:
从所述网络附属存储器选取一个分块文件作为写入所述缓冲区中的数据的分块文件。
可选地,在本发明上述各方法实施例中,从所述网络附属存储器选取一个分块文件,包括:
从所述网络附属存储器的分块文件中,选取一个未添加文件锁的分块文件作为写入所述缓冲区中的数据的一个分块文件,并对选取的分块文件添加文件锁;
若所述网络附属存储器的分块文件中不存在未添加文件锁的分块文件,在所述网络附属存储上创建一个新的分块文件,并对创建的分块文件添加文件锁。
可选地,在本发明上述各方法实施例中,从所述网络附属存储器选取一个分块文件作为写入所述缓冲区中的数据的分块文件,包括:
根据所述缓冲区中节的大小,从所述网络附属存储器中查找当前日期的分块文件中是否有未写满、且剩余容量不小于所述节的大小的分块文件;
若当前日期的分块文件中有未写满、且剩余容量不小于所述节的大小的分块文件,选取一个当前日期未写满、且剩余容量不小于所述节的大小的分块文件作为写入所述缓冲区中的数据的分块文件;
否则,若当前日期的分块文件中没有未写满、且剩余容量不小于所述节的大小的分块文件,在所述网络附属存储上创建一个新的分块文件作为写入所述缓冲区中的数据的分块文件。
可选地,在本发明上述各方法实施例中,还包括:
响应于接收到第二应用发送的需要读取的小文件的第一读请求,所述至少一个服务器上的至少一个第二进程解析所述第一读请求中需要读取的小文件的索引,得到所述需要读取的小文件所在分块文件的分块文件标识、节标识和节内偏移量;
所述第二进程从所述网络附属存储上定位所述需要读取的小文件所在分块文件并跳转到所述节内偏移量对应的位置,读取所述需要读取的小文件并返回所述第二应用。
可选地,在本发明上述各方法实施例中,响应于接收到第二应用发送的需要读取的小文件的第一读请求,包括:
响应于接收到第二应用发送的第一读请求,负载均衡器将所述第一读请求分发给所述至少一个服务器上的至少一个第二进程;
读取所述需要读取的小文件并返回所述第二应用,包括:读取所述需要读取的小文件并返回所述负载均衡器;所述负载均衡器将所述需要读取的小文件返回所述第二应用。
可选地,在本发明上述各方法实施例中,读取所述需要读取的小文件并返回,包括:
读取所述需要读取的小文件,并根据所述小文件中的校验码对所述需要读取的小文件中的二进制内容进行校验和数据格式检查;
若所述二进制内容通过校验与数据格式检查,返回所述需要读取的小文件。
可选地,在本发明上述各方法实施例中,从所述网络附属存储上定位所述需要读取的小文件所在分块文件之后,还包括:
将所述所在分块文件的文件描述符缓存在服务器的内存中。
可选地,在本发明上述各方法实施例中,从所述网络附属存储上定位所述需要读取的小文件所在分块文件,包括:
响应于服务器的内存中缓存有所述所在分块文件的文件描述符,根据所述所在分块文件的文件描述符定位所述需要读取的小文件所在分块文件。
可选地,在本发明上述各方法实施例中,还包括:
响应于接收到第三应用发送的第二读请求,负载均衡器将所述第二读请求分发给至少一个服务器上的至少一个第三进程;所述第二读请求中包括日期;
所述至少一个第三进程从所述网络附属存储上查询所述第二读请求中日期对应的分块文件,读取所述第二读请求中日期对应的分块文件中所有的小文件并返回所述负载均衡器;
所述负载均衡器将所述第二读请求中日期对应的分块文件中所有的小文件返回所述第三应用。
可选地,在本发明上述各方法实施例中,所述第三进程从所述网络附属存储上查询所述第二读请求中日期对应的分块文件,读取所述第二读请求中日期对应的分块文件中所有的小文件并返回所述负载均衡器,包括:
所述第三进程从所述网络附属存储上查询所述第二读请求中日期对应的分块文件,并将所述第二读请求中日期对应的分块文件中的所有节读取到所在服务器的内存中;
所述第三进程分别针对内存中的各节,根据节内的校验码对该节进行校验和数据格式检查;
响应于所述节通过校验和数据格式检查,顺序读取通过校验和数据格式检查的节内的所有小文件并返回所述负载均衡器。
可选地,在本发明上述各方法实施例中,所述第三进程从所述网络附属存储上查询所述第二读请求中日期对应的分块文件,读取所述第二读请求中日期对应的分块文件中所有的小文件并返回所述负载均衡器,包括:
所述第三进程从所述网络附属存储上查询所述第二读请求中日期对应的分块文件,若所述第二读请求中日期对应的分块文件中节的总数量大于预设数量阈值,向所述负载均衡器返回迭代器;
迭代执行所述第三进程从所述第二读请求中日期对应的分块文件中选取至少一个节读取到所在服务器的内存中,并分别针对内存中的各节,根据节内的校验码对该节进行校验和数据格式检查;以及所述负载均衡器调用所述迭代器依次读取内存中的一个小文件的操作,直至所述负载均衡器读取完所述第二读请求中日期对应的分块文件中的所有小文件。
可选地,在本发明上述各方法实施例中,还包括:
响应于接收到第三应用发送的删除读请求,负载均衡器将所述删除读请求分发给至少一个服务器上的至少一个第四进程;所述删除请求中包括日期;
所述至少一个第四进程从所述网络附属存储上查询所述删除请求中日期对应的分块文件并删除所述删除请求中日期对应的分块文件。
根据本发明实施例的另一个方面,提供的一种文件存储装置,包括:
至少一个进程,位于至少一个服务器上,用于响应于接收到写请求,作为第一进程将所述写请求中的小文件存储在该第一进程的缓冲区内,确定所述小文件的索引,其中,所述小文件的索引包括:所述小文件所在分块文件的分块文件标识、以及所在节的节标识和节内偏移量;以及响应于满足所述缓冲区中数据量的写入条件,将所述缓冲区中的数据写入到网络附属存储器中的一个分块文件中;
网络附属存储器,挂载到至少一个所述服务器上,用于存储分块文件。
可选地,在本发明上述各装置实施例中,所述第一进程具体用于:
响应于所述缓冲区中的数据量达到一个节的大小,将所述缓冲区中的数据作为一个节,追加写入到网络附属存储器中的一个分块文件中;和/或
响应于所述缓冲区中的数据在所述缓冲区中的最长保存时间达到预设时长阈值,将所述缓冲区中的数据追加写入到网络附属存储器中的一个分块文件中。
可选地,在本发明上述各装置实施例中,还包括:
负载均衡器,用于响应于接收到第一应用发送的写请求,将所述写请求分发给至少一个服务器上的至少一个所述第一进程,以及接收所述第一进程返回的所述小文件的索引。
可选地,在本发明上述各装置实施例中,所述缓冲区的大小为一个节的大小,或者所述缓冲区的大小大于一个节的大小。
可选地,在本发明上述各装置实施例中,所述第一进程将所述写请求中的小文件存储在所述第一进程的缓冲区内时,具体用于:将所述小文件的二进制内容、元信息和校验码组合成一个数据包,存储在所述第一进程的缓冲区内。
可选地,在本发明上述各装置实施例中,所述第一进程将所述缓冲区中的数据写入到网络附属存储器中的一个分块文件中时,具体用于:
将所述缓冲区内的所有数据包、统计信息和校验码追加写入到网络附属存储器中的一个分块文件中;所述统计信息包括:所述缓冲区内小文件的个数、所有二进制内容的大小。
可选地,在本发明上述各装置实施例中,所述第一进程还用于:从所述网络附属存储器选取一个分块文件作为写入所述缓冲区中的数据的分块文件。
可选地,在本发明上述各装置实施例中,所述第一进程从所述网络附属存储器选取一个分块文件时,具体用于:
从所述网络附属存储器的分块文件中,选取一个未添加文件锁的分块文件作为写入所述缓冲区中的数据的一个分块文件,并对选取的分块文件添加文件锁;
若所述网络附属存储器的分块文件中不存在未添加文件锁的分块文件,在所述网络附属存储上创建一个新的分块文件,并对创建的分块文件添加文件锁。
可选地,在本发明上述各装置实施例中,所述小文件的索引还包括:所述小文件所在分块文件的日期;
所述第一进程从所述网络附属存储器选取一个分块文件作为写入所述缓冲区中的数据的分块文件时,具体用于:
根据所述缓冲区中节的大小,从所述网络附属存储器中查找当前日期的分块文件中是否有未写满、且剩余容量不小于所述节的大小的分块文件;
若当前日期的分块文件中有未写满、且剩余容量不小于所述节的大小的分块文件,选取一个当前日期未写满、且剩余容量不小于所述节的大小的分块文件作为写入所述缓冲区中的数据的分块文件;
否则,若当前日期的分块文件中没有未写满、且剩余容量不小于所述节的大小的分块文件,在所述网络附属存储上创建一个新的分块文件作为写入所述缓冲区中的数据的分块文件。
可选地,在本发明上述各装置实施例中,还包括:
所述至少一个服务器上的至少一个第二进程,用于响应于接收到第二应用发送的需要读取的小文件的第一读请求,解析所述第一读请求中需要读取的小文件的索引,得到所述需要读取的小文件所在分块文件的分块文件标识、节标识和节内偏移量;以及
从所述网络附属存储上定位所述需要读取的小文件所在分块文件并跳转到所述节内偏移量对应的位置,读取所述需要读取的小文件并返回所述第二应用。
可选地,在本发明上述各装置实施例中,还包括:
负载均衡器,用于响应于接收到第二应用发送的第一读请求,将所述第一读请求分发给所述至少一个服务器上的至少一个第二进程;以及将所述第二进程返回的所述需要读取的小文件返回所述第二应用;
所述第二进程读取所述需要读取的小文件并返回所述第二应用时,具体用于读取所述需要读取的小文件并返回所述负载均衡器。
可选地,在本发明上述各装置实施例中,所述负载均衡器或所述第二进程读取所述需要读取的小文件并返回时,具体用于:
读取所述需要读取的小文件,并根据所述小文件中的校验码对所述需要读取的小文件中的二进制内容进行校验和数据格式检查;
若所述二进制内容通过校验与数据格式检查,返回所述需要读取的小文件。
可选地,在本发明上述各装置实施例中,所述第二进程还用于:从所述网络附属存储上定位所述需要读取的小文件所在分块文件之后,将所述所在分块文件的文件描述符缓存在服务器的内存中。
可选地,在本发明上述各装置实施例中,所述第二进程从所述网络附属存储上定位所述需要读取的小文件所在分块文件时,具体用于:响应于服务器的内存中缓存有所述所在分块文件的文件描述符,根据所述所在分块文件的文件描述符定位所述需要读取的小文件所在分块文件。
可选地,在本发明上述各装置实施例中,还包括:
负载均衡器,用于响应于接收到第三应用发送的第二读请求,将所述第二读请求分发给至少一个服务器上的至少一个第三进程;所述第二读请求中包括日期;以及将所述第三进程返回的所述第二读请求中日期对应的分块文件中所有的小文件返回所述第三应用;
所述至少一个服务器上的至少一个第三进程,用于从所述网络附属存储上查询所述第二读请求中日期对应的分块文件,读取所述第二读请求中日期对应的分块文件中所有的小文件并返回所述负载均衡器。
可选地,在本发明上述各装置实施例中,所述第三进程从所述网络附属存储上查询所述第二读请求中日期对应的分块文件,读取所述第二读请求中日期对应的分块文件中所有的小文件并返回所述负载均衡器时,具体用于:
从所述网络附属存储上查询所述第二读请求中日期对应的分块文件,并将所述第二读请求中日期对应的分块文件中的所有节读取到所在服务器的内存中;
分别针对内存中的各节,根据节内的校验码对该节进行校验和数据格式检查;
响应于所述节通过校验和数据格式检查,顺序读取通过校验和数据格式检查的节内的所有小文件并返回所述负载均衡器。
可选地,在本发明上述各装置实施例中,所述第三进程从所述网络附属存储上查询所述第二读请求中日期对应的分块文件,读取所述第二读请求中日期对应的分块文件中所有的小文件并返回所述负载均衡器时,具体用于:
从所述网络附属存储上查询所述第二读请求中日期对应的分块文件,若所述第二读请求中日期对应的分块文件中节的总数量大于预设数量阈值,向所述负载均衡器返回迭代器;
迭代执行所述从所述第二读请求中日期对应的分块文件中选取至少一个节读取到所在服务器的内存中,并分别针对内存中的各节,根据节内的校验码对该节进行校验和数据格式检查;以及所述负载均衡器调用所述迭代器依次读取内存中的一个小文件的操作,直至所述负载均衡器读取完所述第二读请求中日期对应的分块文件中的所有小文件。
可选地,在本发明上述各装置实施例中,还包括:
负载均衡器,用于响应于接收到第三应用发送的删除读请求,将所述删除读请求分发给至少一个服务器上的至少一个第四进程;所述删除请求中包括日期;
所述至少一个服务器上的所述至少一个第四进程,用于从所述网络附属存储上查询所述删除请求中日期对应的分块文件并删除所述删除请求中日期对应的分块文件。
根据本发明实施例的又一个方面,提供的一种电子设备,包括:本发明上述任一实施例所述的文件存储装置。
根据本发明实施例的再一个方面,提供的另一种电子设备,包括:
处理器和本发明上述任一实施例所述的文件存储装置;
在处理器运行所述文件存储装置时,本发明上述任一实施例所述的文件存储装置中的单元被运行。
根据本发明实施例的再一个方面,提供的又一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行本发明上述任一实施例所述方法中各步骤的操作。
根据本发明实施例的再一个方面,提供的一种计算机程序,包括计算机可读代码,当所述计算机可读代码在设备上运行时,所述设备中的处理器执行用于实现本发明上述任一实施例所述方法中各步骤的指令。
根据本发明实施例的再一个方面,提供的一种计算机可读介质,用于存储计算机可读取的指令,所述指令被执行时实现本发明上述任一实施例所述方法中各步骤的操作。
基于本发明上述实施例提供的文件存储方法和装置、电子设备、程序和介质,服务器上的第一进程接收到写请求时,将写请求中的小文件存储在进程的缓冲区内,确定该小文件的索引,当满足缓冲区中数据量的写入条件时,将缓冲区中的数据写入到网络附属存储器中的一个分块文件中。本发明实施例通过将小文件写入到网络附属存储器中的一个分块文件中从而实现了小文件的合并,从而减少了文件系统(即:网络附属存储器)中存储的文件的数量,降低文件系统的压力,优化了文件系统的存储性能;使用网络附属存储+多进程的模式进行分布式扩展,可以通过增加网络附属存储来扩充容量和通过增加进程数来提高可用性。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
构成说明书的一部分的附图描述了本发明的实施例,并且连同描述一起用于解释本发明的原理。
参照附图,根据下面的详细描述,可以更加清楚地理解本发明,其中:
图1为本发明文件存储方法一个实施例的流程图。
图2为本发明文件存储方法另一个实施例的流程图。
图3为本发明实施例中读取小文件另一个实施例的流程图。
图4为本发明实施例中批量读取一个日期的所有小文件一个实施例的流程图。
图5为本发明实施例中批量删除一个日期的所有小文件一个实施例的流程图。
图6为本发明文件存储装置一个实施例的结构示意图。
图7为本发明文件存储装置另一个实施例的结构示意图。
图8为本发明文件存储装置一个应用实施例的结构示意图。
图9为本发明电子设备一个应用实施例的结构示意图。
具体实施方式
现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
本发明实施例可以应用于终端设备、计算机系统、服务器等电子设备,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与终端设备、计算机系统、服务器等电子设备一起使用的众所周知的终端设备、计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
终端设备、计算机系统、服务器等电子设备可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
在实现本发明的过程中,本发明人通过研究发现:在智能监控领域,需要存储的数据是上千亿张的图片,每张图片的大小一般在10KB到200KB之间,并带有包含拍摄时间与拍摄位置在内的一些元信息。传统的存储模块方案,例如机械硬盘+文件系统、或固态硬盘+数据库等,在智能监控这一场景下会遇到很多问题,譬如:小文件数量过多影响存储性能,不便于分布式扩展,以及运维难度较高等。
图1为本发明文件存储方法一个实施例的流程图。如图1所示,该实施例的文件存储方法包括:
102,响应于接收到写请求,服务器上的至少一个第一进程将写请求中的小文件存储在该第一进程的缓冲区内,确定该小文件的索引。
其中,小文件的索引包括:小文件所在分块文件的分块文件标识、以及所在节的节标识和节内偏移量。可选地,在本发明各实施例中,小文件的索引还可以包括:小文件所在分块文件的日期。分块文件标识(ID)用于在网络附属存储器中唯一标识一个分块文件,例如可以是分块文件的名称+日期、分块文件的编号+日期等组成;节标识(ID)用于在分块文件中唯一标识一个节,例如可以是在分块文件中的编号。节内偏移量是指该小文件的数据包在所属节中的位置,例如在该节的第XXX个Byte开始是这个数据包,可用于在读小文件时直接计算出该数据包在整个分块文件中的偏移量,从而直接调用文件系统的寻道命令(fseek)读取该数据包。
本发明各实施例中,一个进程是指一个提供了接口的进程,这些接口例如可以远程过程调用(Remote Procedure Call,RPC)的形式提供,从而实现进程与其他通信单元(例如终端设备、服务器、应用、其他进程)之间的信息交互。
本发明各实施例中,小文件是指大小小于预设阈值(例如1MB)的文件,例如图片,每张图片的大小一般在10KB到200KB之间。
104,响应于满足缓冲区中数据的写入条件,第一进程将该缓冲区中的数据写入到网络附属存储器中的一个分块文件中。
在本发明各实施例中,每个进程启动后便可以根据自己缓冲区的大小选择写入的分块文件,以及根据该分块文件当前有几个节、缓冲区中的数据有几个节、小文件在当前节的位置等,确定小文件的索引。
基于本发明上述实施例提供的文件存储方法,服务器上的第一进程接收到写请求时,将写请求中的小文件存储在进程的缓冲区内,确定该小文件的索引,当满足缓冲区中数据量的写入条件时,将缓冲区中的数据写入到网络附属存储器中的一个分块文件中。本发明实施例通过将小文件写入到网络附属存储器中的一个分块文件中从而实现了小文件的合并,从而减少了文件系统(即:网络附属存储器)中存储的文件的数量,降低文件系统的压力,优化了文件系统的存储性能;使用网络附属存储+多进程的模式进行分布式扩展,可以通过增加网络附属存储来扩充容量和通过增加进程数来提高可用性。
在本发明各实施例的一个实施方式中,第一进程可以将该缓冲区中的数据追加写入到网络附属存储器中的一个分块文件中,所谓追加写入,是在文件末尾添加新内容,即:第一进程可以在网络附属存储器中的一个分块文件中已有数据的末尾添加该缓冲区中的数据,若该分块文件为新创建文件、其中尚无数据,则可以直接在该分块文件中写入第一次写入的数据,后续依次采用追加写入的方式写入数据。本实施例通过追加写入的方式可以进一步优化文件系统的存储性能。
在本发明文件存储方法各实施例中,操作104中满足缓冲区中数据的写入条件可以是:缓冲区中的数据量达到一个节的大小,或者缓冲区中的数据在该缓冲区中的最长保存时间达到预设时长阈值。
在本发明文件存储方法各实施例的一个实施方式中,操作104可以包括:响应于缓冲区中的数据量达到一个节的大小,第一进程将其缓冲区中的数据作为一个节,追加写入到网络附属存储器中的一个分块文件中。
本实施例中,当缓冲区中的数据量达到一个节的大小时,将缓冲区中的数据作为一个节追加写入到网络附属存储器中的一个分块文件中,通过将小文件合并来减少文件的数量,降低文件系统的压力,并通过追加写入的方式来优化存储性能,可以较好地利用底层存储设备的写入带宽。
另外,在本发明文件存储方法各实施例的另一个实施方式中,操作104可以包括:响应于缓冲区中的数据在该缓冲区中的最长保存时间达到预设时长阈值,例如30秒,第一进程将该缓冲区中的数据追加写入到网络附属存储器中的一个分块文件中。
基于该实施例,进程可以在缓冲区中数据的保存时间达到预设时长阈值时,将缓冲区中的数据写入到分块文件中,可以避免其他进程长时间无法读到停留在该进程的缓冲区中的小文件,增强了数据的一致性。
本发明实施例提供了一种合并后小文件的层次结构设计,包含日期、分块文件、节与小文件四层。最上层按日期(即:以天为单位)进行分割,以便批量处理特定日期的所有小文件;每天的小文件按某个固定大小单位(例如1GB)分割为若干分块,每个分块对应一个文件系统上的文件,称为分块文件;每个分块文件按某个固定大小单位(例如16MB)分割为若干节,作为批量读写操作的最小单位;每个节由若干连续存储的小文件组成,包含这些小文件的二进制内容、元信息以及校验码等。
本发明实施例提供的上述层次结构设计,可以实现数据隔离性。日期作为顶层分割可以高效地按天批量处理小文件数据,分块可以确保单个分块文件损坏也不会影响到其它分块文件中的数据,以节为单位的读写操作可以确保一次操作失败不会影响到其它节的数据。
在本发明文件存储方法的另一个实施例中,网络附属存储器挂载到上述至少一个服务器中的所有服务器上,从而形成分布式存储。将网络附属存储挂载到所有服务器上,可以确保各个进程间的数据一致性。本发明实施例中的服务器包括至少一个,本发明各实施例可以服务的形式实现,在分布式场景下,在每台服务器上运行一个或多个该服务的进程(提供了上述服务接口的进程),应用调用服务接口完成数据的存储、读取、删除等操作,这些服务接口可以远程过程调用(RPC)的形式提供,可以通过负载均衡器进行请求的分发。其中的服务接口例如可以包括:1,写一个小文件;2,读一个小文件;3,批量读某个日期所有的小文件;4,批量删除某个日期所有的小文件。
本发明实施例的技术方案在设计上确保了一定程度上的无中心与无状态,易于进行分布式扩展。其中,无中心是指所有进程都是等价的,任意一个进程异常中止均不会导致整个系统异常;无状态是指单个进程基本上没有在内存中维护运行状态,因此一个进程异常中止后,本来由该进程响应的请求还是可以由其它进程来完成。
图2为本发明文件存储方法另一个实施例的流程图。如图2所示,该实施例的文件存储方法包括:
202,响应于接收到第一应用发送的写请求,负载均衡器将该写请求分发给上述至少一个服务器或其中部分服务器上的至少一个第一进程。
204,上述至少一个第一进程将写请求中的小文件存储在该第一进程的缓冲区内,确定并向负载均衡器返回该小文件的索引。
在本发明各实施例的其中一个实施方式中,将写请求中的小文件存储在第一进程的缓冲区内,可以是:将小文件的二进制内容、元信息和校验码,例如使用Google ProtocolBuffer方式,组合成一个数据包,存储在第一进程的缓冲区内。其中,二进制内容即小文件的原始二进制数据;元信息包括该小文件的生成或修改日期(例如照片的拍摄日期)、生成位置(例如照片的拍摄位置),还可以选择性地包括用于表示该小文件文件类型的属性列表;小文件的校验码可以根据其二进制数据由预设算法生成,可以用于在读数据包时判断数据包是否损坏,例如出现磁盘坏道等。
其中,小文件的索引包括:小文件所在分块文件的日期和分块文件标识、以及所在节的节标识和节内偏移量。分块文件标识(ID)用于在网络附属存储器中唯一标识一个分块文件,例如可以是分块文件的名称+日期、分块文件的编号+日期等组成;节标识(ID)用于在分块文件中唯一标识一个节,例如可以是在分块文件中的编号。
206,响应于缓冲区中的数据量达到一个节的大小,第一进程将缓冲区中的数据作为一个节,追加写入到网络附属存储器中的一个分块文件中。
在本发明各实施例的其中一个实施方式中,缓冲区的大小可以为一个节的大小,也可以大于一个节的大小。
在本发明各实施例的其中一个实施方式中,上述将缓冲区中的数据作为一个节,追加写入到网络附属存储器中的一个分块文件中,可以包括:
将缓冲区内的所有数据包、统计信息和校验码作为一个节,追加写入到网络附属存储器中的一个分块文件中。
其中的统计信息包括:缓冲区内小文件的个数、所有二进制内容的大小,另外还可以选择性地包括当前服务的版本信息、魔数(Magic Number)等。
另外,在本发明文件存储方法各实施例的另一个实施例中,操作206也可以替换为:响应于缓冲区中的数据在该缓冲区中的最长保存时间达到预设时长阈值,例如30秒,第一进程将该缓冲区中的数据追加写入到网络附属存储器中的一个分块文件中。或者操作206可以同时包括:响应于缓冲区中的数据量达到一个节的大小,第一进程将缓冲区中的数据作为一个节,追加写入到网络附属存储器中的一个分块文件中;响应于缓冲区中的数据在该缓冲区中的最长保存时间达到预设时长阈值,例如30秒,第一进程将该缓冲区中的数据追加写入到网络附属存储器中的一个分块文件中。
在本发明各实施例的其中一个实施方式中,上述将缓冲区中的数据追加写入到网络附属存储器中的一个分块文件中之前,还可以包括:从网络附属存储器选取一个分块文件作为写入缓冲区中的数据的分块文件。
在其中一个可选示例中,从网络附属存储器选取一个分块文件,可以包括:
从网络附属存储器的分块文件中,选取一个未添加文件锁的分块文件作为写入缓冲区中的数据的一个分块文件,并对选取的分块文件添加文件锁;
若网络附属存储器的分块文件中不存在未添加文件锁的分块文件,在网络附属存储上创建一个新的分块文件,并对创建的分块文件添加文件锁。
基于该示例性实施例,每个进程只能选取一个未添加文件锁的分块文件作为写入缓冲区中的数据的一个分块文件,选取分块文件后便对选取的分块文件添加文件锁,例如文件锁中的排它锁,以避免其他进程也写入该分块文件,可以在分布式场景下,避免多个进程同时写一个分块文件,从而有助于保持数据的一致性。多个进程同时读取分块文件并不会影响分块文件的数据一致性,因此进程读取分块文件时无需添加文件锁。每个进程结束时、或者分块文件写满时、或者进程退出时,删除向该分块文件添加的文件锁。
在另一个可选示例中,从网络附属存储器选取一个分块文件作为写入缓冲区中的数据的分块文件,可以包括:
根据缓冲区中节的大小,从网络附属存储器中查找当前日期的分块文件中是否有未写满、且剩余容量不小于该缓冲区中节的大小的分块文件;
若当前日期的分块文件中有未写满、且剩余容量不小于该缓冲区中节的大小的分块文件,选取一个当前日期未写满、且剩余容量不小于该缓冲区中节的大小的分块文件;将缓冲区中的数据作为一个节,追加写入到选取的分块文件中;
否则,若当前日期的分块文件中没有未写满、且剩余容量不小于该缓冲区中节的大小的分块文件,在网络附属存储上创建一个新的分块文件作为写入上述缓冲区中的数据的分块文件。
另外,在本发明文件存储方法的又一个实施例中,将小文件写入网络附属存储器后,还可以读取网络附属存储器中的小文件。在其中一个实施例中,可以通过如下方式读取小文件:
响应于接收到第二应用发送的需要读取的小文件的第一读请求,至少一个服务器上的至少一个第二进程解析该第一读请求中需要读取的小文件的索引,得到需要读取的小文件所在分块文件的分块文件标识、节标识和节内偏移量;
第二进程从网络附属存储上定位需要读取的小文件所在分块文件并跳转到节内偏移量对应的位置,读取需要读取的小文件并返回第二应用。
图3为本发明实施例中读取小文件另一个实施例的流程图。如图3所示,该实施例读取小文件的操作包括:
302,响应于接收到第二应用发送的第一读请求,负载均衡器将该第一读请求分发给至少一个服务器上的至少一个第二进程。
304,第二进程解析该第一读请求中需要读取的小文件的索引,得到需要读取的小文件所在分块文件的分块文件标识、节标识和节内偏移量。
306,第二进程从网络附属存储上定位需要读取的小文件所在分块文件并跳转到节内偏移量对应的位置,读取需要读取的小文件并返回负载均衡器。
308,负载均衡器将需要读取的小文件返回第二应用。
基于上述实施例,实现了对小文件的随机读取。本发明实施例在读小文件时,直接根据节内偏移量计算出该数据包在整个分块文件中的偏移量,从而直接调用文件系统的寻道命令(fseek)读取该数据包,只需一次硬盘寻道操作(即:调用一次文件系统的寻道命令)即可读取单个小文件,降低了读操作的延时。
在本发明上述各读取小文件实施例的其中一种实施方式中,读取需要读取的小文件并返回,可以包括:
读取需要读取的小文件,并根据小文件中的校验码对需要读取的小文件中的二进制内容进行校验和数据格式检查。其中,对需要读取的小文件中的二进制内容进行校验时,可以对读取出来的小文件的数据包,采用与写小文件时同样的预设算法计算校验码,判断与小文件中的校验码是否相等,实现对需要读取的小文件中的二进制内容进行校验;对需要读取的小文件中的二进制内容进行数据格式检查时,可以通过,例如通过GoogleProtocol Buffer解码方式,解码数据包是否成功来判断数据格式是否正确;
若二进制内容通过校验与数据格式检查,返回需要读取的小文件。
另外,在本发明实施例中读取小文件的又一个实施例中,从网络附属存储上定位需要读取的小文件所在分块文件之后,还可以包括:将所在分块文件的文件描述符缓存在服务器的内存中。其中,打开的文件描述符是指根据分块文件名打开分块文件后获得的句柄,保存该句柄可以减少从分块文件名定位到分块文件的时间。
这样,后续从网络附属存储上定位需要读取的小文件所在分块文件时,可以先查询服务器的内存中是否缓存有上述所在分块文件的文件描述符,响应于服务器的内存中缓存有该所在分块文件的文件描述符,根据该所在分块文件的文件描述符定位需要读取的小文件所在分块文件。
为了优化效率,可以将打开的文件描述符缓存在内存,提高后续访问时间相近的小文件的效率。例如,连续N次读请求要读的小文件恰好属于同一分块文件时,缓存该文件描述符可以减少后面的N-1次打开分块文件与关闭分块文件的操作。
另外,在本发明文件存储方法的又一个实施例中,将小文件写入网络附属存储器后,还可以批量读取网络附属存储器中一个日期下的所有小文件。图4为本发明实施例中批量读取一个日期的所有小文件一个实施例的流程图。如图4所示,该实施例的批量读取一个日期的所有小文件,包括:
402,响应于接收到第三应用发送的第二读请求,负载均衡器将该第二读请求分发给至少一个服务器上的至少一个第三进程,该第二读请求中包括日期。
404,第三进程从网络附属存储上查询第二读请求中日期对应的分块文件,读取第二读请求中日期对应的分块文件中所有的小文件并返回负载均衡器。
406,负载均衡器将第二读请求中日期对应的分块文件中所有的小文件返回第三应用。
在本发明批量读取一个日期的所有小文件实施例的其中一个实施方式中,操作404可以包括:
第三进程从网络附属存储上查询第二读请求中日期对应的分块文件;
第三进程从网络附属存储上查询第二读请求中日期对应的分块文件,并将第二读请求中日期对应的分块文件中的所有节读取到所在服务器的内存中。在其中一个可选示例中,每个分块中的各个节可以按从前往后的顺序读,这样硬盘的磁头基本上是顺序扫描的,可以提高读取速度;对于各分块文件,可以按分块文件的修改时间的顺序读取;
第三进程分别针对内存中的各节,根据节内的校验码对该节进行校验和数据格式检查;
响应于节通过校验和数据格式检查,顺序读取通过校验和数据格式检查的节内的所有小文件并返回负载均衡器。
基于上述实施例,实现了对同一日期的小文件的批量读取。
在本发明批量读取一个日期的所有小文件实施例的另一个实施方式中,操作404可以包括:
第三进程从网络附属存储上查询第二读请求中日期对应的分块文件,若第二读请求中日期对应的分块文件中节的总数量大于预设数量阈值,向负载均衡器返回迭代器;
迭代执行第三进程从第二读请求中日期对应的分块文件中选取至少一个节读取到所在服务器的内存中,并分别针对内存中的各节,根据节内的校验码对该节进行校验和数据格式检查;以及负载均衡器调用迭代器依次读取内存中的一个小文件的操作,直至负载均衡器读取完第二读请求中日期对应的分块文件中的所有小文件。
当内存中节的数量较多时,使用迭代器依次返回各个节中的小文件,可以减轻对内存的压力。
另外,在本发明文件存储方法的再一个实施例中,将小文件写入网络附属存储器后,还可以批量删除一个日期的所有小文件。图5为本发明实施例中批量删除一个日期的所有小文件一个实施例的流程图。如图5所示,该实施例批量删除一个日期的所有小文件,包括:
502,响应于接收到第三应用发送的删除读请求,负载均衡器将删除读请求分发给至少一个服务器上的至少一个第四进程,该删除请求中包括日期。
504,第四进程从网络附属存储上查询删除请求中日期对应的分块文件,并删除该删除请求中日期对应的分块文件。
基于上述实施例,实现了对同一日期的小文件的批量删除。
本发明实施例可以应用于需要存储大量(例如百亿以上)小文件(例如1MB以内)的场景,尤其是数据的使用模式与时间强相关的场景,例如智能监控应用场景。
在智能监控应用中,可以基于本发明实施例,将上万路抓拍相机拍到的人脸图片作为小文件实时写入该时序小文件服务(即:网络附属存储器)中;当某张特定的人脸图片需要展示时,可以通过上述读取小文件的方案读取该人脸图像,一次读取操作的平均延迟较短,例如可能在一毫秒以内。当某个日期发生了特殊事件时,可以通过本发明上述批量读取一个日期的所有小文件的方案,快速地遍历该日期的所有小文件数据。对于超出监控保存期限(例如一年)的小文件数据,可以通过本发明上述批量删除一个日期的所有小文件的方案,快速地批量删除超出监控保存期限的小文件数据。
本发明实施例提供的任一种文件存储方法可以由任意适当的具有数据处理能力的设备执行,包括但不限于:终端设备和服务器等。或者,本发明实施例提供的任一种文件存储方法可以由处理器执行,如处理器通过调用存储器存储的相应指令来执行本发明实施例提及的任一种文件存储方法。下文不再赘述。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图6为本发明文件存储装置一个实施例的结构示意图。本发明各实施例的文件存储装置可用于实现本发明上述各文件存储方法实施例。如图6所示,该实施例的文件存储装置包括:网络附属存储器和位于至少一个服务器上的至少一个进程。其中:
进程,用于响应于接收到写请求,作为第一进程将写请求中的小文件存储在该第一进程的缓冲区内,确定该小文件的索引;以及响应于满足缓冲区中数据量的写入条件,将缓冲区中的数据写入到网络附属存储器中的一个分块文件中。其中,小文件的索引包括:小文件所在分块文件的分块文件标识、以及所在节的节标识和节内偏移量。
网络附属存储器,挂载到至少一个服务器上,用于存储分块文件。
基于本发明上述实施例提供的文件存储装置,服务器上的第一进程接收到写请求时,将写请求中的小文件存储在进程的缓冲区内,确定该小文件的索引,当满足缓冲区中数据量的写入条件时,将缓冲区中的数据写入到网络附属存储器中的一个分块文件中。本发明实施例通过将小文件写入到网络附属存储器中的一个分块文件中从而实现了小文件的合并,从而减少了文件系统(即:网络附属存储器)中存储的文件的数量,降低文件系统的压力,优化了文件系统的存储性能;使用网络附属存储+多进程的模式进行分布式扩展,可以通过增加网络附属存储来扩充容量和通过增加进程数来提高可用性。
在本发明各文件存储装置实施例的一个实施方式中,第一进程具体用于:
响应于缓冲区中的数据量达到一个节的大小,将缓冲区中的数据作为一个节,追加写入到网络附属存储器中的一个分块文件中;和/或
响应于缓冲区中的数据在缓冲区中的最长保存时间达到预设时长阈值,将缓冲区中的数据追加写入到网络附属存储器中的一个分块文件中。
图7为本发明文件存储装置另一个实施例的结构示意图。参见图7,与图6所述各文件存储装置实施例相比,该实施例的文件存储装置还包括:负载均衡器,用于响应于接收到第一应用发送的写请求,将写请求分发给至少一个服务器上的至少一个第一进程,以及接收第一进程返回的小文件的索引。
在本发明各文件存储装置实施例的一个实施方式中,缓冲区的大小为一个节的大小,或者缓冲区的大小大于一个节的大小。
在本发明各文件存储装置实施例的一个实施方式中,第一进程将写请求中的小文件存储在第一进程的缓冲区内时,具体用于:将小文件的二进制内容、元信息和校验码组合成一个数据包,存储在第一进程的缓冲区内。
在本发明各文件存储装置实施例的一个实施方式中,第一进程将缓冲区中的数据追加写入到网络附属存储器中的一个分块文件中时,具体用于:将缓冲区内的所有数据包、统计信息和校验码追加写入到网络附属存储器中的一个分块文件中;统计信息包括:缓冲区内小文件的个数、所有二进制内容的大小。
本发明文件存储装置的又一个实施例中,第一进程还可用于:从网络附属存储器选取一个分块文件作为写入缓冲区中的数据的分块文件。
在其中一个示例中,第一进程从网络附属存储器选取一个分块文件时,具体用于:
从网络附属存储器的分块文件中,选取一个未添加文件锁的分块文件作为写入缓冲区中的数据的一个分块文件,并对选取的分块文件添加文件锁;
若网络附属存储器的分块文件中不存在未添加文件锁的分块文件,在网络附属存储上创建一个新的分块文件,并对创建的分块文件添加文件锁。
可选地,上述小文件的索引还包括:小文件所在分块文件的日期。相应地,在进一步实施例中,第一进程从网络附属存储器选取一个分块文件作为写入缓冲区中的数据的分块文件时,具体用于:
根据缓冲区中节的大小,从网络附属存储器中查找当前日期的分块文件中是否有未写满、且剩余容量不小于节的大小的分块文件;
若当前日期的分块文件中有未写满、且剩余容量不小于节的大小的分块文件,选取一个当前日期未写满、且剩余容量不小于节的大小的分块文件作为写入缓冲区中的数据的分块文件;
否则,若当前日期的分块文件中没有未写满、且剩余容量不小于节的大小的分块文件,在网络附属存储上创建一个新的分块文件作为写入缓冲区中的数据的分块文件。
再参见图7,在本发明各实施例的文件存储装置中,还可以包括:
至少一个服务器上的至少一个第二进程,用于响应于接收到第二应用发送的需要读取的小文件的第一读请求,解析第一读请求中需要读取的小文件的索引,得到需要读取的小文件所在分块文件的分块文件标识、节标识和节内偏移量;以及从网络附属存储上定位需要读取的小文件所在分块文件并跳转到节内偏移量对应的位置,读取需要读取的小文件并返回第二应用。
在本发明文件存储装置的再一实施例中,负载均衡器,用于响应于接收到第二应用发送的第一读请求,将第一读请求分发给至少一个服务器上的至少一个第二进程;以及将第二进程返回的需要读取的小文件返回第二应用。相应地,该实施例中,第二进程读取需要读取的小文件并返回第二应用时,具体用于读取需要读取的小文件并返回负载均衡器。
在其中一个可选示例中,负载均衡器或第二进程读取需要读取的小文件并返回时,具体用于:读取需要读取的小文件,并根据小文件中的校验码对需要读取的小文件中的二进制内容进行校验和数据格式检查;以及若二进制内容通过校验与数据格式检查,返回需要读取的小文件。
在本发明各文件存储装置在再一实施例中,第二进程还可用于:从网络附属存储上定位需要读取的小文件所在分块文件之后,将所在分块文件的文件描述符缓存在服务器的内存中。
在其中一个可选示例中,第二进程从网络附属存储上定位需要读取的小文件所在分块文件时,具体用于:响应于服务器的内存中缓存有所在分块文件的文件描述符,根据所在分块文件的文件描述符定位需要读取的小文件所在分块文件。
再参见图7,在本发明各文件存储装置的又一实施例中,负载均衡器,用于响应于接收到第三应用发送的第二读请求,将第二读请求分发给至少一个服务器上的至少一个第三进程;第二读请求中包括日期;以及将第三进程返回的第二读请求中日期对应的分块文件中所有的小文件返回第三应用。
至少一个服务器上的至少一个第三进程,用于从网络附属存储上查询第二读请求中日期对应的分块文件,读取第二读请求中日期对应的分块文件中所有的小文件并返回负载均衡器。
在其中一个可选示例中,第三进程从网络附属存储上查询第二读请求中日期对应的分块文件,读取第二读请求中日期对应的分块文件中所有的小文件并返回负载均衡器时,具体用于:从网络附属存储上查询第二读请求中日期对应的分块文件,并将第二读请求中日期对应的分块文件中的所有节读取到所在服务器的内存中;分别针对内存中的各节,根据节内的校验码对该节进行校验和数据格式检查;以及响应于节通过校验和数据格式检查,顺序读取通过校验和数据格式检查的节内的所有小文件并返回负载均衡器。
进一步示例性地,第三进程从网络附属存储上查询第二读请求中日期对应的分块文件,读取第二读请求中日期对应的分块文件中所有的小文件并返回负载均衡器时,具体用于:从网络附属存储上查询第二读请求中日期对应的分块文件,若第二读请求中日期对应的分块文件中节的总数量大于预设数量阈值,向负载均衡器返回迭代器;迭代执行从第二读请求中日期对应的分块文件中选取至少一个节读取到所在服务器的内存中,并分别针对内存中的各节,根据节内的校验码对该节进行校验和数据格式检查;以及负载均衡器调用迭代器依次读取内存中的一个小文件的操作,直至负载均衡器读取完第二读请求中日期对应的分块文件中的所有小文件。
再参见图7,在本发明各文件存储装置的又一实施例中,还可以包括:位于至少一个服务器上的至少一个第四进程。该实施例中:
负载均衡器,用于响应于接收到第三应用发送的删除读请求,将删除读请求分发给至少一个服务器上的至少一个第四进程;删除请求中包括日期。
至少一个第四进程,用于从网络附属存储上查询删除请求中日期对应的分块文件并删除上述删除请求中日期对应的分块文件。
如图8所示,为本发明文件存储装置一个应用实施例的结构示意图。
图9为本发明电子设备一个应用实施例的结构示意图。下面参考图9,其示出了适于用来实现本申请实施例的终端设备或服务器的电子设备的结构示意图。如图9所示,该电子设备包括一个或多个处理器、通信部等,所述一个或多个处理器例如:一个或多个中央处理单元(CPU),和/或一个或多个图像处理器(GPU)等,处理器可以根据存储在只读存储器(ROM)中的可执行指令或者从存储部分加载到随机访问存储器(RAM)中的可执行指令而执行各种适当的动作和处理。通信部可包括但不限于网卡,所述网卡可包括但不限于IB(Infiniband)网卡,处理器可与只读存储器和/或随机访问存储器中通信以执行可执行指令,通过总线与通信部相连、并经通信部与其他目标设备通信,从而完成本申请实施例提供的任一方法对应的操作,例如,响应于接收到写请求,服务器上的至少一个第一进程将所述写请求中的小文件存储在所述第一进程的缓冲区内,确定所述小文件的索引;其中,所述小文件的索引包括:所述小文件所在分块文件的分块文件标识、以及所在节的节标识和节内偏移量;响应于满足所述缓冲区中数据的写入条件,所述第一进程将所述缓冲区中的数据写入到网络附属存储器中的一个分块文件中。
此外,在RAM中,还可存储有装置操作所需的各种程序和数据。CPU、ROM以及RAM通过总线彼此相连。在有RAM的情况下,ROM为可选模块。RAM存储可执行指令,或在运行时向ROM中写入可执行指令,可执行指令使处理器执行本发明上述任一方法对应的操作。输入/输出(I/O)接口也连接至总线。通信部可以集成设置,也可以设置为具有多个子模块(例如多个IB网卡),并在总线链接上。
以下部件连接至I/O接口:包括键盘、鼠标等的输入部分;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分;包括硬盘等的存储部分;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分。通信部分经由诸如因特网的网络执行通信处理。驱动器也根据需要连接至I/O接口。可拆卸介质,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器上,以便于从其上读出的计算机程序根据需要被安装入存储部分。
需要说明的,如图9所示的架构仅为一种可选实现方式,在具体实践过程中,可根据实际需要对上述图9的部件数量和类型进行选择、删减、增加或替换;在不同功能部件设置上,也可采用分离设置或集成设置等实现方式,例如GPU和CPU可分离设置或者可将GPU集成在CPU上,通信部可分离设置,也可集成设置在CPU或GPU上,等等。这些可替换的实施方式均落入本发明公开的保护范围。
本发明实施例提供了一种电子设备,包括本发明上述任一实施例的文件存储装置。
本发明实施例还提供了另一种电子设备,包括:
处理器和本发明上述任一实施例的文件存储装置;
在处理器运行该文件存储装置时,本发明上述任一实施例的文件存储装置中的单元被运行。
本发明实施例还提供了又一种电子设备,其特征在于,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;
存储器用于存放至少一可执行指令,可执行指令使处理器执行本发明上述任一文件存储方法实施例中各步骤的操作。
本发明实施例还提供了一种计算机程序,包括计算机可读代码,当计算机可读代码在设备上运行时,设备中的处理器执行用于实现本发明上述任一文件存储方法中各步骤的指令。
本发明实施例还提供了一种计算机可读介质,用于存储计算机可读取的指令,该指令被执行时实现本发明上述任一文件存储方法中各步骤的操作。
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
可能以许多方式来实现本发明的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。
本发明的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。
Claims (10)
1.一种文件存储方法,其特征在于,包括:
响应于接收到写请求,服务器上的至少一个第一进程将所述写请求中的小文件存储在所述第一进程的缓冲区内,确定所述小文件的索引;其中,所述小文件的索引包括:所述小文件所在分块文件的分块文件标识、以及所在节的节标识和节内偏移量;
响应于满足所述缓冲区中数据的写入条件,所述第一进程将所述缓冲区中的数据写入到网络附属存储器中的一个分块文件中。
2.根据权利要求1所述的方法,其特征在于,所述满足所述缓冲区中数据的写入条件,所述第一进程将所述缓冲区中的数据写入到网络附属存储器中的一个分块文件中,包括:
响应于所述缓冲区中的数据量达到一个节的大小,所述第一进程将所述缓冲区中的数据作为一个节,追加写入到网络附属存储器中的一个分块文件中;
和/或
响应于所述缓冲区中的数据在所述缓冲区中的最长保存时间达到预设时长阈值,所述第一进程将所述缓冲区中的数据追加写入到网络附属存储器中的一个分块文件中。
3.根据权利要求1或2所述的方法,其特征在于,所述服务器包括至少一个,每个服务器上运行有至少一个进程;所述网络附属存储器挂载到所述至少一个服务器上;
所述方法还包括:
响应于接收到第一应用发送的写请求,负载均衡器将所述写请求分发给至少一个服务器上的至少一个所述第一进程。
4.根据权利要求1-3任一所述的方法,其特征在于,所述缓冲区的大小为一个节的大小,或者所述缓冲区的大小大于一个节的大小。
5.一种文件存储装置,其特征在于,包括:
至少一个进程,位于至少一个服务器上,用于响应于接收到写请求,作为第一进程将所述写请求中的小文件存储在该第一进程的缓冲区内,确定所述小文件的索引,其中,所述小文件的索引包括:所述小文件所在分块文件的分块文件标识、以及所在节的节标识和节内偏移量;以及响应于满足所述缓冲区中数据量的写入条件,将所述缓冲区中的数据写入到网络附属存储器中的一个分块文件中;
网络附属存储器,挂载到至少一个所述服务器上,用于存储分块文件。
6.一种电子设备,其特征在于,包括:权利要求5所述的文件存储装置。
7.一种电子设备,其特征在于,包括:
处理器和权利要求5所述的文件存储装置;
在处理器运行所述文件存储装置时,权利要求5所述的文件存储装置中的单元被运行。
8.一种电子设备,其特征在于,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行权利要求1-4任一所述方法中各步骤的操作。
9.一种计算机程序,包括计算机可读代码,其特征在于,当所述计算机可读代码在设备上运行时,所述设备中的处理器执行用于实现权利要求1-4任一所述方法中各步骤的指令。
10.一种计算机可读介质,用于存储计算机可读取的指令,其特征在于,所述指令被执行时实现权利要求1-4任一所述方法中各步骤的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711217713.3A CN108234594A (zh) | 2017-11-28 | 2017-11-28 | 文件存储方法和装置、电子设备、程序和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711217713.3A CN108234594A (zh) | 2017-11-28 | 2017-11-28 | 文件存储方法和装置、电子设备、程序和介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108234594A true CN108234594A (zh) | 2018-06-29 |
Family
ID=62652974
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711217713.3A Pending CN108234594A (zh) | 2017-11-28 | 2017-11-28 | 文件存储方法和装置、电子设备、程序和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108234594A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109511008A (zh) * | 2018-11-27 | 2019-03-22 | 成都索贝数码科技股份有限公司 | 一种基于对象存储支持视音频文件内容追加的方法 |
CN109739683A (zh) * | 2018-12-31 | 2019-05-10 | 河南思维自动化设备股份有限公司 | 基于掉电防护介质的lkj文件写入方法、存储介质 |
CN110147203A (zh) * | 2019-05-16 | 2019-08-20 | 北京金山云网络技术有限公司 | 一种文件管理方法、装置、电子设备及存储介质 |
CN111831618A (zh) * | 2020-07-21 | 2020-10-27 | 北京青云科技股份有限公司 | 数据写入方法、数据读取方法、装置、设备及存储介质 |
CN112235422A (zh) * | 2020-12-11 | 2021-01-15 | 浙江大华技术股份有限公司 | 数据处理方法、装置、计算机可读存储介质及电子装置 |
CN112925753A (zh) * | 2021-03-25 | 2021-06-08 | 平安科技(深圳)有限公司 | 文件追加写入方法、装置、电子设备及存储介质 |
US20230171224A1 (en) * | 2018-10-03 | 2023-06-01 | Axonius Solutions Ltd. | System and method for managing network connected devices |
CN117725258A (zh) * | 2023-12-19 | 2024-03-19 | 北京中电兴发科技有限公司 | 基于空间和时间均衡安防视频存储规划和定位读写的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102014150A (zh) * | 2010-09-29 | 2011-04-13 | 厦门市美亚柏科信息股份有限公司 | 一种基于udp分布式小文件存储系统及其数据处理方法 |
CN103856567A (zh) * | 2014-03-26 | 2014-06-11 | 西安电子科技大学 | 基于Hadoop分布式文件系统的小文件存储方法 |
CN104536959A (zh) * | 2014-10-16 | 2015-04-22 | 南京邮电大学 | 一种Hadoop存取海量小文件的优化方法 |
CN106909651A (zh) * | 2017-02-23 | 2017-06-30 | 郑州云海信息技术有限公司 | 一种基于hdfs小文件写入和读取的方法 |
-
2017
- 2017-11-28 CN CN201711217713.3A patent/CN108234594A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102014150A (zh) * | 2010-09-29 | 2011-04-13 | 厦门市美亚柏科信息股份有限公司 | 一种基于udp分布式小文件存储系统及其数据处理方法 |
CN102014150B (zh) * | 2010-09-29 | 2013-12-11 | 厦门市美亚柏科信息股份有限公司 | 一种基于udp分布式小文件存储系统及其数据处理方法 |
CN103856567A (zh) * | 2014-03-26 | 2014-06-11 | 西安电子科技大学 | 基于Hadoop分布式文件系统的小文件存储方法 |
CN103856567B (zh) * | 2014-03-26 | 2017-05-17 | 西安电子科技大学 | 基于Hadoop分布式文件系统的小文件存储方法 |
CN104536959A (zh) * | 2014-10-16 | 2015-04-22 | 南京邮电大学 | 一种Hadoop存取海量小文件的优化方法 |
CN106909651A (zh) * | 2017-02-23 | 2017-06-30 | 郑州云海信息技术有限公司 | 一种基于hdfs小文件写入和读取的方法 |
Non-Patent Citations (1)
Title |
---|
张守利等: "一种面向海量小文件的文件接收和存储优化方案", 《小型微型计算机系统(2015年第8期)》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230171224A1 (en) * | 2018-10-03 | 2023-06-01 | Axonius Solutions Ltd. | System and method for managing network connected devices |
US11750558B2 (en) * | 2018-10-03 | 2023-09-05 | Axonius Solutions Ltd. | System and method for managing network connected devices |
CN109511008A (zh) * | 2018-11-27 | 2019-03-22 | 成都索贝数码科技股份有限公司 | 一种基于对象存储支持视音频文件内容追加的方法 |
CN109511008B (zh) * | 2018-11-27 | 2021-07-13 | 成都索贝数码科技股份有限公司 | 一种基于对象存储支持视音频文件内容追加的方法 |
CN109739683A (zh) * | 2018-12-31 | 2019-05-10 | 河南思维自动化设备股份有限公司 | 基于掉电防护介质的lkj文件写入方法、存储介质 |
CN110147203A (zh) * | 2019-05-16 | 2019-08-20 | 北京金山云网络技术有限公司 | 一种文件管理方法、装置、电子设备及存储介质 |
CN110147203B (zh) * | 2019-05-16 | 2022-11-04 | 北京金山云网络技术有限公司 | 一种文件管理方法、装置、电子设备及存储介质 |
CN111831618A (zh) * | 2020-07-21 | 2020-10-27 | 北京青云科技股份有限公司 | 数据写入方法、数据读取方法、装置、设备及存储介质 |
CN112235422A (zh) * | 2020-12-11 | 2021-01-15 | 浙江大华技术股份有限公司 | 数据处理方法、装置、计算机可读存储介质及电子装置 |
CN112925753A (zh) * | 2021-03-25 | 2021-06-08 | 平安科技(深圳)有限公司 | 文件追加写入方法、装置、电子设备及存储介质 |
CN112925753B (zh) * | 2021-03-25 | 2023-11-07 | 平安科技(深圳)有限公司 | 文件追加写入方法、装置、电子设备及存储介质 |
CN117725258A (zh) * | 2023-12-19 | 2024-03-19 | 北京中电兴发科技有限公司 | 基于空间和时间均衡安防视频存储规划和定位读写的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108234594A (zh) | 文件存储方法和装置、电子设备、程序和介质 | |
US20190354451A1 (en) | Optimized disaster-recovery-as-a-service system | |
US8868626B2 (en) | System and method for controlling a file system | |
US9424160B2 (en) | Detection of data flow bottlenecks and disruptions based on operator timing profiles in a parallel processing environment | |
CN109034993A (zh) | 对账方法、设备、系统及计算机可读存储介质 | |
US20200019311A1 (en) | Determining an optimal storage environment for data sets and for migrating data sets | |
EP3346379B1 (en) | Database management system with dynamic allocation of database requests | |
US10331669B2 (en) | Fast query processing in columnar databases with GPUs | |
US10567504B2 (en) | Protecting in-flight transaction requests | |
US20170011054A1 (en) | Intelligent caching in distributed clustered file systems | |
US10282208B2 (en) | Cognitive thread management in a multi-threading application server environment | |
CN106817388A (zh) | 虚拟机、宿主机获取数据的方法、装置及访问数据的系统 | |
Liu et al. | Formal modeling and analysis of RAMP transaction systems | |
CN110196769A (zh) | 一种信息处理方法、装置、服务器及存储介质 | |
CN108074024A (zh) | 风险识别方法、装置及系统 | |
CN109947729A (zh) | 一种实时数据分析方法及装置 | |
US10171431B2 (en) | Secure message handling of an application across deployment locations | |
CN100394404C (zh) | 用于管理元数据的方法和系统 | |
CN108573029A (zh) | 一种获取网络访问关系数据的方法、装置及存储介质 | |
WO2020133069A1 (zh) | 区块链的数据处理方法和装置 | |
CN110110516A (zh) | 日志记录方法、装置及系统 | |
CN108694664A (zh) | 业务系统的核对方法及装置、电子设备 | |
US9473561B2 (en) | Data transmission for transaction processing in a networked environment | |
CN110019444A (zh) | 一种操作请求处理方法、装置、设备及系统 | |
US20240012829A1 (en) | Managing extract, transform and load systems |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180629 |