CN107391388B - 一种基于即时通信进行数据存储的方法和设备 - Google Patents
一种基于即时通信进行数据存储的方法和设备 Download PDFInfo
- Publication number
- CN107391388B CN107391388B CN201610326451.3A CN201610326451A CN107391388B CN 107391388 B CN107391388 B CN 107391388B CN 201610326451 A CN201610326451 A CN 201610326451A CN 107391388 B CN107391388 B CN 107391388B
- Authority
- CN
- China
- Prior art keywords
- storage block
- index
- pointer
- storage
- block index
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请涉及计算机技术领域,特别涉及一种基于即时通信进行数据存储的方法和设备,用以解决现有技术中存在的针对每个请求都需要分配存储空间,使得资源消耗比较严重,并且增加设备负荷,还有可能引起内存泄漏的问题。本申请实施例基于即时通信包括:确定承载待发送的数据的连接;确定分配给所述连接的存储空间中未存储数据的至少一个存储块;将所述数据存储到确定的存储块中。由于本申请实施例分配的存储空间中包括的每个存储块能够存储数据,不需要每次收到请求都分配存储空间,从而降低了资源消耗和设备负荷,进一步可以避免内存泄漏。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种基于即时通信进行数据存储的方法和设备。
背景技术
目前发送方与接收方建立连接后,在一个连接上,每发送一个数据,如果收到针对该数据的ACK(ACKnowledge,正确应答指令)确认包,则确定传输成功,如果没有收到针对该数据的ACK确认包,就需要重传数据包,所以需要存储所有的数据。
目前如果有需要存储的数据,会针对该数据分配内存,并将该数据存储到分配的内存中。比如有16个数据,需要分配16次内存。
而每次分配内存都需要消耗资源,如果请求数量比较多,就会加重设备的负荷,还有可能引起内存泄漏。
发明内容
本申请提供一种基于即时通信进行数据存储的方法和设备,用以解决现有技术中存在的针对每个请求都需要分配存储空间,使得资源消耗比较严重,并且增加设备负荷,还有可能引起存储空间泄漏的问题。
本申请实施例提供的一种基于即时通信进行数据存储的方法,该方法包括:
确定承载待发送的数据的连接;
确定分配给所述连接的存储空间中未存储数据的至少一个存储块;
将所述数据存储到确定的存储块中。
由于本申请实施例分配的存储空间中包括的每个存储块能够存储数据,不需要每次收到请求都分配存储空间,从而降低了资源消耗和设备负荷;进一步可以避免存储空间泄漏。
可选的,所述分配给所述连接的存储空间中未存储数据的至少一个存储块,包括:
根据所述存储空间对应的索引队列中的存储块索引,确定所述连接对应的存储空间中未存储数据的至少一个存储块。
可选的,所述根据所述存储空间对应的索引队列中的存储块索引,确定所述连接对应的存储空间中未存储数据的至少一个存储块,包括:
确定第一指针当前指向的所述存储空间对应的索引队列中的存储块索引;
将所述存储块索引对应的存储块作为未存储数据的存储块;
其中,所述索引队列包括所述存储空间中的存储块对应的存储块索引。
由于通过第一指针确定未存储数据的存储块,从而能够更准确、更快速找到未存储数据的存储块。
可选的,所述将所述数据存储到确定的存储块中之后,还包括:
确定所述索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;
将所述第一指针移动到确定的下一个存储块索引。
由于能够根据索引队列确定位于所述第一指针当前指向的存储块的下一个存储块,并将第一指针移动到确定的下一个存储块,从而保证第一指针能够准确指向未存储数据的存储块。
可选的,该方法还包括:
在需要发送存储块中的数据时,确定第二指针当前指向的所述存储空间对应的索引队列中的存储块索引;
通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据。
由于第二指针指向存储数据的存储块,从而能够更准确、更快速找到已存储数据的存储块。
可选的,所述通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据之后,还包括:
清空所述第二指针指向的存储块索引对应的存储块中的数据;
确定所述索引队列中位于所述第二指针当前指向的存储块索引的下一个存储块索引;
将所述第二指针移动到确定的下一个存储块索引。
可选的,所述通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据之后,清空所述第二指针指向的存储块索引对应的存储块中的数据之前,还包括:
确定所述数据发送成功。
可选的,所述将所述第二指针移动到确定的下一个存储块索引之前,还包括:
确定所述第二指针当前指向的存储块索引的下一个存储块索引与所述第一指针当前指向的存储块索引不同。
可选的,该方法还包括:
若所述第二指针当前指向的存储块索引的下一个存储块索引与所述第一指针当前指向的存储块索引相同,释放分配给所述连接的存储空间。
可选的,所述确定所述索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引之后,将所述第一指针移动到确定的下一个存储块索引之前,还包括:
确定所述第二指针当前指向的存储块索引与所述第一指针当前指向的存储块索引的下一个存储块索引不同。
可选的,该方法还包括:
若所述第二指针当前指向的存储块索引与所述第一指针当前指向的存储块索引的下一个存储块索引相同,则为所述连接分配新的存储空间;
在所述索引队列中所述第一指针当前指向的存储块索引的下一个存储块索引与所述第二指针当前指向的存储块索引之间,增加所述新的存储空间中的存储块对应的存储块索引;
确定增加存储块索引后的索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;
将所述第一指针移动到确定的下一个存储块索引。
由于在确定所有存储块都存储数据后可以增加新的存储块,从而能够存储更多数据。
可选的,所述将所述数据存储到确定的存储块中之后,还包括:
若分配给所述连接的存储空间中没有未存储数据的存储块,则为所述连接分配新的存储空间;
在所述索引队列的最后增加所述新的存储空间中的存储块对应的存储块索引;
确定增加存储块索引后的索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;
将所述第一指针移动到确定的下一个存储块索引。
由于在确定所有存储块都存储数据后可以增加新的存储块,从而能够存储更多数据。
可选的,所述索引队列包括环形队列。
本申请实施例提供的一种基于即时通信进行数据存储的设备,该设备包括:
连接确定模块,用于确定承载待发送的数据的连接;
存储块确定模块,用于确定分配给所述连接的存储空间中未存储数据的至少一个存储块;
处理模块,用于将所述数据存储到确定的存储块中。
可选的,所述存储块确定模块具体用于:
根据所述存储空间对应的索引队列中的存储块索引,确定所述连接对应的存储空间中未存储数据的至少一个存储块。
可选的,所述存储块确定模块具体用于:
确定第一指针当前指向的所述存储空间对应的索引队列中的存储块索引;
将所述存储块索引对应的存储块作为未存储数据的存储块;
其中,所述索引队列包括所述存储空间中的存储块对应的存储块索引。
可选的,所述处理模块还用于:
将所述数据存储到确定的存储块中之后,确定所述索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;将所述第一指针移动到确定的下一个存储块索引。
可选的,所述处理模块还用于:
在需要发送存储块中的数据时,确定第二指针当前指向的所述存储空间对应的索引队列中的存储块索引;通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据。
可选的,所述处理模块用于:
通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据之后,清空所述第二指针指向的存储块索引对应的存储块中的数据;确定所述索引队列中位于所述第二指针当前指向的存储块索引的下一个存储块索引;将所述第二指针移动到确定的下一个存储块索引。
可选的,所述处理模块具体用于:
在确定所述数据发送成功后,清空所述第二指针指向的存储块索引对应的存储块中的数据。
可选的,所述处理模块具体用于:
在确定所述第二指针当前指向的存储块索引的下一个存储块索引与所述第一指针当前指向的存储块索引不同后,将所述第二指针移动到确定的下一个存储块索引。
可选的,所述处理模块还用于:
若所述第二指针当前指向的存储块索引的下一个存储块索引与所述第一指针当前指向的存储块索引相同,释放分配给所述连接的存储空间。
可选的,所述处理模块还用于:
在确定所述第二指针当前指向的存储块索引与所述第一指针当前指向的存储块索引的下一个存储块索引不同后,将所述第一指针移动到确定的下一个存储块索引。
可选的,所述处理模块还用于:
若所述第二指针当前指向的存储块索引与所述第一指针当前指向的存储块索引的下一个存储块索引相同,则为所述连接分配新的存储空间;
在所述索引队列中所述第一指针当前指向的存储块索引的下一个存储块索引与所述第二指针当前指向的存储块索引之间,增加所述新的存储空间中的存储块对应的存储块索引;
确定增加存储块索引后的索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;
将所述第一指针移动到确定的下一个存储块索引。
可选的,所述处理模块还用于:
若分配给所述连接的存储空间中没有未存储数据的存储块,则为所述连接分配新的存储空间;
在所述索引队列的最后增加所述新的存储空间中的存储块对应的存储块索引;
确定增加存储块索引后的索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;
将所述第一指针移动到确定的下一个存储块索引。
可选的,所述索引队列包括环形队列。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1A为本申请实施例基于即时通信进行数据存储的方法流程示意图;
图1B为本申请实施例索引和数据块关系示意图;
图2为本申请实施例索引队列的示意图;
图3为本申请实施例未存储数据示意图;
图4为本申请实施例一个存储块存储数据示意图;
图5为本申请实施例三个存储块存储数据示意图;
图6为本申请实施例移动第二指针示意图;
图7为本申请实施例分配新的存储块示意图;
图8为本申请实施例存储空间池示意图;
图9为本申请实施例插入存储块示意图;
图10为本申请实施例数据发送完成示意图;
图11为本申请实施例进行数据存储的完整方法流程示意图;
图12为本申请实施例清除数据的完整方法流程示意图;
图13为本申请实施例基于即时通信进行数据存储的设备结构示意图。
具体实施方式
本申请实施例基于即时通信进行数据存储,具体包括确定承载待发送的数据的连接;确定分配给所述连接的存储空间中未存储数据的至少一个存储块;将所述数据存储到确定的存储块中。由于本申请实施例分配的存储空间中包括的每个存储块能够存储一个请求的数据,不需要每次收到请求都分配存储空间,从而降低了资源消耗和设备负荷,进一步可以避免存储空间泄漏。
其中,本申请实施例的方案可以应用于任何即时通信客户端中,比如钉钉等。
本申请实施例中的数据可以是需要发送给服务器的数据,也可以是需要发送给客户端的数据。比如使用即时通信客户端的用户需要发送消息给另一个用户,如果与另一个用户使用的客户端直接建立连接,则可以将消息直接发送给另一个用户使用的客户端;如果需要通过服务器将消息给另一个用户,则可以将消息直接发送给服务器。
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部份实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
如图1A所示,本申请实施例进行数据存储的方法包括:
步骤100、确定承载待发送的数据的连接;
步骤101、确定分配给所述连接的存储空间中未存储数据的至少一个存储块;
步骤102、将所述数据存储到确定的存储块中。
本申请实施例可以存储基于即时通信中先进先出的数据。即先存储进来的数据需要优先处理,后存储的数据会排在先存储的数据后面,处理时也按照存储的先后顺序进行。比如即时通信中向服务器发送消息,从底层收到的消息需要放到存储块中,对于一个连接的数据,先从底层收到的消息存放到数据块后,需要先发送。
本申请实施例在连接建立后,可以预先为该连接分配一段存储空间用于存储该连接对应的数据。
在实施中,可以根据连接需要的存储块数量确定需要分配的存储空间的大小;
根据确定的需要分配的存储空间的大小分配一段存储空间,并根据存储块数量将所述存储空间分成多段,将每一段作为一个存储块。
比如存储块长度为N,一共需要16个存储块,则存储空间大小可以是N*16。
确定连接需要的存储块数量的方式有很多,比如可以根据连接承载的数据类型确定;也可以根据当前剩余存储空间的容量确定连接需要的存储块数量。可选的,一个存储空间中存储块数量可以是2的倍数。
在分配存储空间后,可以为分配的存储空间建立一个存储空间池,存储空间池中保存分配的存储空间的首地址,该首地址的作用是为了后续需要释放分配的存储空间时使用,具体释放存储空间的内容参见后面的描述。
可选的,确定分配给所述连接的存储空间中未存储数据的至少一个存储块时,可以根据所述存储空间对应的索引队列中的存储块索引,确定所述连接对应的存储空间中未存储数据的至少一个存储块。其中,所述索引队列包括所述存储空间中的存储块对应的存储块索引。
存储块索引是能够确定存储块的信息,比如存储块的地址,序号等。
本申请实施例还设置第一指针,第一指针用于指示下一个数据存储到哪个存储块。
可选的,确定分配给所述连接的存储空间中未存储数据的至少一个存储块时,确定第一指针当前指向的所述存储空间对应的索引队列中的存储块索引;将所述存储块索引对应的存储块作为未存储数据的存储块。
其中,在确定分配的存储空间中的存储块后,会生成每个存储块对应的结构体,结构体中包括对应存储块相关的信息,比如存储块首地址、存储块长度等。第一指针指向存储块时,可以指向存储块的结构体中的一个信息,比如首地址。
其中,为了下次能够准确找到未存储数据的数据块,所述将所述数据存储到确定的存储块中之后,确定所述索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;将所述第一指针移动到确定的下一个存储块索引。
在实施中,通过存储块长度可以得到下一个存储块的首地址。例如,存储块长度为4个字节,则只需要将前一个结点的首地址+4,就可以取到下一个存储块的首地址。
需要说明的是,第一指针指向的具体内容只是举例说明,本申请实施例的第一指针指可以指向任何能够唯一确定存储块的内容。
除了上述第一指针,本申请实施例还可以设置第二指针。第二指针用于指示下一个需要发送的数据存储在哪个存储块。
可选的,在需要发送存储块中的数据时,确定第二指针当前指向的所述存储空间对应的索引队列中的存储块索引;通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据。
其中,在确定分配的存储空间中的存储块后,会生成每个存储块对应的结构体,结构体中包括对应存储块相关的信息,比如存储块首地址、存储块长度等。第二指针指向存储块时,可以指向存储块的结构体中的一个信息,比如首地址。
其中,通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据之后,可以清空所述第二指针指向的存储块索引对应的存储块中的数据;确定所述索引队列中位于所述第二指针当前指向的存储块索引的下一个存储块索引;将所述第二指针移动到确定的下一个存储块索引。
在实施中,可以在决定确定所述数据发送成功后,清空所述第二指针指向的存储块索引对应的存储块中的数据。
本申请实施例在确定分配的存储空间中的存储块后,生成一个索引队列,该索引队列中包括存储空间中的所有存储块。
在实施中,可以将每个存储块对应的存储块索引置于索引队列中,存储块对应的存储块索引包括可以确定对应存储块的信息,以及可以确定索引队列中位于该存储块下一个存储块的信息,比如每个存储块的首地址。
比如索引队列中包括存储块1、存储块2和存储块3,且顺序为存储块1、存储块2和存储块3,则存储块1对应的存储块索引中包括能够确定存储块1的信息以及能够确定存储块2的信息;存储块2对应的存储块索引中包括能够确定存储块2的信息以及能够确定存储块3的信息;由于存储块3后面没有存储块,则存储块3对应的存储块索引中包括能够确定存储块3的信息。
可选的,本申请实施例的索引队列包括是直线形队列,也可以包括环形队列,环形队列可以是环形双向队列或环形单向队列。如果本申请实施例的索引队列包括环形双向队列或环形单向队列,则第一指针和第二指针按照同一个方向移动,比如都是顺时针移动或都是逆时针移动。
假设本申请实施例的索引队列包括环形双向队列或环形单向队列,如图1B所示,索引和数据块关系示意图中,存储空间中数据块1对应索引队列中的数据块索引1;数据块2对应索引队列中的数据块索引2;数据块3对应索引队列中的数据块索引3。
如图2所示,存储块1对应的数据块索引1中包括能够确定存储块1的信息以及能够确定存储块2的信息(比如索引块地址);存储块2对应的数据块索引2中包括能够确定存储块2的信息以及能够确定存储块3的信息;存储块3对应的数据块索引3中包括能够确定存储块3的信息以及能够确定存储块1的信息。
可选的,在存储空间分配完成后,确定所述索引队列中的第一个存储块索引;将所述第一指针指向所述第一个存储块索引,以及将所述第二指针指向所述第一个存储块索引。
以图3为例,图3中分配的存储空间包括4个存储块,索引队列包括环形队列,环形队列的顺序为存储块索引1→存储块索引2→存储块索引3→存储块索引4,存储块索引4之后再转到存储块索引1。
在存储空间分配完成后,第一指针和第二指针都指向存储块索引1。
可选的,将所述第一指针移动到未存储数据的一个存储块索引时,确定所述第一指针当前指向的索引队列中的存储块索引;根据确定的存储块索引,确定所述索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;将所述第一指针移动到确定的下一个存储块索引;
其中,所述索引队列中包括每个存储块对应的存储块索引。
在接收到连接对应的请求后,需要将连接对应的数据存储到第一指针当前指向的存储块索引中,由于第一指针当前指向的存储块索引已经存储数据,需要根据索引队列,将第一指针指向下一个未存储数据的存储块索引。
本申请实施例索引队列中包括每个存储块的存储块索引。由于每个存储块的存储块索引中包括能够确定下一个存储块的信息,所以在确定索引队列中第一指针当前指向的存储块的存储块索引后,根据确定的存储块索引,就可以确定下一个存储块索引,从而可以将第一指针指向下一个存储块索引。
图3为例,第一指针和第二指针都指向存储块索引1。在有待存储的数据后,将数据存储到第一指针当前指向的存储块索引1。
根据索引队列,确定存储块索引1下一个存储块索引为存储块索引2,则将第一指针移动至存储块索引2(即第一指针指向存储块索引2)。移动后的示意图可以参见图4。
如果再收到连接对应的待存储的数据,以图4为例,则将待存储的数据(其中连接对应的待存储的数据是需要通过该连接发送的数据)存储到存储块索引2,并将第一指针移动到存储块索引3。
如果继续收到待存储的数据,则将当前待存储的数据存储到存储块索引3,并将第一指针移动到存储块索引4。移动后的示意图可以参见图5。
可选的,在第二指针指向的存储块索引对应的存储块中存储的数据发送完成后,清空第二指针指向的存储块中存储的数据,并确定所述第二指针当前指向的存储块对应的索引队列中的存储块索引;
根据确定的存储块索引,确定所述索引队列中位于所述第二指针当前指向的存储块的下一个存储块;
将所述第二指针移动到确定的下一个存储块。
可选的,为了保证数据发送的成功率,可以在确定第二指针指向的存储块索引对应的存储块中存储的数据发送成功后清空第二指针指向的存储块中存储的数据,并移动第二指针。
如果第二指针指向的存储块索引对应的存储块中存储的数据发送失败,由于不清空第二指针指向的存储块中存储的数据,以及不移动第二指针,所以下次还会重新发送。
与第一指针类似,在第二指针指向的存储块中存储的数据发送后,需要将第二指针移动到下一个存储数据的存储块索引。
本申请实施例索引队列中包括每个存储块的存储块索引。由于每个存储块的存储块索引中包括能够确定下一个存储块的信息,所以在确定索引队列中第二指针当前指向的存储块索引后,根据确定的存储块索引,就可以确定下一个存储块索引,从而可以将第二指针指向下一个存储块索引。
以图5为例,对第二指针当前指向的存储块索引中的数据进行处理,一般为取出存储块索引对应的存储块中的数据,然后依据业务对取出的数据进行相应的处理,比如将取出的数据发送到指定的服务器。
第二指针当前指向的存储块索引为存储块索引1,则对存储块索引1对应的存储块中的数据进行处理。在完成处理后,清空存储块索引1对应的存储块中的数据(也可以不清空存储块索引1中的数据,后续有需要存储到存储块索引1对应的存储块中的数据直接覆盖即可)。根据索引队列,确定存储块索引1下一个存储块索引为存储块索引2,则将第二指针移动至存储块索引2(即第二指针指向存储块索引2)。移动后的示意图可以参见图6。
如果第二指针需要移动的下一个存储块索引与第一指针当前指向的存储块索引相同,说明当前所有存储块中都没有存储数据,即存储空间使用率为0。比如第一指针当前指向存储块索引4,第二指针当前指向存储块索引3,如果存储块索引3对应的存储块中存储的数据处理完成,会清空存储块索引3对应的存储块中的数据,并且第二指针会指向存储块索引4,这时所有存储块都没有存储任何数据。
基于此,如果需要移动第二指针,则在移动第二指针之前,需要先判断所述第二指针当前指向的存储块索引的下一个存储块索引是否与第一指针当前指向的存储块索引相同;
如果不相同,则将第二指针移动到下一个存储块索引;
如果相同,确定当前存储空间使用率为0,可以释放分配的存储空间,也可以设置一些条件,在确定当前存储空间使用率为0,且满足条件后释放分配的存储空间。
比如可以设置等待一段时间,如果当前存储空间使用率还为0,则释放分配的存储空间。
在释放存储空间时,需要先从对应的存储空间池中确定该存储空间的首地址,并根据存储空间的大小,从首地址开始进行释放相应长度的存储空间。
如果第一指针需要移动的下一个存储块索引与第二指针当前指向的存储块索引相同,说明当前所有存储块索引中都存储数据,即存储空间使用率为100%。比如第二指针当前指向存储块索引1,第一指针当前指向存储块索引4,如果有数据需要存储,则将数据存储到存储块索引4对应的存储块中,第一指针需要移动到下一个存储块索引,即存储块索引1,这时所有存储块都存储有数据。
基于此,如果需要开始第二指针,则在移动第一指针之前,需要先判断所述第一指针当前指向的存储块索引的下一个存储块索引是否与第二指针当前指向的存储块索引相同;
如果不相同,则将第一指针移动到下一个存储块索引;
如果相同,则确定存储空间使用率为100%,这时需要分配新的存储空间。
具体的,若所述第二指针当前指向的存储块索引与所述第一指针当前指向的存储块索引的下一个存储块索引相同,则为所述连接分配新的存储空间;
在所述索引队列中所述第一指针当前指向的存储块索引的下一个存储块索引与所述第二指针当前指向的存储块索引之间,增加所述新的存储空间中的存储块对应的存储块索引;
确定增加存储块索引后的索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;
将所述第一指针移动到确定的下一个存储块索引。
这里在所述索引队列中所述第一指针当前指向的存储块索引的下一个存储块索引与所述第二指针当前指向的存储块索引之间增加新的存储块索引时,是按照从所述索引队列中所述第一指针当前指向的存储块索引的下一个存储块索引,到所述第二指针当前指向的存储块索引的方向在两个存储块索引之间增加新的存储块索引。也就是说,A和B之间增加新的存储块:是从A到B的方向,在A和B之间增加新的存储块。
比如图5中,如果第一指针当前指向的存储块索引4中需要存储数据,则需要在存储块索引4和存储块索引1之间增加新的存储块索引。
这时需要重新分配一段存储空间。具体分配存储空间的方式与上面介绍的相同,在此不再赘述。由于又分配了一段存储空间,需要将新分配的存储空间的首地址也存储资源池中。存入后的示意图可以参见图8。
将新分配的存储空间分成多段,并将每一段作为一个存储块后,需要将这些存储块对应的存储块索引插入到存储块索引1和存储块索引4之间,具体可以参见图7,插入后的示意图如图9所示。
在分配新的存储块后,需要同步更新索引队列,并重新确定存储块索引4之后的存储块索引(即图9中的存储块索引5),将第一指针移动到存储块索引5。
以图9为例,如果对第二指针指向的存储块索引1对应的索引块中的数据处理完成,则第二指针需要移动到存储块索引2,具体如图10所示。
可选的,本申请实施例每次分配新的存储空间时,都可以增加需要的存储块数量,并设置一个最大存储块数量,如果达到最大的存储块数量可以停止存储,这样可以有效防止网络阻塞引起的业务不可用。比如第一次分配16个存储块,第二次分配32个存储块,第三次分配64个存储块,以此类推,最大设置为1024存储块,即如果分配的存储空间包括1024个存储块,则后续停止继续分配存储空间。
如果需要释放分配的存储空间,可以根据存储池中的每个首地址进行释放。比如图8中一共分配了存储空间A和内寸B两端存储空间,根据存储池中存储的存储空间A得首地址释放存储空间A,以及根据存储池中存储的存储空间B得首地址释放存储空间B。
上面都是以所述索引队列包括环形队列为例进行的介绍。如果索引队列包括直线型队列,则若分配给所述连接的存储空间中没有未存储数据的存储块,则为所述连接分配新的存储空间;
在所述索引队列的最后增加所述新的存储空间中的存储块对应的存储块索引;
确定增加存储块索引后的索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;
将所述第一指针移动到确定的下一个存储块索引。
对于直线型队列,由于在移动第一指针时,所述第二指针当前指向的存储块索引与所述第一指针当前指向的存储块索引的下一个存储块索引无法相同,所以可以根据索引队列中是否有第一指针当前指向的存储块索引的下一个存储块索引,判断分配给所述连接的存储空间中是否有未存储数据的存储块;
如果索引队列中有第一指针当前指向的存储块索引的下一个存储块索引,则确定分配给所述连接的存储空间中有未存储数据的存储块;
否则,确定分配给所述连接的存储空间中没有未存储数据的存储块。
假设索引队列包括环形队列,下面以数据存储和数据处理两个例子,对本申请方案进一步进行说明。
如图11所示,本申请实施例进行数据存储的完整方法包括:
步骤1100、根据存储块数量确定需要分配的存储空间的大小;
步骤1101、根据确定的需要分配的存储空间的大小分配一段存储空间,并根据存储块数量将所述存储空间分成多段,将每一段作为一个存储块,将分配的存储空间的首地址存储到存储空间池中。
步骤1102、根据得到的每个存储块,创建包含每个存储块的存储块索引的索引队列。
步骤1103、设置第一指针和第二指针指向索引队列中的第一个存储块索引。
步骤1104、等待接收连接对应的数据。
步骤1105、在收到连接对应的数据后,确定第一指针当前指向的存储块索引,并将收到的连接对应的数据存储到第一指针当前指向的存储块索引对应的数据块中。
步骤1106、根据索引队列中的存储块索引,确定索引队列中第一指针当前指向的存储块索引的下一个存储块索引。
步骤1107、判断索引队列中第一指针当前指向的存储块索引的下一个存储块索引与第二指针当前指向的存储块索引是否相同;如果是,则执行步骤1109;否则,执行步骤1108。
步骤1108、将第一指针指向确定的下一个存储块索引,并返回步骤1104。
步骤1109、分配新的存储空间,并将新分配的存储空间分成多段,将每一段作为一个存储块,将新分配的存储空间的首地址存储到存储空间池中。
步骤1110、在所述索引队列中所述第一指针当前指向的存储块索引的下一个存储块索引与所述第二指针当前指向的存储块索引之间增加新的存储块索引。
步骤1111、确定增加存储块索引后的索引队列中第一指针当前指向的存储块索引的下一个存储块索引,将第一指针指向确定的下一个存储块索引,并返回步骤1104。
如图12所示,本申请实施例清除数据的完整方法包括:
步骤1201、发送第二指针当前指向的存储块索引对应的数据块中的数据。
步骤1202、在对存储块中的数据完成发送后,清空第二指针当前指向的存储块索引对应的数据块中的数据。
步骤1203、根据索引队列中的存储块索引,确定索引队列中第二指针当前指向的存储块索引的下一个存储块索引。
步骤1204、判断所述第二指针当前指向的存储块索引的下一个存储块索引与第一指针当前指向的存储块索引是否相同;如果是,则执行步骤1205;否则,执行步骤1206。
步骤1205、释放所述分配的存储空间,并结束本流程。
步骤1206、将所述第二指针移动到确定的下一个存储块索引。
基于同一发明构思,本申请实施例中还提供了一种进行数据存储的设备,由于该设备解决问题的原理与本申请实施例进行数据存储的方法相似,因此该设备的实施可以参见方法的实施,重复之处不再赘述。
如图13所示,本申请实施例进行数据存储的设备包括:
连接确定模块1300,用于确定承载待发送的数据的连接;
存储块确定模块1301,用于确定分配给所述连接的存储空间中未存储数据的至少一个存储块;
处理模块1302,用于将所述数据存储到确定的存储块中。
本申请实施例可以存储基于即时通信中先进先出的数据。即先存储进来的数据需要优先处理,后存储的数据会排在先存储的数据后面,处理时也按照存储的先后顺序进行。比如即时通信中向服务器发送消息,从底层收到的消息需要放到存储块中,对于一个连接的数据,先从底层收到的消息存放到数据块后,需要先发送。
本申请实施例在连接建立后,处理模块1302可以预先为该连接分配一段存储空间用于存储该连接对应的数据。
在实施中,处理模块1302可以根据连接需要的存储块数量确定需要分配的存储空间的大小;
根据确定的需要分配的存储空间的大小分配一段存储空间,并根据存储块数量将所述存储空间分成多段,将每一段作为一个存储块。
比如存储块长度为N,一共需要16个存储块,则存储空间大小可以是N*16。
确定连接需要的存储块数量的方式有很多,比如可以根据连接承载的数据类型确定;也可以根据当前剩余存储空间的容量确定连接需要的存储块数量。可选的,一个存储空间中存储块数量可以是2的倍数。
在分配存储空间后,可以为分配的存储空间建立一个存储空间池,存储空间池中保存分配的存储空间的首地址,该首地址的作用是为了后续需要释放分配的存储空间时使用,具体释放存储空间的内容参见后面的描述。
可选的,存储块确定模块1301确定分配给所述连接的存储空间中未存储数据的至少一个存储块时,可以根据所述存储空间对应的索引队列中的存储块索引,确定所述连接对应的存储空间中未存储数据的至少一个存储块。其中,所述索引队列包括所述存储空间中的存储块对应的存储块索引。
存储块索引是能够确定存储块的信息,比如存储块的地址,序号等。
本申请实施例还设置第一指针,第一指针用于指示下一个数据存储到哪个存储块。
可选的,存储块确定模块1301确定分配给所述连接的存储空间中未存储数据的至少一个存储块时,确定第一指针当前指向的所述存储空间对应的索引队列中的存储块索引;将所述存储块索引对应的存储块作为未存储数据的存储块。
其中,在确定分配的存储空间中的存储块后,会生成每个存储块对应的结构体,结构体中包括对应存储块相关的信息,比如存储块首地址、存储块长度等。第一指针指向存储块时,可以指向存储块的结构体中的一个信息,比如首地址。
其中,为了下次能够准确找到未存储数据的数据块,所述将所述数据存储到确定的存储块中之后,处理模块1302确定所述索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;将所述第一指针移动到确定的下一个存储块索引。
在实施中,通过存储块长度可以得到下一个存储块的首地址。例如,存储块长度为4个字节,则只需要将前一个结点的首地址+4,就可以取到下一个存储块的首地址。
需要说明的是,第一指针指向的具体内容只是举例说明,本申请实施例的第一指针指可以指向任何能够唯一确定存储块的内容。
除了上述第一指针,本申请实施例还可以设置第二指针。第二指针用于指示下一个需要发送的数据存储在哪个存储块。
可选的,在需要发送存储块中的数据时,处理模块1302确定第二指针当前指向的所述存储空间对应的索引队列中的存储块索引;通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据。
其中,在确定分配的存储空间中的存储块后,会生成每个存储块对应的结构体,结构体中包括对应存储块相关的信息,比如存储块首地址、存储块长度等。第二指针指向存储块时,可以指向存储块的结构体中的一个信息,比如首地址。
其中,通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据之后,处理模块1302可以清空所述第二指针指向的存储块索引对应的存储块中的数据;确定所述索引队列中位于所述第二指针当前指向的存储块索引的下一个存储块索引;将所述第二指针移动到确定的下一个存储块索引。
在实施中,处理模块1302可以在决定确定所述数据发送成功后,清空所述第二指针指向的存储块索引对应的存储块中的数据。
本申请实施例在确定分配的存储空间中的存储块后,处理模块1302生成一个索引队列,该索引队列中包括存储空间中的所有存储块。
在实施中,处理模块1302可以将每个存储块对应的存储块索引置于索引队列中,存储块对应的存储块索引包括可以确定对应存储块的信息,以及可以确定索引队列中位于该存储块下一个存储块的信息,比如每个存储块的首地址。
比如索引队列中包括存储块1、存储块2和存储块3,且顺序为存储块1、存储块2和存储块3,则存储块1对应的存储块索引中包括能够确定存储块1的信息以及能够确定存储块2的信息;存储块2对应的存储块索引中包括能够确定存储块2的信息以及能够确定存储块3的信息;由于存储块3后面没有存储块,则存储块3对应的存储块索引中包括能够确定存储块3的信息。
可选的,本申请实施例的索引队列包括是直线形队列,也可以包括环形队列,环形队列可以是环形双向队列或环形单向队列。如果本申请实施例的索引队列包括环形双向队列或环形单向队列,则第一指针和第二指针按照同一个方向移动,比如都是顺时针移动或都是逆时针移动。
假设本申请实施例的索引队列包括环形双向队列或环形单向队列,如图1B所示,索引和数据块关系示意图中,存储空间中数据块1对应索引队列中的数据块索引1;数据块2对应索引队列中的数据块索引2;数据块3对应索引队列中的数据块索引3。
如图2所示,存储块1对应的数据块索引1中包括能够确定存储块1的信息以及能够确定存储块2的信息(比如索引块地址);存储块2对应的数据块索引2中包括能够确定存储块2的信息以及能够确定存储块3的信息;存储块3对应的数据块索引3中包括能够确定存储块3的信息以及能够确定存储块1的信息。
可选的,在存储空间分配完成后,处理模块1302确定所述索引队列中的第一个存储块索引;将所述第一指针指向所述第一个存储块索引,以及将所述第二指针指向所述第一个存储块索引。
以图3为例,图3中分配的存储空间包括4个存储块,索引队列包括环形队列,环形队列的顺序为存储块索引1→存储块索引2→存储块索引3→存储块索引4,存储块索引4之后再转到存储块索引1。
在存储空间分配完成后,第一指针和第二指针都指向存储块索引1。
可选的,处理模块1302将所述第一指针移动到未存储数据的一个存储块索引时,确定所述第一指针当前指向的索引队列中的存储块索引;根据确定的存储块索引,确定所述索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;将所述第一指针移动到确定的下一个存储块索引;
其中,所述索引队列中包括每个存储块对应的存储块索引。
在接收到连接对应的请求后,需要将连接对应的数据存储到第一指针当前指向的存储块索引中,由于第一指针当前指向的存储块索引已经存储数据,需要根据索引队列,将第一指针指向下一个未存储数据的存储块索引。
本申请实施例索引队列中包括每个存储块的存储块索引。由于每个存储块的存储块索引中包括能够确定下一个存储块的信息,所以在确定索引队列中第一指针当前指向的存储块的存储块索引后,根据确定的存储块索引,就可以确定下一个存储块索引,从而可以将第一指针指向下一个存储块索引。
图3为例,第一指针和第二指针都指向存储块索引1。在有待存储的数据后,将数据存储到第一指针当前指向的存储块索引1。
根据索引队列,确定存储块索引1下一个存储块索引为存储块索引2,则将第一指针移动至存储块索引2(即第一指针指向存储块索引2)。移动后的示意图可以参见图4。
如果再收到连接对应的待存储的数据,以图4为例,则将待存储的数据(其中连接对应的待存储的数据是需要通过该连接发送的数据)存储到存储块索引2,并将第一指针移动到存储块索引3。
如果继续收到待存储的数据,则将当前待存储的数据存储到存储块索引3,并将第一指针移动到存储块索引4。移动后的示意图可以参见图5。
可选的,处理模块1302在第二指针指向的存储块索引对应的存储块中存储的数据发送完成后,清空第二指针指向的存储块中存储的数据,并确定所述第二指针当前指向的存储块对应的索引队列中的存储块索引;
根据确定的存储块索引,确定所述索引队列中位于所述第二指针当前指向的存储块的下一个存储块;
将所述第二指针移动到确定的下一个存储块。
可选的,为了保证数据发送的成功率,处理模块1302可以在确定第二指针指向的存储块索引对应的存储块中存储的数据发送成功后清空第二指针指向的存储块中存储的数据,并移动第二指针。
如果第二指针指向的存储块索引对应的存储块中存储的数据发送失败,由于不清空第二指针指向的存储块中存储的数据,以及不移动第二指针,所以下次还会重新发送。
与第一指针类似,在第二指针指向的存储块中存储的数据发送后,需要将第二指针移动到下一个存储数据的存储块索引。
本申请实施例索引队列中包括每个存储块的存储块索引。由于每个存储块的存储块索引中包括能够确定下一个存储块的信息,所以在确定索引队列中第二指针当前指向的存储块索引后,根据确定的存储块索引,就可以确定下一个存储块索引,从而可以将第二指针指向下一个存储块索引。
以图5为例,对第二指针当前指向的存储块索引中的数据进行处理,一般为取出存储块索引对应的存储块中的数据,然后依据业务对取出的数据进行相应的处理,比如将取出的数据发送到指定的服务器。
第二指针当前指向的存储块索引为存储块索引1,则对存储块索引1对应的存储块中的数据进行处理。在完成处理后,清空存储块索引1对应的存储块中的数据(也可以不清空存储块索引1中的数据,后续有需要存储到存储块索引1对应的存储块中的数据直接覆盖即可)。根据索引队列,确定存储块索引1下一个存储块索引为存储块索引2,则将第二指针移动至存储块索引2(即第二指针指向存储块索引2)。移动后的示意图可以参见图6。
如果第二指针需要移动的下一个存储块索引与第一指针当前指向的存储块索引相同,说明当前所有存储块中都没有存储数据,即存储空间使用率为0。比如第一指针当前指向存储块索引4,第二指针当前指向存储块索引3,如果存储块索引3对应的存储块中存储的数据处理完成,会清空存储块索引3对应的存储块中的数据,并且第二指针会指向存储块索引4,这时所有存储块都没有存储任何数据。
基于此,如果需要移动第二指针,则在移动第二指针之前,处理模块1302需要先判断所述第二指针当前指向的存储块索引的下一个存储块索引是否与第一指针当前指向的存储块索引相同;
如果不相同,则将第二指针移动到下一个存储块索引;
如果相同,确定当前存储空间使用率为0,可以释放分配的存储空间,也可以设置一些条件,在确定当前存储空间使用率为0,且满足条件后释放分配的存储空间。
比如可以设置等待一段时间,如果当前存储空间使用率还为0,则释放分配的存储空间。
在释放存储空间时,需要先从对应的存储空间池中确定该存储空间的首地址,并根据存储空间的大小,从首地址开始进行释放相应长度的存储空间。
如果第一指针需要移动的下一个存储块索引与第二指针当前指向的存储块索引相同,说明当前所有存储块索引中都存储数据,即存储空间使用率为100%。比如第二指针当前指向存储块索引1,第一指针当前指向存储块索引4,如果有数据需要存储,则将数据存储到存储块索引4对应的存储块中,第一指针需要移动到下一个存储块索引,即存储块索引1,这时所有存储块都存储有数据。
基于此,如果需要开始第二指针,则在移动第一指针之前,处理模块1302需要先判断所述第一指针当前指向的存储块索引的下一个存储块索引是否与第二指针当前指向的存储块索引相同;
如果不相同,则将第一指针移动到下一个存储块索引;
如果相同,则确定存储空间使用率为100%,这时需要分配新的存储空间。
具体的,若所述第二指针当前指向的存储块索引与所述第一指针当前指向的存储块索引的下一个存储块索引相同,则处理模块1302为所述连接分配新的存储空间;
在所述索引队列中所述第一指针当前指向的存储块索引的下一个存储块索引与所述第二指针当前指向的存储块索引之间,增加所述新的存储空间中的存储块对应的存储块索引;
确定增加存储块索引后的索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;
将所述第一指针移动到确定的下一个存储块索引。
这里在所述索引队列中所述第一指针当前指向的存储块索引的下一个存储块索引与所述第二指针当前指向的存储块索引之间增加新的存储块索引时,是按照从所述索引队列中所述第一指针当前指向的存储块索引的下一个存储块索引,到所述第二指针当前指向的存储块索引的方向在两个存储块索引之间增加新的存储块索引。也就是说,A和B之间增加新的存储块:是从A到B的方向,在A和B之间增加新的存储块。
比如图5中,如果第一指针当前指向的存储块索引4中需要存储数据,则需要在存储块索引4和存储块索引1之间增加新的存储块索引。
这时需要重新分配一段存储空间。具体分配存储空间的方式与上面介绍的相同,在此不再赘述。由于又分配了一段存储空间,需要将新分配的存储空间的首地址也存储资源池中。存入后的示意图可以参见图8。
将新分配的存储空间分成多段,并将每一段作为一个存储块后,需要将这些存储块对应的存储块索引插入到存储块索引1和存储块索引4之间,具体可以参见图7,插入后的示意图如图9所示。
在分配新的存储块后,需要同步更新索引队列,并重新确定存储块索引4之后的存储块索引(即图9中的存储块索引5),将第一指针移动到存储块索引5。
以图9为例,如果对第二指针指向的存储块索引1对应的索引块中的数据处理完成,则第二指针需要移动到存储块索引2,具体如图10所示。
可选的,本申请实施例每次分配新的存储空间时,都可以增加需要的存储块数量,并设置一个最大存储块数量,如果达到最大的存储块数量可以停止存储,这样可以有效防止网络阻塞引起的业务不可用。比如第一次分配16个存储块,第二次分配32个存储块,第三次分配64个存储块,以此类推,最大设置为1024存储块,即如果分配的存储空间包括1024个存储块,则后续停止继续分配存储空间。
如果需要释放分配的存储空间,可以根据存储池中的每个首地址进行释放。比如图8中一共分配了存储空间A和内寸B两端存储空间,根据存储池中存储的存储空间A得首地址释放存储空间A,以及根据存储池中存储的存储空间B得首地址释放存储空间B。
上面都是以所述索引队列包括环形队列为例进行的介绍。如果索引队列包括直线型队列,则若分配给所述连接的存储空间中没有未存储数据的存储块,则处理模块1302为所述连接分配新的存储空间;在所述索引队列的最后增加所述新的存储空间中的存储块对应的存储块索引;确定增加存储块索引后的索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;将所述第一指针移动到确定的下一个存储块索引。
对于直线型队列,由于在移动第一指针时,所述第二指针当前指向的存储块索引与所述第一指针当前指向的存储块索引的下一个存储块索引无法相同,所以可以根据索引队列中是否有第一指针当前指向的存储块索引的下一个存储块索引,判断分配给所述连接的存储空间中是否有未存储数据的存储块;
如果索引队列中有第一指针当前指向的存储块索引的下一个存储块索引,则确定分配给所述连接的存储空间中有未存储数据的存储块;
否则,确定分配给所述连接的存储空间中没有未存储数据的存储块。
以上参照示出根据本申请实施例的方法、装置(系统)和/或计算机程序产品的框图和/或流程图描述本申请。应理解,可以通过计算机程序指令来实现框图和/或流程图示图的一个块以及框图和/或流程图示图的块的组合。可以将这些计算机程序指令提供给通用计算机、专用计算机的处理器和/或其它可编程数据处理装置,以产生机器,使得经由计算机处理器和/或其它可编程数据处理装置执行的指令创建用于实现框图和/或流程图块中所指定的功能/动作的方法。
相应地,还可以用硬件和/或软件(包括固件、驻留软件、微码等)来实施本申请。更进一步地,本申请可以采取计算机可使用或计算机可读存储介质上的计算机程序产品的形式,其具有在介质中实现的计算机可使用或计算机可读程序代码,以由指令执行系统来使用或结合指令执行系统而使用。在本申请上下文中,计算机可使用或计算机可读介质可以是任意介质,其可以包含、存储、通信、传输、或传送程序,以由指令执行系统、装置或设备使用,或结合指令执行系统、装置或设备使用。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (20)
1.一种基于即时通信进行数据存储的方法,其特征在于,该方法包括:
确定承载待发送的数据的连接;
为所述连接分配存储空间用于存储所述连接对应的所述数据;
确定第一指针当前指向的所述存储空间对应的索引队列中的存储块索引;
将所述存储块索引对应的存储块作为未存储数据的存储块;
将所述数据存储到确定的存储块中;
在需要发送存储块中的数据时,确定第二指针当前指向的所述存储空间对应的索引队列中的存储块索引;
通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据。
2.如权利要求1所述的方法,其特征在于,所述将所述数据存储到确定的存储块中之后,还包括:
确定所述索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;
将所述第一指针移动到确定的下一个存储块索引。
3.如权利要求1所述的方法,其特征在于,所述通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据之后,还包括:
清空所述第二指针指向的存储块索引对应的存储块中的数据;
确定所述索引队列中位于所述第二指针当前指向的存储块索引的下一个存储块索引;
将所述第二指针移动到确定的下一个存储块索引。
4.如权利要求3所述的方法,其特征在于,所述通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据之后,清空所述第二指针指向的存储块索引对应的存储块中的数据之前,还包括:
确定所述数据发送成功。
5.如权利要求3所述的方法,其特征在于,所述将所述第二指针移动到确定的下一个存储块索引之前,还包括:
确定所述第二指针当前指向的存储块索引的下一个存储块索引与所述第一指针当前指向的存储块索引不同。
6.如权利要求3所述的方法,其特征在于,该方法还包括:
若所述第二指针当前指向的存储块索引的下一个存储块索引与所述第一指针当前指向的存储块索引相同,释放分配给所述连接的存储空间。
7.如权利要求1所述的方法,其特征在于,所述确定所述索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引之后,将所述第一指针移动到确定的下一个存储块索引之前,还包括:
确定所述第二指针当前指向的存储块索引与所述第一指针当前指向的存储块索引的下一个存储块索引不同。
8.如权利要求7所述的方法,其特征在于,该方法还包括:
若所述第二指针当前指向的存储块索引与所述第一指针当前指向的存储块索引的下一个存储块索引相同,则为所述连接分配新的存储空间;
在所述索引队列中所述第一指针当前指向的存储块索引的下一个存储块索引与所述第二指针当前指向的存储块索引之间,增加所述新的存储空间中的存储块对应的存储块索引;
确定增加存储块索引后的索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;
将所述第一指针移动到确定的下一个存储块索引。
9.如权利要求2~4任一所述的方法,其特征在于,所述将所述数据存储到确定的存储块中之后,还包括:
若分配给所述连接的存储空间中没有未存储数据的存储块,则为所述连接分配新的存储空间;
在所述索引队列的最后增加所述新的存储空间中的存储块对应的存储块索引;
确定增加存储块索引后的索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;
将所述第一指针移动到确定的下一个存储块索引。
10.如权利要求2~8任一所述的方法,其特征在于,所述索引队列包括环形队列。
11.一种基于即时通信进行数据存储的设备,其特征在于,该设备包括:
连接确定模块,用于确定承载待发送的数据的连接;
存储块确定模块,用于为所述连接分配存储空间用于存储所述连接对应的所述数据;确定第一指针当前指向的所述存储空间对应的索引队列中的存储块索引;将所述存储块索引对应的存储块作为未存储数据的存储块;
处理模块,用于将所述数据存储到确定的存储块中;在需要发送存储块中的数据时,确定第二指针当前指向的所述存储空间对应的索引队列中的存储块索引;通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据。
12.如权利要求11所述的设备,其特征在于,所述处理模块还用于:
将所述数据存储到确定的存储块中之后,确定所述索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;将所述第一指针移动到确定的下一个存储块索引。
13.如权利要求11所述的设备,其特征在于,所述处理模块用于:
通过所述连接发送所述第二指针指向的存储块索引对应的存储块中的数据之后,清空所述第二指针指向的存储块索引对应的存储块中的数据;确定所述索引队列中位于所述第二指针当前指向的存储块索引的下一个存储块索引;将所述第二指针移动到确定的下一个存储块索引。
14.如权利要求13所述的设备,其特征在于,所述处理模块具体用于:
在确定所述数据发送成功后,清空所述第二指针指向的存储块索引对应的存储块中的数据。
15.如权利要求13所述的设备,其特征在于,所述处理模块具体用于:
在确定所述第二指针当前指向的存储块索引的下一个存储块索引与所述第一指针当前指向的存储块索引不同后,将所述第二指针移动到确定的下一个存储块索引。
16.如权利要求13所述的设备,其特征在于,所述处理模块还用于:
若所述第二指针当前指向的存储块索引的下一个存储块索引与所述第一指针当前指向的存储块索引相同,释放分配给所述连接的存储空间。
17.如权利要求11所述的设备,其特征在于,所述处理模块还用于:
在确定所述第二指针当前指向的存储块索引与所述第一指针当前指向的存储块索引的下一个存储块索引不同后,将所述第一指针移动到确定的下一个存储块索引。
18.如权利要求17所述的设备,其特征在于,所述处理模块还用于:
若所述第二指针当前指向的存储块索引与所述第一指针当前指向的存储块索引的下一个存储块索引相同,则为所述连接分配新的存储空间;
在所述索引队列中所述第一指针当前指向的存储块索引的下一个存储块索引与所述第二指针当前指向的存储块索引之间,增加所述新的存储空间中的存储块对应的存储块索引;
确定增加存储块索引后的索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;
将所述第一指针移动到确定的下一个存储块索引。
19.如权利要求12~14任一所述的设备,其特征在于,所述处理模块还用于:
若分配给所述连接的存储空间中没有未存储数据的存储块,则为所述连接分配新的存储空间;
在所述索引队列的最后增加所述新的存储空间中的存储块对应的存储块索引;
确定增加存储块索引后的索引队列中位于所述第一指针当前指向的存储块索引的下一个存储块索引;
将所述第一指针移动到确定的下一个存储块索引。
20.如权利要求12~18任一所述的设备,其特征在于,所述索引队列包括环形队列。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610326451.3A CN107391388B (zh) | 2016-05-17 | 2016-05-17 | 一种基于即时通信进行数据存储的方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610326451.3A CN107391388B (zh) | 2016-05-17 | 2016-05-17 | 一种基于即时通信进行数据存储的方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107391388A CN107391388A (zh) | 2017-11-24 |
CN107391388B true CN107391388B (zh) | 2021-06-11 |
Family
ID=60338484
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610326451.3A Active CN107391388B (zh) | 2016-05-17 | 2016-05-17 | 一种基于即时通信进行数据存储的方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107391388B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108255740A (zh) * | 2017-12-07 | 2018-07-06 | 深圳市中易通安全芯科技有限公司 | 一种flash均衡擦写方法及系统 |
CN113076458B (zh) * | 2021-04-13 | 2024-02-06 | 鹏城实验室 | 一种网内缓存控制方法、系统、存储介质及终端设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998015155A1 (de) * | 1996-09-30 | 1998-04-09 | Siemens Aktiengesellschaft | Verfahren zur mehrpunktverbindung in einem atm-übertragungssystem mit verbindungsindividuellen warteschlangen |
CN1409519A (zh) * | 2001-09-18 | 2003-04-09 | 深圳市中兴通讯股份有限公司上海第二研究所 | 一种信元头转换表的动态存储管理方法 |
CN1928825A (zh) * | 2005-09-09 | 2007-03-14 | 腾讯科技(深圳)有限公司 | 一种服务器的实现方法以及服务器系统 |
CN101840373A (zh) * | 2010-01-28 | 2010-09-22 | 北京握奇数据系统有限公司 | 数据操作方法及装置、寻址方法及装置 |
CN102521143A (zh) * | 2011-12-14 | 2012-06-27 | 瑞斯康达科技发展股份有限公司 | 一种堆数据处理方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102508784B (zh) * | 2011-11-02 | 2015-01-07 | 杭州海康威视数字技术股份有限公司 | 视频监控设备中闪存卡的数据存储方法及其系统 |
CN104063327B (zh) * | 2013-03-21 | 2017-09-12 | 中兴通讯股份有限公司 | 一种应用于无线通讯的存储方法及读写存储装置 |
CN103310008B (zh) * | 2013-06-28 | 2018-06-01 | 安科智慧城市技术(中国)有限公司 | 一种云控制服务器及其文件索引方法 |
CN105245912B (zh) * | 2015-10-21 | 2019-05-31 | 东方网力科技股份有限公司 | 一种缓存视频数据及读取视频数据的方法及装置 |
-
2016
- 2016-05-17 CN CN201610326451.3A patent/CN107391388B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1998015155A1 (de) * | 1996-09-30 | 1998-04-09 | Siemens Aktiengesellschaft | Verfahren zur mehrpunktverbindung in einem atm-übertragungssystem mit verbindungsindividuellen warteschlangen |
CN1409519A (zh) * | 2001-09-18 | 2003-04-09 | 深圳市中兴通讯股份有限公司上海第二研究所 | 一种信元头转换表的动态存储管理方法 |
CN1928825A (zh) * | 2005-09-09 | 2007-03-14 | 腾讯科技(深圳)有限公司 | 一种服务器的实现方法以及服务器系统 |
CN101840373A (zh) * | 2010-01-28 | 2010-09-22 | 北京握奇数据系统有限公司 | 数据操作方法及装置、寻址方法及装置 |
CN102521143A (zh) * | 2011-12-14 | 2012-06-27 | 瑞斯康达科技发展股份有限公司 | 一种堆数据处理方法及装置 |
Non-Patent Citations (1)
Title |
---|
层次混合存储系统中缓存和预取技术研究;刘洋;《中国博士学位论文全文数据库 信息科技辑》;20150215;I137-6 * |
Also Published As
Publication number | Publication date |
---|---|
CN107391388A (zh) | 2017-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9888048B1 (en) | Supporting millions of parallel light weight data streams in a distributed system | |
CN105245912B (zh) | 一种缓存视频数据及读取视频数据的方法及装置 | |
CN108647104B (zh) | 请求处理方法、服务器及计算机可读存储介质 | |
US9569291B1 (en) | Systems and methods for inter-process messaging | |
CN104090806B (zh) | 升级包、升级请求的处理方法及装置 | |
CN102255926B (zh) | MapReduce系统中的任务分配方法、系统及装置 | |
CN106603692B (zh) | 一种分布式存储系统中的数据存储方法及装置 | |
CN111857992B (zh) | 一种Radosgw模块中线程资源分配方法和装置 | |
CN110430142B (zh) | 用于控制流量的方法和装置 | |
CN113672284B (zh) | 一种指令执行方法、系统、电子设备以及存储介质 | |
CN107391388B (zh) | 一种基于即时通信进行数据存储的方法和设备 | |
CN112698959A (zh) | 一种多核通信方法和装置 | |
CN114155026A (zh) | 一种资源分配方法、装置、服务器及存储介质 | |
CN101470623B (zh) | 队列管理方法和队列管理器、队列消息的处理方法和系统 | |
US20140089624A1 (en) | Cooperation of hoarding memory allocators in a multi-process system | |
CN109819674B (zh) | 计算机存储介质、嵌入式调度方法及系统 | |
CN113347238A (zh) | 基于区块链的消息分区方法及系统、设备、存储介质 | |
CN108139969B (zh) | 一种内存配置方法、装置及系统 | |
CN113806035A (zh) | 分布式调度方法及业务服务器 | |
CN110231983B (zh) | 数据并发处理方法、装置及系统、计算机设备及可读介质 | |
CN110266814B (zh) | 传输方法及传输装置 | |
US9509780B2 (en) | Information processing system and control method of information processing system | |
CN113630442A (zh) | 数据传输方法、装置及系统 | |
KR20150048028A (ko) | 데이터 전송 관리 방법 | |
CN111835770A (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 | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1246898 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |