CN114567413B - 一种数据存储方法及装置 - Google Patents
一种数据存储方法及装置 Download PDFInfo
- Publication number
- CN114567413B CN114567413B CN202210144253.0A CN202210144253A CN114567413B CN 114567413 B CN114567413 B CN 114567413B CN 202210144253 A CN202210144253 A CN 202210144253A CN 114567413 B CN114567413 B CN 114567413B
- Authority
- CN
- China
- Prior art keywords
- request message
- storage
- ith
- data
- storage area
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/0001—Systems modifying transmission characteristics according to link quality, e.g. power backoff
- H04L1/0015—Systems modifying transmission characteristics according to link quality, e.g. power backoff characterised by the adaptation strategy
-
- 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/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L1/00—Arrangements for detecting or preventing errors in the information received
- H04L1/0001—Systems modifying transmission characteristics according to link quality, e.g. power backoff
- H04L1/0015—Systems modifying transmission characteristics according to link quality, e.g. power backoff characterised by the adaptation strategy
- H04L1/0016—Systems modifying transmission characteristics according to link quality, e.g. power backoff characterised by the adaptation strategy involving special memory structures, e.g. look-up tables
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- 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)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据存储方法及装置,包括:若确定第i‑1请求报文仅存储在第一存储区域中,则从第一存储区域中第i‑1请求报文的第i‑1存储结束位置开始,依序存储以流式方式传输的第i请求报文;在第i请求报文存储至第一存储区域的末位置且第i请求报文未存储结束时,若确定已存储的第一数据不小于预设报文头长度,则将第i请求报文除第一数据外的第二数据从第二存储区域的首位置开始存储;其中,第一存储区域和第二存储区域均为预先分配的用于存储请求报文的预设数据长度的存储区域;以此避免重复申请与释放存储区域,降低CPU和内存的资源消耗,提高应用程序处理请求报文的效率。
Description
技术领域
本发明涉及金融科技(Fintech)领域,尤其涉及一种数据存储方法及装置。
背景技术
现有技术中,应用程序通过TCP(Transmission Control Protocol,传输控制协议)链接读取到请求报文时,会申请一块存储区域,并将该请求报文缓存到该存储区域中进行解析,从而获取该请求报文的报文头和报文体。待应用程序将该存储区域的请求报文解析后,释放该存储区域。
但是,现有技术总每次读取请求报文时,都会为请求报文申请一块新的存储区域,然后在解析后释放存储区域。这种重复申请与释放存储区域的方式,频繁的使用CPU和内存,导致增加了CPU和内存的资源消耗,降低了应用程序处理请求报文的效率。
发明内容
本发明实施例提供一种数据存储方法及装置,用于避免重复申请与释放存储区域,降低CPU和内存的资源消耗,提高应用程序处理请求报文的效率。
第一方面,本发明实施例提供一种数据存储方法,包括:
若确定第i-1请求报文仅存储在第一存储区域中,则从所述第一存储区域中所述第i-1请求报文的第i-1存储结束位置开始,依序存储以流式方式传输的第i请求报文;所述第一存储区域为预先分配的用于存储请求报文的预设数据长度的存储区域;
在所述第i请求报文存储至所述第一存储区域的末位置且所述第i请求报文未存储结束时,判断所述第i请求报文在所述第一存储区域中已存储的第一数据是否不小于预设报文头长度;
若是,则将所述第i请求报文的第二数据从第二存储区域的首位置开始存储,直至所述第i请求报文存储结束;所述第二数据为所述第i请求报文除所述第一数据的剩余数据;所述第二存储区域为预先分配的用于存储请求报文的预设数据长度的存储区域;
其中,所述第i请求报文的第i存储开始位置位于所述第一存储区域中,所述第i请求报文的第i存储结束位置位于所述第二存储区域中。
上述技术方案中,共包括两个存储区域,即第一存储区域和第二存储区域,且第一存储区域和第二存储区域为预先分配的用于存储请求报文的预设数据长度的存储区域;也就是说,本发明实施例针对任一请求报文,均存储在第一存储区域和/或第二存储区域,而非针对请求报文申请新的存储区域,以此避免重复申请与释放存储区域,降低CPU和内存的使用率,从而降低CPU和内存的资源消耗,提高应用程序处理请求报文的效率;且通过判断第i请求报文的第一数据是否不小于预设报文头长度来保证第i请求报文的报文头不分割,即第i请求报文的报文头完整的存储在一个存储区域(第一存储区域或第二存储区域)中,以此保证请求报文的报文头的完整性,保证存储和解析时请求报文的准确性。
可选的,所述方法还包括:
若确定所述第一数据小于所述预设报文头长度,则从所述第二存储区域的首位置开始,将所述第一数据从所述第一存储区域拷贝至所述第二存储区域;
从所述第二存储区域中所述第一数据的拷贝结束位置开始存储所述第二数据,直至所述第i请求报文存储结束;
其中,所述第i请求报文的第i存储开始位置和第i存储结束位置均位于所述第二存储区域中。
上述技术方案中,给出了请求报文存储时另一种应用场景;因为流式方式的请求报文是从报文头开始读取,即存储,所以在确定第一数据小于预设报文头长度时,说明已存储的第一数据仅包括一部分请求报文的报文头,为了保证报文头的完整性,将第一数据拷贝至另一存储区域,即第二存储区域,以此保证请求报文的报文头的完整性,保证存储和解析时请求报文的准确性。
可选的,所述方法还包括:
若确定所述第i-1请求报文存储在所述第一存储区域和所述第二存储区域中,若所述第i-1请求报文的第i-1存储结束位置位于所述第二存储区域中,则将所述第i请求报文从所述第一存储区域的首位置开始存储,直至所述第i请求报文存储结束;
其中,所述第i请求报文的第i存储开始位置和第i存储结束位置均位于所述第一存储区域中。
上述技术方案中,给出了请求报文存储时又一种应用场景;在确定第i-1请求报文的一部分存储在第一存储区域,另一部分存储在第二存储区域中时,有可能存在第二存储区域中非存储第i-1请求报文的剩余空间小于第i请求报文的报文头长度的情况,也就是需要对第i请求报文的第一数据进行拷贝的情况,为了避免这种情况,直接将第i请求报文存储在第一存储区域中,以此避免拷贝操作,降低计算资源,提升请求报文的存储效率。
可选的,所述方法还包括:
若所述第i请求报文为首个请求报文,则根据预设规则将所述第i请求报文从所述第一存储区域或所述第二存储区域的首位置开始存储,直至所述第i请求报文存储结束。
上述技术方案中,给出了请求报文存储时再一种应用场景;对于首个请求报文,可以根据预设规则将首个请求报文存储至任一存储区域,提升请求报文存储的灵活性。
可选的,所述预设数据长度不小于请求报文的最大报文长度。
可选的,还包括数据结构体;所述数据结构体用于记录各请求报文的存储信息;
所述第i请求报文存储结束之后,还包括:
在所述数据结构体中记录所述第i请求报文的存储信息;所述第i请求报文的存储信息包括以下至少一种信息:
第i存储开始位置、第i存储结束位置、第i请求报文的报文长度、第i存储结束位置所在存储区域的标识、所述第一数据的数据长度以及所述预设数据长度。
上述技术方案中,数据结构体用于实时记录存储结束的请求报文,并解析存储结束的请求报文。
可选的,在所述数据结构体中记录所述第i请求报文的存储信息之后,还包括:
从所述数据结构体中读取所述第i请求报文的存储信息;
基于所述第i请求报文的存储信息,若确定所述第i请求报文的第一数据的数据长度为0,则将所述第i存储开始位置至所述第i存储结束位置之间的数据拷贝到应用程序的目标缓存中。
可选的,在所述数据结构体中记录所述第i请求报文的存储信息之后,还包括:
从所述数据结构体中读取所述第i请求报文的存储信息;
基于所述第i请求报文的存储信息,若确定所述第一数据的数据长度不为0,则将所述第i存储开始位置至所述第一数据所在存储区域的末位置以及所述第二数据所在存储区域的首位置至所述第i存储结束位置之间的数据拷贝到应用程序的目标缓存中。
上述技术方案中,给出了在解析请求报文时存在的两种可能出现的情况;其一,第一数据的数据长度为0,则表明请求报文仅存储在一个存储区域中,而非存储在两个存储区域中,因此直接在存储了请求报文的存储区域中确定请求报文并发送至目标缓存,实现请求报文解析;
其二,第一数据的数据长度不为0,则表明请求报文存储在两个存储区域中,即请求报文的一部分存储在第一存储区域中,请求报文的另一部分存储在第二存储区域中,因此需要在两个存储区域中确定请求报文并发送至目标缓存,实现请求报文解析,以保证请求报文的完整性和准确性。
第二方面,本发明实施例提供一种数据存储装置,包括:
判断模块,用于在所述第i请求报文存储至所述第一存储区域的末位置且所述第i请求报文未存储结束时,判断所述第i请求报文在所述第一存储区域中已存储的第一数据是否不小于预设报文头长度;
存储模块,用于若确定第i-1请求报文仅存储在第一存储区域中,则从所述第一存储区域中所述第i-1请求报文的第i-1存储结束位置开始,依序存储以流式方式传输的第i请求报文;所述第一存储区域为预先分配的用于存储请求报文的预设数据长度的存储区域;
若确定所述第一数据不小于预设报文头长度,则将所述第i请求报文的第二数据从第二存储区域的首位置开始存储,直至所述第i请求报文存储结束;所述第二数据为所述第i请求报文除所述第一数据的剩余数据;所述第二存储区域为预先分配的用于存储请求报文的预设数据长度的存储区域;
其中,所述第i请求报文的第i存储开始位置位于所述第一存储区域中,所述第i请求报文的第i存储结束位置位于所述第二存储区域中。
可选的,所述存储模块还用于:
若确定所述第一数据小于所述预设报文头长度,则从所述第二存储区域的首位置开始,将所述第一数据从所述第一存储区域拷贝至所述第二存储区域;
从所述第二存储区域中所述第一数据的拷贝结束位置开始存储所述第二数据,直至所述第i请求报文存储结束;
其中,所述第i请求报文的第i存储开始位置和第i存储结束位置均位于所述第二存储区域中。
可选的,所述存储模块还用于:
若确定所述第i-1请求报文存储在所述第一存储区域和所述第二存储区域中,若所述第i-1请求报文的第i-1存储结束位置位于所述第二存储区域中,则将所述第i请求报文从所述第一存储区域的首位置开始存储,直至所述第i请求报文存储结束;
其中,所述第i请求报文的第i存储开始位置和第i存储结束位置均位于所述第一存储区域中。
可选的,所述存储模块还用于:
若所述第i请求报文为首个请求报文,则根据预设规则将所述第i请求报文从所述第一存储区域或所述第二存储区域的首位置开始存储,直至所述第i请求报文存储结束。
可选的,所述预设数据长度不小于请求报文的最大报文长度。
可选的,还包括数据结构体;所述数据结构体用于记录各请求报文的存储信息;
所述存储模块还用于:
所述第i请求报文存储结束之后,在所述数据结构体中记录所述第i请求报文的存储信息;所述第i请求报文的存储信息包括以下至少一种信息:
第i存储开始位置、第i存储结束位置、第i请求报文的报文长度、第i存储结束位置所在存储区域的标识、所述第一数据的数据长度以及所述预设数据长度。
可选的,还包括解析模块;
所述解析模块用于:
在所述数据结构体中记录所述第i请求报文的存储信息之后,从所述数据结构体中读取所述第i请求报文的存储信息;
基于所述第i请求报文的存储信息,若确定所述第i请求报文的第一数据的数据长度为0,则将所述第i存储开始位置至所述第i存储结束位置之间的数据拷贝到应用程序的目标缓存中。
可选的,所述解析模块还用于:
在所述数据结构体中记录所述第i请求报文的存储信息之后,从所述数据结构体中读取所述第i请求报文的存储信息;
基于所述第i请求报文的存储信息,若确定所述第一数据的数据长度不为0,则将所述第i存储开始位置至所述第一数据所在存储区域的末位置以及所述第二数据所在存储区域的首位置至所述第i存储结束位置之间的数据拷贝到应用程序的目标缓存中。
第三方面,本发明实施例还提供一种计算机设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述数据存储方法。
第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述数据存储方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种系统架构示意图;
图2为本发明实施例提供的一种数据存储方法的流程示意图;
图3为本发明实施例提供的一种数据存储方法的示意图;
图4为本发明实施例提供的一种数据存储方法的示意图;
图5为本发明实施例提供的一种数据存储方法的示意图;
图6为本发明实施例提供的一种数据存储方法的示意图;
图7为本发明实施例提供的一种数据存储装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
为了更好的阐述本发明技术方案,下面对报文进行解释。
报文(message)是网络中交换与传输的数据单元,即站点一次性要发送的数据块。报文包含了将要发送的完整的数据信息,其长短很不一致,长度不限且可变。
以HTTP(Hyper Text Transfer Protocol,超文本传输协议)请求报文为例,HTTP请求报文一般包括报文头和报文体;报文头一般记录有请求报文的基本信息,如产生请求的浏览器类型、请求报文的类型等;报文体一般记录有具体的请求数据。
图1示例性的示出了本发明实施例所适用的一种系统架构,该系统架构包括服务器100,该服务器100可以包括处理器110、通信接口120和存储器130。
其中,通信接口120用于读取以流式方式传输的请求报文,如读取TCP链接的请求报文。
处理器110是服务器100的控制中心,利用各种接口和路线连接整个服务器100的各个部分,通过运行或执行存储在存储器130内的软件程序/或模块,以及调用存储在存储器130内的数据,执行服务器100的各种功能和处理数据。可选地,处理器110可以包括一个或多个处理单元。
存储器130可用于存储软件程序以及模块,处理器110通过运行存储在存储器130的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器130可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据业务处理所创建的数据等。此外,存储器130可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
需要说明的是,上述图1所示的结构仅是一种示例,本发明实施例对此不做限定。
基于上述描述,图2示例性的示出了本发明实施例提供的一种数据存储方法的流程示意图,该流程可由数据存储装置执行。
如图2所示,该流程具体包括:
步骤210,若确定第i-1请求报文仅存储在第一存储区域中,则从所述第一存储区域中所述第i-1请求报文的第i-1存储结束位置开始,依序存储以流式方式传输的第i请求报文。
本发明实施例中,请求报文是以流式方式传输的,如通过TCP链接读取的请求报文;在对流式方式传输的请求报文进行存储时,一般是从请求报文的报文头开始存储,直至存储完成请求报文的报文体,确定请求报文存储结束。
另外,对于流式方式传输的请求报文是串行进行存储的,第i请求报文是在串行循序上第i-1请求报文的后一个请求报文。
步骤220,在所述第i请求报文存储至所述第一存储区域的末位置且所述第i请求报文未存储结束时,判断所述第i请求报文在所述第一存储区域中已存储的第一数据是否不小于预设报文头长度。
本发明实施例中,需要保证请求报文的报文头的完整性,以此保证存储的请求报文的准确性,因此需要判断待存储第i请求报文的存储区域(如第一存储区域存储第i-1请求报文结束后剩余的存储区域)是否满足报文头长度,以此确定待存储第i请求报文的存储区域是否可以完整的存储第i请求报文的报文头,其中,报文头长度一般为32字节;在一种可实施的方式中,可以预设报文头长度,如64字节等,在此不做限定。
步骤230,若是,则将所述第i请求报文的第二数据从第二存储区域的首位置开始存储,直至所述第i请求报文存储结束。
本发明实施例中,第二数据为所述第i请求报文除所述第一数据的剩余数据;例如,第i请求报文为x,第一数据为x1,第二数据为x2,其中,x1+x2=x。
且本发明实施例通过预设的两个存储区域对请求报文进行存储,包括第一存储区域和第二存储区域;具体的,第一存储区域和第二存储区域为预先分配的用于存储请求报文的预设数据长度的存储区域;在一种可事实的方式中,为开发人员基于经验预设的值,如1024字节等;在本发明实施例中,预设数据长度不小于请求报文的最大报文长度。
示例性的,针对不同类型(如8583类型、m3类型等)的请求报文,可以配置对应的预设数据长度,如2048字节、512字节、2*1024*1024字节等。
上述实施例为本发明实施例中可能出现的一种应用场景,为了更好的阐述上述技术方案,图3示例性的示出了一种数据存储方法的示意图。
如图3所示,包括第一存储区域A和第二存储区域B;其中,第i-1请求报文为y,第i请求报文为x,第i-1请求报文的存储结束位置为y`位置,即第i请求报文x在存储区域A中的y`位置开始存储,在存储至存储区域A的末位置时,存储的第一数据为x1;此时,判断第一数据x1是否不小于32字节(报文头长度),若是(如x1=35字节),则将第i请求报文的第二数据x2从存储区域B的首位置开始存储,如请求报文x的长度为365字节,则从第36字节至第365字节为第二数据x2,从第36字节存储区域B的首位置开始存储,直至第二数据x2存储完成。
基于上述图3的描述,存在另一种可能出现的应用场景;具体为第一数据x1小于报文头长度的应用场景。
进一步的,若确定第一数据小于预设报文头长度,则从第二存储区域的首位置开始,将第一数据从第一存储区域拷贝至第二存储区域;从第二存储区域中第一数据的拷贝结束位置开始存储第二数据,直至第i请求报文存储结束;其中,第i请求报文的第i存储开始位置和第i存储结束位置均位于第二存储区域中。
基于上述图3进行举例,图4示例性的示出了一种数据存储方法的示意图。如图4所示,包括第一存储区域A和第二存储区域B;其中,第i-1请求报文为y,第i请求报文为x,第i-1请求报文的存储结束位置为y`位置,第i请求报文x在存储区域A中的y`位置开始存储,在存储至存储区域A的末位置时,存储的第一数据为x1;此时,若确定第一数据x1小于32字节(报文头长度),如x1=27字节,则从存储区域B的首位置开始,拷贝第一数据x1至存储区域B;在第一数据x1拷贝结束后,将第二数据x2从第一数据x1的拷贝结束位置x1`(如第27字节位置)开始存储,直至第二数据x2存储完成。其中,存储区域B的首位置作为请求报文x的存储开始位置。需要说明的是,在该种应用场景中,因为第一数据x1和第二数据x2存储在同一个存储区域中,相当于请求报文x完整的存储在一个存储区域中,所以第一数据为0。
基于上述图3和图4的描述,存在又一种可能出现的应用场景;具体为第i-1请求报文的一部分存储在第一存储区域,另一部分存储在第二存储区域。
进一步的,若确定第i-1请求报文存储在第一存储区域和第二存储区域中,若第i-1请求报文的第i-1存储结束位置位于第二存储区域中,则将第i请求报文从第一存储区域的首位置开始存储,直至第i请求报文存储结束;其中,第i请求报文的第i存储开始位置和第i存储结束位置均位于第一存储区域中。
基于上述图3和图4进行举例,图5示例性的示出了一种数据存储方法的示意图。如图5所示,包括第一存储区域A和第二存储区域B;第i-1请求报文为y,且y=y1+y2,即y1为第i-1请求报文的一部分数据,y2为第i-1请求报文的另一部分数据;其中,y1存储在存储区域A中,y2存储在存储区域B中。
基于上述前提,将第i请求报文x从存储区域A的首位置开始存储,直至第i请求报文x存储完成。其中,存储区域A的首位置作为请求报文x的存储开始位置。
基于上述图3、图4和图5的描述,存在再一种可能出现的应用场景;具体为i=1,即第i请求报文为首个请求报文或第一存储区域和第二存储区域中未存储数据时的应用场景。
进一步的,若第i请求报文为首个请求报文,则根据预设规则将第i请求报文从第一存储区域或第二存储区域的首位置开始存储,直至第i请求报文存储结束。
举例来说,预设规则为请求报文的长度尾数为单数时,存储至第一存储区域,请求报文的长度尾数为双数时,存储至第二存储区域,在此不做限定。例如,首个请求报文的报文长度为365字节,尾数“5”为单数,则将首个请求报文存储至第一存储区域。
基于上述实施例,在本发明实施例中,第一存储区域和第二存储区域的信息及存储信息由数据结构体进行表征。
具体的,还包括数据结构体;数据结构体用于记录各请求报文的存储信息;在第i请求报文存储结束之后,在数据结构体中记录第i请求报文的存储信息。在一种可实施的方式中,在请求报文存储至第一存储区域或第二存储区域的末位置时,在数据结构体中记录第i请求报文的存储信息。
进一步的,请求报文的存储信息包括以下至少一种信息:
请求报文的存储开始位置(如第一存储区域的首位置、第二存储区域的首位置等)、存储结束位置、报文长度、存储结束位置所在存储区域的标识(如A、B等)、第一数据的数据长度(如35字节等)以及预设数据长度。
举例来说,数据结构体如下述逻辑代码所示:
type CircleBuffer struct{;
buffer[2][]byte;
pos int;
posFlag int;
length int;
leftLen int;
size int;
};
其中,“buffer[2][]byte”表示共有两个存储区域,“pos”表示请求报文的存储开始位置,“posFlag”表示存储结束位置所在存储区域的标识,“length”表示已存储的请求报文长度,“leftLen”表示第一数据的报文长度,“size”表示预设数据长度。
为了更好的解释上述技术方案,图6示例性的示出了一种数据存储方法的示意图,如图6所示,流程包括:
步骤610,读取以流式方式传输的第i请求报文。
步骤620,判断第一存储区域和第二存储区域中是否存储有数据,若是,则执行步骤630,否则执行步骤640。
步骤630,判断第i-1请求报文是否仅存储在一个存储区域,若是,则执行步骤650,否则执行步骤660。
步骤640,将第i请求报文存储至第一存储区域或第二存储区域。
步骤650,将第i请求报文从第一存储区域中第i-1请求报文的第i-1存储结束位置开始依序存储;在第i请求报文存储至第一存储区域的末位置且第i请求报文未存储结束时,执行步骤670。
步骤660,将第i请求报文存储至第二存储区域;其中,第i-1请求报文的存储结束位置未记录第二存储区域中。
步骤670,判断第一数据是否不小于预设报文头长度,若是则执行步骤680,否则执行步骤690。
步骤680,将第一数据存储第一存储区域,第二数据存储第二存储区域。
步骤690,将第一数据拷贝至第二存储区域,第二数据存储第二存储区域。
在将第i请求报文存储之后,将第i请求报文的存储信息记录在数据结构体中,以此通过数据结构体对第i请求报文进行解析。
在对第i请求报文进行解析时包括以下两种应用场景:
其一、数据结构体中第一数据为0;具体的,从数据结构体中读取第i请求报文的存储信息;基于第i请求报文的存储信息,若确定第i请求报文的第一数据的数据长度为0,则将第i存储开始位置至第i存储结束位置之间的数据拷贝到应用程序的目标缓存中。
基于上述图5进行举例,从存储区域A中确定请求报文x,进而将请求报文x的数据拷贝到应用程序的目标缓存中,实现请求报文的解析。
其二、数据结构体中第一数据不为0;具体的,从数据结构体中读取第i请求报文的存储信息;基于第i请求报文的存储信息,若确定第一数据的数据长度不为0,则将第i存储开始位置至第一数据所在存储区域的末位置以及第二数据所在存储区域的首位置至第i存储结束位置之间的数据拷贝到应用程序的目标缓存中。
基于上述图3进行举例,在存储区域A中确定第一数据x1,在存储区域B中确定第二数据x2,将第一数据x1和第二数据x2拷贝到应用程序的目标缓存中,实现请求报文的解析。
基于相同的技术构思,图7示例性的示出了本发明实施例提供的一种数据存储装置的结构示意图,该装置可以执行的流程。
如图7所示,该装置具体包括:
判断模块710,用于在所述第i请求报文存储至所述第一存储区域的末位置且所述第i请求报文未存储结束时,判断所述第i请求报文在所述第一存储区域中已存储的第一数据是否不小于预设报文头长度;
存储模块720,用于若确定第i-1请求报文仅存储在第一存储区域中,则从所述第一存储区域中所述第i-1请求报文的第i-1存储结束位置开始,依序存储以流式方式传输的第i请求报文;所述第一存储区域为预先分配的用于存储请求报文的预设数据长度的存储区域;
若确定所述第一数据不小于预设报文头长度,则将所述第i请求报文的第二数据从第二存储区域的首位置开始存储,直至所述第i请求报文存储结束;所述第二数据为所述第i请求报文除所述第一数据的剩余数据;所述第二存储区域为预先分配的用于存储请求报文的预设数据长度的存储区域;
其中,所述第i请求报文的第i存储开始位置位于所述第一存储区域中,所述第i请求报文的第i存储结束位置位于所述第二存储区域中。
可选的,所述存储模块720还用于:
若确定所述第一数据小于所述预设报文头长度,则从所述第二存储区域的首位置开始,将所述第一数据从所述第一存储区域拷贝至所述第二存储区域;
从所述第二存储区域中所述第一数据的拷贝结束位置开始存储所述第二数据,直至所述第i请求报文存储结束;
其中,所述第i请求报文的第i存储开始位置和第i存储结束位置均位于所述第二存储区域中。
可选的,所述存储模块720还用于:
若确定所述第i-1请求报文存储在所述第一存储区域和所述第二存储区域中,若所述第i-1请求报文的第i-1存储结束位置位于所述第二存储区域中,则将所述第i请求报文从所述第一存储区域的首位置开始存储,直至所述第i请求报文存储结束;
其中,所述第i请求报文的第i存储开始位置和第i存储结束位置均位于所述第一存储区域中。
可选的,所述存储模块720还用于:
若所述第i请求报文为首个请求报文,则根据预设规则将所述第i请求报文从所述第一存储区域或所述第二存储区域的首位置开始存储,直至所述第i请求报文存储结束。
可选的,所述预设数据长度不小于请求报文的最大报文长度。
可选的,还包括数据结构体;所述数据结构体用于记录各请求报文的存储信息;
所述存储模块720还用于:
所述第i请求报文存储结束之后,在所述数据结构体中记录所述第i请求报文的存储信息;所述第i请求报文的存储信息包括以下至少一种信息:
第i存储开始位置、第i存储结束位置、第i请求报文的报文长度、第i存储结束位置所在存储区域的标识、所述第一数据的数据长度以及所述预设数据长度。
可选的,还包括解析模块730;
所述解析模块730用于:
在所述数据结构体中记录所述第i请求报文的存储信息之后,从所述数据结构体中读取所述第i请求报文的存储信息;
基于所述第i请求报文的存储信息,若确定所述第i请求报文的第一数据的数据长度为0,则将所述第i存储开始位置至所述第i存储结束位置之间的数据拷贝到应用程序的目标缓存中。
可选的,所述解析模块730还用于:
在所述数据结构体中记录所述第i请求报文的存储信息之后,从所述数据结构体中读取所述第i请求报文的存储信息;
基于所述第i请求报文的存储信息,若确定所述第一数据的数据长度不为0,则将所述第i存储开始位置至所述第一数据所在存储区域的末位置以及所述第二数据所在存储区域的首位置至所述第i存储结束位置之间的数据拷贝到应用程序的目标缓存中。
基于相同的技术构思,本发明实施例还提供一种计算机设备,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述数据存储方法。
基于相同的技术构思,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述数据存储方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (11)
1.一种数据存储方法,其特征在于,包括:
若确定第i-1请求报文仅存储在第一存储区域中,则从所述第一存储区域中所述第i-1请求报文的第i-1存储结束位置开始,依序存储以流式方式传输的第i请求报文;所述第一存储区域为预先分配的用于存储请求报文的预设数据长度的存储区域;
在所述第i请求报文存储至所述第一存储区域的末位置且所述第i请求报文未存储结束时,判断所述第i请求报文在所述第一存储区域中已存储的第一数据是否不小于预设报文头长度;
若是,则将所述第i请求报文的第二数据从第二存储区域的首位置开始存储,直至所述第i请求报文存储结束;所述第二数据为所述第i请求报文除所述第一数据的剩余数据;所述第二存储区域为预先分配的用于存储请求报文的预设数据长度的存储区域;
其中,所述第i请求报文的第i存储开始位置位于所述第一存储区域中,所述第i请求报文的第i存储结束位置位于所述第二存储区域中。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
若确定所述第一数据小于所述预设报文头长度,则从所述第二存储区域的首位置开始,将所述第一数据从所述第一存储区域拷贝至所述第二存储区域;
从所述第二存储区域中所述第一数据的拷贝结束位置开始存储所述第二数据,直至所述第i请求报文存储结束;
其中,所述第i请求报文的第i存储开始位置和第i存储结束位置均位于所述第二存储区域中。
3.如权利要求1所述的方法,其特征在于,所述方法还包括:
若确定所述第i-1请求报文存储在所述第一存储区域和所述第二存储区域中,若所述第i-1请求报文的第i-1存储结束位置位于所述第二存储区域中,则将所述第i请求报文从所述第一存储区域的首位置开始存储,直至所述第i请求报文存储结束;
其中,所述第i请求报文的第i存储开始位置和第i存储结束位置均位于所述第一存储区域中。
4.如权利要求1所述的方法,其特征在于,所述方法还包括:
若所述第i请求报文为首个请求报文,则根据预设规则将所述第i请求报文从所述第一存储区域或所述第二存储区域的首位置开始存储,直至所述第i请求报文存储结束。
5.如权利要求1至4任一项所述的方法,其特征在于,所述预设数据长度不小于请求报文的最大报文长度。
6.如权利要求1至4任一项所述的方法,其特征在于,还包括数据结构体;所述数据结构体用于记录各请求报文的存储信息;
所述第i请求报文存储结束之后,还包括:
在所述数据结构体中记录所述第i请求报文的存储信息;所述第i请求报文的存储信息包括以下至少一种信息:
第i存储开始位置、第i存储结束位置、第i请求报文的报文长度、第i存储结束位置所在存储区域的标识、所述第一数据的数据长度以及所述预设数据长度。
7.如权利要求6所述的方法,其特征在于,在所述数据结构体中记录所述第i请求报文的存储信息之后,还包括:
从所述数据结构体中读取所述第i请求报文的存储信息;
基于所述第i请求报文的存储信息,若确定所述第i请求报文的第一数据的数据长度为0,则将所述第i存储开始位置至所述第i存储结束位置之间的数据拷贝到应用程序的目标缓存中。
8.如权利要求6所述的方法,其特征在于,在所述数据结构体中记录所述第i请求报文的存储信息之后,还包括:
从所述数据结构体中读取所述第i请求报文的存储信息;
基于所述第i请求报文的存储信息,若确定所述第一数据的数据长度不为0,则将所述第i存储开始位置至所述第一数据所在存储区域的末位置以及所述第二数据所在存储区域的首位置至所述第i存储结束位置之间的数据拷贝到应用程序的目标缓存中。
9.一种数据存储装置,其特征在于,包括:
判断模块,用于在第i请求报文存储至第一存储区域的末位置且所述第i请求报文未存储结束时,判断所述第i请求报文在所述第一存储区域中已存储的第一数据是否不小于预设报文头长度;
存储模块,用于若确定第i-1请求报文仅存储在第一存储区域中,则从所述第一存储区域中所述第i-1请求报文的第i-1存储结束位置开始,依序存储以流式方式传输的第i请求报文;所述第一存储区域为预先分配的用于存储请求报文的预设数据长度的存储区域;
若确定所述第一数据不小于预设报文头长度,则将所述第i请求报文的第二数据从第二存储区域的首位置开始存储,直至所述第i请求报文存储结束;所述第二数据为所述第i请求报文除所述第一数据的剩余数据;所述第二存储区域为预先分配的用于存储请求报文的预设数据长度的存储区域;
其中,所述第i请求报文的第i存储开始位置位于所述第一存储区域中,所述第i请求报文的第i存储结束位置位于所述第二存储区域中。
10.一种计算机设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行权利要求1至8任一项所述的方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行权利要求1至8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210144253.0A CN114567413B (zh) | 2022-02-17 | 2022-02-17 | 一种数据存储方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210144253.0A CN114567413B (zh) | 2022-02-17 | 2022-02-17 | 一种数据存储方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114567413A CN114567413A (zh) | 2022-05-31 |
CN114567413B true CN114567413B (zh) | 2023-06-30 |
Family
ID=81713439
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210144253.0A Active CN114567413B (zh) | 2022-02-17 | 2022-02-17 | 一种数据存储方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114567413B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103761192A (zh) * | 2014-01-20 | 2014-04-30 | 华为技术有限公司 | 一种内存分配的方法和装置 |
CN104040977A (zh) * | 2012-12-28 | 2014-09-10 | 华为技术有限公司 | 缓存报文的方法和装置 |
CN105094742A (zh) * | 2014-05-09 | 2015-11-25 | 华为技术有限公司 | 一种写数据的方法和设备 |
CN106657097A (zh) * | 2016-12-29 | 2017-05-10 | 浙江大华技术股份有限公司 | 一种数据发送方法及装置 |
US10015167B1 (en) * | 2017-03-17 | 2018-07-03 | Accenture Global Solutions Limited | Extensible key management system for application program interfaces |
CN108462652A (zh) * | 2017-07-31 | 2018-08-28 | 新华三技术有限公司 | 一种报文处理方法、装置和网络设备 |
CN110413220A (zh) * | 2018-04-30 | 2019-11-05 | 三星电子株式会社 | 存储设备和包括存储设备的服务器 |
CN111913807A (zh) * | 2020-08-13 | 2020-11-10 | 支付宝(杭州)信息技术有限公司 | 一种基于多个存储区域的事件处理方法、系统及装置 |
DE102020129306A1 (de) * | 2019-11-06 | 2021-05-06 | Intel Corporation | Übermittlung von paging-unterstützungsinformationen zur benachrichtigung über die anruferidentifikation (cid) |
-
2022
- 2022-02-17 CN CN202210144253.0A patent/CN114567413B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104040977A (zh) * | 2012-12-28 | 2014-09-10 | 华为技术有限公司 | 缓存报文的方法和装置 |
CN103761192A (zh) * | 2014-01-20 | 2014-04-30 | 华为技术有限公司 | 一种内存分配的方法和装置 |
CN105094742A (zh) * | 2014-05-09 | 2015-11-25 | 华为技术有限公司 | 一种写数据的方法和设备 |
CN106657097A (zh) * | 2016-12-29 | 2017-05-10 | 浙江大华技术股份有限公司 | 一种数据发送方法及装置 |
US10015167B1 (en) * | 2017-03-17 | 2018-07-03 | Accenture Global Solutions Limited | Extensible key management system for application program interfaces |
CN108462652A (zh) * | 2017-07-31 | 2018-08-28 | 新华三技术有限公司 | 一种报文处理方法、装置和网络设备 |
CN110413220A (zh) * | 2018-04-30 | 2019-11-05 | 三星电子株式会社 | 存储设备和包括存储设备的服务器 |
DE102020129306A1 (de) * | 2019-11-06 | 2021-05-06 | Intel Corporation | Übermittlung von paging-unterstützungsinformationen zur benachrichtigung über die anruferidentifikation (cid) |
CN111913807A (zh) * | 2020-08-13 | 2020-11-10 | 支付宝(杭州)信息技术有限公司 | 一种基于多个存储区域的事件处理方法、系统及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN114567413A (zh) | 2022-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110147240B (zh) | 基于云存储的应用程序安装方法、系统及存储介质 | |
CN109496418B (zh) | 文件下载方法、装置及设备/终端/服务器 | |
CN106713469B (zh) | 用于分布式容器的动态加载方法、装置及系统 | |
CN109977822B (zh) | 数据供给方法、模型训练方法、装置、系统、设备和介质 | |
CN109981715B (zh) | 一种会话管理的方法及装置 | |
CN112487092B (zh) | 一种基于区块链的智能合约调用方法及装置 | |
CN111553652B (zh) | 业务处理方法及装置 | |
CN108062235B (zh) | 数据处理方法及装置 | |
CN111240772B (zh) | 一种基于区块链的数据处理方法、装置及存储介质 | |
CN115509754A (zh) | 一种业务数据处理方法、装置、电子设备及存储介质 | |
CN111625507A (zh) | 一种文件处理方法及装置 | |
CN114567413B (zh) | 一种数据存储方法及装置 | |
CN117724852A (zh) | 一种云电脑计算资源分配方法及装置 | |
CN111414339B (zh) | 一种文件的处理方法、系统、装置、设备及介质 | |
CN115348333B (zh) | 基于udp双端通信交互的数据传输方法、系统及设备 | |
CN112511609B (zh) | 数据传输方法、装置及存储介质 | |
CN114924967A (zh) | 自动驾驶算法的仿真测试方法、装置、设备及系统 | |
CN112423117B (zh) | Web端视频播放方法、装置及计算机设备 | |
CN110795408A (zh) | 基于对象存储的数据处理方法、装置、服务器和存储介质 | |
CN113792074B (zh) | 一种数据处理方法及装置 | |
CN110677251B (zh) | 一种信息处理方法、装置、介质和设备 | |
CN110928944A (zh) | 一种数据处理方法及其装置 | |
CN115543343B (zh) | 变量跨线程操作方法及装置 | |
CN110837536B (zh) | 一种信息处理方法、装置和存储介质 | |
CN109428915B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |