CN111427854B - 支持存储批量数据的栈结构实现方法及装置、设备、介质 - Google Patents

支持存储批量数据的栈结构实现方法及装置、设备、介质 Download PDF

Info

Publication number
CN111427854B
CN111427854B CN202010207611.9A CN202010207611A CN111427854B CN 111427854 B CN111427854 B CN 111427854B CN 202010207611 A CN202010207611 A CN 202010207611A CN 111427854 B CN111427854 B CN 111427854B
Authority
CN
China
Prior art keywords
file
data
stack structure
elements
buffer 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
Application number
CN202010207611.9A
Other languages
English (en)
Other versions
CN111427854A (zh
Inventor
李垄华
吴闽华
姜坤
卫宣安
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Genew Technologies Co Ltd
Original Assignee
Shenzhen Genew Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Genew Technologies Co Ltd filed Critical Shenzhen Genew Technologies Co Ltd
Priority to CN202010207611.9A priority Critical patent/CN111427854B/zh
Publication of CN111427854A publication Critical patent/CN111427854A/zh
Application granted granted Critical
Publication of CN111427854B publication Critical patent/CN111427854B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/172Caching, prefetching or hoarding of files

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

本申请涉及支持存储批量数据的栈结构实现方法及装置、设备、介质,方法包括:为Stack栈结构成员定义;配置Push操作的缓存策略,配置Pop操作的缓存策略;当从文件中加载数据到缓存区时,加载元素的数量应等于缓存区容量的一半;控制写入元素到文件,将待写入的元素集合全部序列化成一完整的字节块,一次性追加到当前文件流末端;控制从文件中加载数据,把文件流指针前移指定个字节再读取;同时在该前移位置截断并丢弃后面的文件数据,直到数据加载完成。本发明提供了一种基于文件系统作存储的栈结构实现方法,实现了一种支持存储大批量数据的栈结构,使整体的栈结构小巧、数据处理效率高效,操作简单方便,并且实现容易,可靠性高。

Description

支持存储批量数据的栈结构实现方法及装置、设备、介质
技术领域
本申请涉及数据处理技术领域,特别是涉及一种支持存储批量数据的栈结构实现方法及装置、计算机设备、可读存储介质。
背景技术
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
现有技术在某些业务场景中,需要使用Stack(栈,一种后进先出的数据结构)来处理或统计批量数据。但一般编程语言基础库中所提供的Stack结构往往是基于运行内存作存储而实现的。
而在实际应用中,需要被处理的数据量有可能较大,如果此时继续使用基于内存的Stack结构作为算法容器,则可能需要占据大量的内存空间,导致计算机运行缓慢,甚至导致程序奔溃。
出于上述原因,需要找到一种基于文件系统作存储实现的Stack结构,现有技术中一种比较便于实现的方式是利用一些第三方开源的本地文件数据库(如Sqlite、LiteDb)作为底层的存储实现。但是现有技术不足的是,这一类的数据库实现较为大而全,而且不是专门为了Stack结构设计的,对于Stack这种较为简单的数据结构而言,文件数据库底层的B树存储造成多余步骤,处理效率不高,造成资源浪费。
因此,现有技术有待改进。
发明内容
本发明针对上述现有技术中的技术问题,提供一种支持存储批量数据的栈结构实现方法及装置、计算机设备、可读存储介质,本发明提供了一种基于文件系统作存储的栈结构(Stack)实现方法,实现了一种支持存储大批量数据的栈结构,使整体的栈结构小巧、数据处理效率高效,操作简单方便,并且实现容易,可靠性高。
本发明的技术方案如下:
一种支持存储批量数据的栈结构实现方法,其中,所述方法包括:
进行栈结构的类设计,为Stack栈结构成员定义;
配置Push操作的缓存策略,当缓存区满时,将缓存区内前一半的元素写入到文件;
配置Pop操作的缓存策略,通过Pop操作提取并丢弃Stack栈结构中最后加入的元素;当从文件中加载数据到缓存区时,加载元素的数量应等于缓存区容量的一半;
控制写入元素到文件,将待写入的元素集合全部序列化成一完整的字节块,一次性追加到当前文件流末端;
控制从文件中加载数据,把文件流指针前移指定个字节再读取;同时在前移位置截断并丢弃后面的文件数据,直到数据加载完成。
所述支持存储批量数据的栈结构实现方法,其中,所述进行栈结构的类设计,为Stack栈结构成员定义的步骤之前包括:
设置栈结构中容纳的元素数据类型经过序列化后表达为一个恒定字节的二进制数据块。
所述支持存储批量数据的栈结构实现方法,其中,所述进行栈结构的类设计,为Stack栈结构成员定义的步骤包括:
设置表示外部文件流操作对象的字段m_fileStream,用于通过此对象对外部文件执行读写操作;
以及设置表示一个内存中缓存列表对象的字段m_bufferList,用于把新的部份数据存储在内存缓存中;
以及设置用于记录栈结构中元素总量的属性Count,包含了文件中存储的元素总量和缓存中的元素总量。
所述支持存储批量数据的栈结构实现方法,其中,所述配置Push操作的缓存策略,当缓存区满时,将缓存区内前一半的元素写入到文件的步骤包括:
判断缓存区是否已满;
当缓存区已满,将缓存区内前一半的元素写入到文件,并丢弃缓存区内前一半的元素;
当缓存区未满,向缓存区末端增加一个元素。
所述支持存储批量数据的栈结构实现方法,其中,所述配置Pop操作的缓存策略,通过Pop操作提取并丢弃Stack栈结构中最后加入的元素;当从文件中加载数据到缓存区时,加载元素的数量应等于缓存区容量的一半的步骤包括:
判断缓存区是否为空;
当判断缓存区为空,从文件中后向读取一批数据填充到缓存区;加载元素的数量应等于缓存区容量的一半;
判断缓存区不为空,提取并移除缓存区最后一个元素。
所述支持存储批量数据的栈结构实现方法,其中,所述写入元素到文件,将待写入的元素集合全部序列化成一完整的字节块,一次性追加到当前文件流末端的步骤包括:
将待写入的元素集合先全部序列化成一个完整的字节块,再通过m_fileStream一次性追加到当前文件流末端。
所述支持存储批量数据的栈结构实现方法,其中,所述控制从文件中加载数据,把文件流指针前移指定个字节再读取;同时在前移位置截断并丢弃后面的文件数据,直到数据加载完成的步骤包括:
从文件中加载数据,把文件流指针前移4096个字节,读取;
在读取完毕后,要把文件流指针再一次前移4096个字节,同时在该位置截断并丢弃后面的文件数据,直到数据加载完成。
一种支持存储批量数据的栈结构实现装置,其中,所述装置包括:
定义模块,用于进行栈结构的类设计,为Stack栈结构成员定义;
第一策略模块,用于配置Push操作的缓存策略,当缓存区满时,将缓存区内前一半的元素写入到文件;
第二策略模块,配置Pop操作的缓存策略,通过Pop操作提取并丢弃Stack栈结构中最后加入的元素;当从文件中加载数据到缓存区时,加载元素的数量应等于缓存区容量的一半;
第一控制模块,用于控制写入元素到文件,将待写入的元素集合全部序列化成一完整的字节块,一次性追加到当前文件流末端;
第二控制模块,用于控制从文件中加载数据,把文件流指针前移指定个字节再读取;同时在前移位置截断并丢弃后面的文件数据,直到数据加载完成。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其中,所述处理器执行所述计算机程序时实现任一项所述支持存储批量数据的栈结构实现方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现任一项所述的支持存储批量数据的栈结构实现方法的步骤。
与现有技术相比,本发明实施例具有以下优点:
提供一种支持存储批量数据的栈结构实现方法及装置、计算机设备、可读存储介质,本发明提供了一种基于文件系统作存储的栈结构(Stack)实现方法,实现了一种支持存储大批量数据的栈结构,使整体的栈结构小巧、数据处理效率高效,操作简单方便,并且实现容易,可靠性高;为用户的使用提供了方便。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中一种支持存储批量数据的栈结构实现方法的流程图。
图2为本发明实施例中一种支持存储批量数据的栈结构实现方法的栈结构示意图。
图3为本发明实施例中一种支持存储批量数据的栈结构实现方法的栈结构的Push操作缓存策略流程图。
图4为本发明实施例中一种支持存储批量数据的栈结构实现方法的栈结构的Pop操作缓存策略流程图。
图5为本发明实施例中一种支持存储批量数据的栈结构实现装置的结构示意图;
图6为本发明实施例中计算机设备的内部结构图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
发明人经过研究发现,现有技术中一种比较便于实现的方式是利用一些第三方开源的本地文件数据库(如Sqlite、LiteDb)作为底层的存储实现。但是现有技术不足的是,这一类的数据库实现较为大而全,而且不是专门为了Stack结构设计的,对于Stack这种较为简单的数据结构而言,文件数据库底层的B树存储造成多余步骤,处理效率不高,造成资源浪费的技术问题。
为了解决上述问题,本发明提供了一种基于文件系统作存储的栈结构(Stack)实现方法,下面结合附图,详细说明本发明的各种非限制性实施方式。
请参阅图1,图1示出了本发明实施例一种支持存储批量数据的栈结构实现方法,所述方法包括以下步骤:
步骤S1、进行栈结构的类设计,为Stack栈结构成员定义;
本发明中,使用较为简单的元素数据类型为例进行说明,当然本发明方法也可以根据实际需要,扩展应用到更复杂的结构模型。
首先,假设,栈结构(Stack)中容纳的元素数据类型经过序列化后表达为一个定长的二进制数据块。在本发明实施例中,设置栈结构中容纳的元素数据类型经过序列化后表达为一个恒定字节的二进制数据块,假设该元素经过序列化后表达为一个恒定8字节的二进制数据块。
步骤S1具体包括:
设置表示外部文件流操作对象的字段m_fileStream,用于通过此对象对外部文件执行读写操作;
以及设置表示一个内存中缓存列表对象的字段m_bufferList,用于把新的部份数据存储在内存缓存中;
以及设置用于记录栈结构中元素总量的属性Count,包含了文件中存储的元素总量和缓存中的元素总量。
本实施例中进行Stack栈结构的类设计,如图2所示,为Stack栈结构成员定义;
其中,字段m_fileStream表示一个外部文件流的操作对象,Stack栈结构内部通过此对象对外部文件执行读写操作;
字段m_bufferList表示一个内存中的缓存列表对象,之所以需要使用内存缓存列表,是因为不希望Stack的每次Pop或Push操作都伴随文件读写(频繁的文件I/O操作会导致效率低下),希望把较新的部份数据存储在内存缓存中;其中,push操作为:在集合中添加元素,并返回新的长度;pop操作为从集合中把最后一个元素删除,并返回这个元素的值。
属性Count用于记录Stack中的元素总量,这里包含了文件中存储的元素总量和缓存中的元素总量。
步骤S2、配置Push操作的缓存策略,当缓存区满时,将缓存区内前一半的元素写入到文件;
push为:在集合中添加元素,并返回新的长度。
一个好的缓存策略能有效降低文件I/O的次数,在本文的例子中,假定缓存区可容纳的元素上限为1024,也可根据实际情况自行调整。
本发明中,如图3所示,描述了Stack内部的Push操作实现流程,Push操作用于向Stack末端增加一个元素,如图3所示Stack内部的Push操作实现流程包括以下步骤:
步骤11、Push操作开始,进入步骤12;
步骤12、判断缓存区是否已满,当是进入步骤13,当否进入步骤15;
步骤13、将缓存区内前一半的元素写入到文件,进入步骤14;
步骤14、丢弃缓存区内前一半的元素,并进入步骤15;
步骤15、向缓存区末端增加一个元素,进入步骤16;
步骤16、递增Count,进入步骤16;
步骤17、完成。
从图3的流程中,可以看出,缓存区是如何有效减少文件I/O的次数。至于“为什么当缓存区满时,将其一半的元素写入文件,而不是将其所有元素写入文件?”,是因为需要在缓存中留有部分最新数据,以供Pop操作(下文另讲)读取。
步骤S3、配置Pop操作的缓存策略,通过Pop操作提取并丢弃Stack栈结构中最后加入的元素;当从文件中加载数据到缓存区时,加载元素的数量应等于缓存区容量的一半。
pop操作为从集合中把最后一个元素删除,并返回这个元素的值。
本发明实施例中,Pop操作的作用与Push操作的作用相反,用于提取并丢弃Stack栈结构中最后加入的元素,如图4所示,本实施例中Pop操作的缓存策略包括如下步骤:
步骤21、Pop操作开始;
步骤22、判断缓存区是否为空,当是则进入步骤23,当否则进入步骤24;
步骤23、从文件中后向读取一批数据填充到缓存区;加载元素的数量应等于缓存区容量的一半;
步骤24、提取并移除缓存区最后一个元素,进入步骤25;
步骤25、递减Count;
步骤26、结束。
本发明步骤23:当从文件中加载数据到缓存区时,加载元素的数量应等于缓存区容量的一半。这是为了让缓存区中保留有一定的空闲位置,以便于Push操作执行元素插入。
步骤S4、写入元素到文件:将待写入的元素集合全部序列化成一完整的字节块,一次性追加到当前文件流末端。
由Push操作的设计可知,当缓存区满时,需要将一部分元素数据写入文件,本发明实施例中仅需将待写入的元素集合先全部序列化成一个完整的字节块,再通过m_fileStream一次性追加到当前文件流末端即可。
步骤S5、控制从文件中加载数据,把文件流指针前移指定个字节再读取;同时在前移位置截断并丢弃后面的文件数据,直到数据加载完成;
本发明中,从文件中加载数据,把文件流指针前移4096个字节,才能读取;在读取完毕后,要把文件流指针再一次前移4096个字节,同时在该位置截断并丢弃后面的文件数据,直到数据加载完成。
本发明实施例中,由于Stack栈结构内部的文件流的指针总是指向文件流末端,如果要后向读取一组元素,则需要先把当前的文件指针前移,在本发明实施例中,每个元素占据8字节,缓存区容量为1024,则意味着需要加载512个元素到缓存区,合计512*8=4096个字节,所以需要先把文件流指针前移4096个字节,才能读取。
由于文件流指针在读取操作时会自动后移,所以在读取完毕后,要把文件流指针再一次前移4096个字节,同时在该位置截断并丢弃后面的文件数据,直到数据加载完成。
由上可见,本发明提供一种支持存储批量数据的栈结构实现方法,提供了一种基于文件系统作存储的栈结构(Stack)实现方法,实现了一种支持存储大批量数据的栈结构,使整体的栈结构小巧、数据处理效率高效,操作简单方便,并且实现容易,可靠性高;为用户的使用提供了方便。
在一个实施例中,本发明提供了一种支持存储批量数据的栈结构实现装置,如图5所示,所述装置包括:
定义模块41,用于进行栈结构的类设计,为Stack栈结构成员定义;
第一策略模块42,用于配置Push操作的缓存策略,当缓存区满时,将缓存区内前一半的元素写入到文件;
第二策略模块43,配置Pop操作的缓存策略,通过Pop操作提取并丢弃Stack栈结构中最后加入的元素;当从文件中加载数据到缓存区时,加载元素的数量应等于缓存区容量的一半;
第一控制模块44,用于控制写入元素到文件,将待写入的元素集合全部序列化成一完整的字节块,一次性追加到当前文件流末端;
第二控制模块45,用于控制从文件中加载数据,把文件流指针前移指定个字节再读取;同时在前移位置截断并丢弃后面的文件数据,直到数据加载完成;具体如上所述。
在一个实施例中,本发明提供了一种计算机设备,该设备可以是终端,内部结构如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种自然语言模型的生成方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图6所示的仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本发明实施例提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其中,所述处理器执行所述计算机程序时实现以下步骤:
进行栈结构的类设计,为Stack栈结构成员定义;
配置Push操作的缓存策略,当缓存区满时,将缓存区内前一半的元素写入到文件;
配置Pop操作的缓存策略,通过Pop操作提取并丢弃Stack栈结构中最后加入的元素;当从文件中加载数据到缓存区时,加载元素的数量应等于缓存区容量的一半;
控制写入元素到文件,将待写入的元素集合全部序列化成一完整的字节块,一次性追加到当前文件流末端;
控制从文件中加载数据,把文件流指针前移指定个字节再读取;同时在前移位置截断并丢弃后面的文件数据,直到数据加载完成。
其中,所述进行栈结构的类设计,为Stack栈结构成员定义的步骤之前包括:
设置栈结构中容纳的元素数据类型经过序列化后表达为一个恒定字节的二进制数据块。
其中,所述进行栈结构的类设计,为Stack栈结构成员定义的步骤包括:
设置表示外部文件流操作对象的字段m_fileStream,用于通过此对象对外部文件执行读写操作;
以及设置表示一个内存中缓存列表对象的字段m_bufferList,用于把新的部份数据存储在内存缓存中;
以及设置用于记录栈结构中元素总量的属性Count,包含了文件中存储的元素总量和缓存中的元素总量。
其中,所述配置Push操作的缓存策略,当缓存区满时,将缓存区内前一半的元素写入到文件的步骤包括:
判断缓存区是否已满;
当缓存区已满,将缓存区内前一半的元素写入到文件,并丢弃缓存区内前一半的元素;
当缓存区未满,向缓存区末端增加一个元素。
其中,所述配置Pop操作的缓存策略,通过Pop操作提取并丢弃Stack栈结构中最后加入的元素;当从文件中加载数据到缓存区时,加载元素的数量应等于缓存区容量的一半的步骤包括:
判断缓存区是否为空;
当判断缓存区为空,从文件中后向读取一批数据填充到缓存区;加载元素的数量应等于缓存区容量的一半;
判断缓存区不为空,提取并移除缓存区最后一个元素。
其中,所述写入元素到文件,将待写入的元素集合全部序列化成一完整的字节块,一次性追加到当前文件流末端的步骤包括:
将待写入的元素集合先全部序列化成一个完整的字节块,再通过m_fileStream一次性追加到当前文件流末端。
其中,所述控制从文件中加载数据,把文件流指针前移指定个字节再读取;同时在前移位置截断并丢弃后面的文件数据,直到数据加载完成的步骤包括:
从文件中加载数据,把文件流指针前移4096个字节,读取;
在读取完毕后,要把文件流指针再一次前移4096个字节,同时在该位置截断并丢弃后面的文件数据,直到数据加载完成;具体如上所述。
综上所述,与现有技术相比,本发明实施例具有以下优点:
提供一种支持存储批量数据的栈结构实现方法及装置、计算机设备、可读存储介质,方法包括:为Stack栈结构成员定义;配置Push操作的缓存策略,配置Pop操作的缓存策略;当从文件中加载数据到缓存区时,加载元素的数量应等于缓存区容量的一半;控制写入元素到文件,将待写入的元素集合全部序列化成一完整的字节块,一次性追加到当前文件流末端;控制从文件中加载数据,把文件流指针前移指定个字节再读取;同时在前移位置截断并丢弃后面的文件数据,直到数据加载完成。本发明提供了一种基于文件系统作存储的栈结构实现方法,实现了一种支持存储大批量数据的栈结构,使整体的栈结构小巧、数据处理效率高效,操作简单方便,并且实现容易,可靠性高。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (8)

1.一种支持存储批量数据的栈结构实现方法,其特征在于,所述方法包括:
进行栈结构的类设计,为Stack栈结构进行成员定义;
配置Push操作的缓存策略,当缓存区满时,将缓存区内前一半的元素写入到文件;
配置Pop操作的缓存策略,通过Pop操作提取并丢弃Stack栈结构中最后加入的元素;当从文件中加载数据到缓存区时,加载元素的数量应等于缓存区容量的一半;
控制写入元素到文件,将待写入的元素集合全部序列化成一完整的字节块,一次性追加到当前文件流末端;
控制从文件中加载数据,把文件流指针前移指定个字节再读取;同时在前移位置截断并丢弃后面的文件数据,直到数据加载完成;
所述配置Push操作的缓存策略,当缓存区满时,将缓存区内前一半的元素写入到文件的步骤包括:
判断缓存区是否已满;
当缓存区已满,将缓存区内前一半的元素写入到文件,并丢弃缓存区内前一半的元素;
当缓存区未满,向缓存区末端增加一个元素;
所述配置Pop操作的缓存策略,通过Pop操作提取并丢弃Stack栈结构中最后加入的元素;当从文件中加载数据到缓存区时,加载元素的数量应等于缓存区容量的一半的步骤包括:
判断缓存区是否为空;
当判断缓存区为空,从文件中后向读取一批数据填充到缓存区;加载元素的数量应等于缓存区容量的一半;
判断缓存区不为空,提取并移除缓存区最后一个元素。
2.根据权利要求1所述支持存储批量数据的栈结构实现方法,其特征在于,所述进行栈结构的类设计,为Stack栈结构进行成员定义的步骤之前包括:
设置栈结构中容纳的元素数据类型经过序列化后表达为一个恒定字节的二进制数据块。
3.根据权利要求1所述支持存储批量数据的栈结构实现方法,其特征在于,所述进行栈结构的类设计,为Stack栈结构进行成员定义的步骤包括:
设置表示外部文件流操作对象的字段m_fileStream,用于通过此对象对外部文件执行读写操作;
以及设置表示一个内存中缓存列表对象的字段m_bufferList,用于把新的部分数据存储在内存缓存中;
以及设置用于记录栈结构中元素总量的属性Count,包含了文件中存储的元素总量和缓存中的元素总量。
4.根据权利要求3所述支持存储批量数据的栈结构实现方法,其特征在于,所述写入元素到文件,将待写入的元素集合全部序列化成一完整的字节块,一次性追加到当前文件流末端的步骤包括:
将待写入的元素集合先全部序列化成一个完整的字节块,再通过外部文件流操作对象的字段m_fileStream一次性追加到当前文件流末端。
5.根据权利要求1所述支持存储批量数据的栈结构实现方法,其特征在于,所述控制从文件中加载数据,把文件流指针前移指定个字节再读取;同时在前移位置截断并丢弃后面的文件数据,直到数据加载完成的步骤包括:
从文件中加载数据,把文件流指针前移4096个字节,读取;
在读取完毕后,要把文件流指针再一次前移4096个字节,同时在所述前移位置截断并丢弃后面的文件数据,直到数据加载完成。
6.一种支持存储批量数据的栈结构实现装置,其特征在于,所述装置包括:
定义模块,用于进行栈结构的类设计,为Stack栈结构进行成员定义;
第一策略模块,用于配置Push操作的缓存策略,当缓存区满时,将缓存区内前一半的元素写入到文件;还用于判断缓存区是否已满;当缓存区已满,将缓存区内前一半的元素写入到文件,并丢弃缓存区内前一半的元素;当缓存区未满,向缓存区末端增加一个元素;第二策略模块,配置Pop操作的缓存策略,通过Pop操作提取并丢弃Stack栈结构中最后加入的元素;当从文件中加载数据到缓存区时,加载元素的数量应等于缓存区容量的一半;还用于判断缓存区是否为空;当判断缓存区为空,从文件中后向读取一批数据填充到缓存区;加载元素的数量应等于缓存区容量的一半;判断缓存区不为空,提取并移除缓存区最后一个元素;第一控制模块,用于控制写入元素到文件,将待写入的元素集合全部序列化成一完整的字节块,一次性追加到当前文件流末端;
第二控制模块,用于控制从文件中加载数据,把文件流指针前移指定个字节再读取;同时在前移位置截断并丢弃后面的文件数据,直到数据加载完成。
7.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至5中任一项所述支持存储批量数据的栈结构实现方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至5中任一项所述的支持存储批量数据的栈结构实现方法的步骤。
CN202010207611.9A 2020-03-23 2020-03-23 支持存储批量数据的栈结构实现方法及装置、设备、介质 Active CN111427854B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010207611.9A CN111427854B (zh) 2020-03-23 2020-03-23 支持存储批量数据的栈结构实现方法及装置、设备、介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010207611.9A CN111427854B (zh) 2020-03-23 2020-03-23 支持存储批量数据的栈结构实现方法及装置、设备、介质

Publications (2)

Publication Number Publication Date
CN111427854A CN111427854A (zh) 2020-07-17
CN111427854B true CN111427854B (zh) 2024-01-30

Family

ID=71549542

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010207611.9A Active CN111427854B (zh) 2020-03-23 2020-03-23 支持存储批量数据的栈结构实现方法及装置、设备、介质

Country Status (1)

Country Link
CN (1) CN111427854B (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101478472A (zh) * 2008-10-21 2009-07-08 北京闪联讯通数码科技有限公司 一种Socket数据传输处理方法及装置
CN102096626A (zh) * 2010-12-27 2011-06-15 意法·爱立信半导体(北京)有限公司 移动终端测试日志的处理方法和移动终端
CN103823731A (zh) * 2014-03-18 2014-05-28 福州瑞芯微电子有限公司 一种基于安卓系统的sd协议栈调试方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8745329B2 (en) * 2011-01-20 2014-06-03 Google Inc. Storing data across a plurality of storage nodes
US20140258347A1 (en) * 2013-03-11 2014-09-11 Microsoft Corporation Grouping files for optimized file operations

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101478472A (zh) * 2008-10-21 2009-07-08 北京闪联讯通数码科技有限公司 一种Socket数据传输处理方法及装置
CN102096626A (zh) * 2010-12-27 2011-06-15 意法·爱立信半导体(北京)有限公司 移动终端测试日志的处理方法和移动终端
CN103823731A (zh) * 2014-03-18 2014-05-28 福州瑞芯微电子有限公司 一种基于安卓系统的sd协议栈调试方法

Also Published As

Publication number Publication date
CN111427854A (zh) 2020-07-17

Similar Documents

Publication Publication Date Title
CN106570018B (zh) 序列化与反序列化的方法、装置、系统以及电子设备
JP4053115B2 (ja) 文書画像データの記憶制御方式
CN107038206B (zh) Lsm树的建立方法、lsm树的数据读取方法和服务器
US10747678B2 (en) Storage tier with compressed forward map
CN109213432B (zh) 利用日志结构合并树将数据写入的存储设备及其方法
US9477496B2 (en) Method and apparatus for loading classes and re-organizing class archives
CN111625531B (zh) 基于可编程装置的合并装置、数据合并方法及数据库系统
US6742018B1 (en) System and method for storing and retrieving data by keywords converted into divided long integers
CN111427854B (zh) 支持存储批量数据的栈结构实现方法及装置、设备、介质
CN112765112A (zh) 一种安装包打包和解包方法
CN115640078B (zh) 基于虚拟文件系统数据智能预取的安卓应用加载优化方法
CN111190895B (zh) 列式存储数据的组织方法、装置及存储介质
CN111752941A (zh) 一种数据存储、访问方法、装置、服务器及存储介质
CN115495020A (zh) 文件处理方法、装置、电子设备和可读存储介质
CN103210389B (zh) 一种元数据的处理方法和装置
JPH04360246A (ja) ファイル圧縮装置
CN114489481A (zh) 硬盘存储数据并访问的方法及系统
CN114003573A (zh) 文件系统的压缩方法、装置、设备、存储介质、程序产品
CN109189345B (zh) 一种在线数据整理方法、装置、设备及存储介质
US8788483B2 (en) Method and apparatus for searching in a memory-efficient manner for at least one query data element
JP2004258865A (ja) 情報処理方法
JP2001331353A (ja) データベースへのデータ入力システム及びそのプログラムを記憶した記録媒体
CN117311911B (zh) 一种虚拟机快照方法、装置、电子设备及存储介质
CN116431066B (zh) 数据存储方法、装置、电子设备及存储介质
CN116821146B (zh) 一种基于Apache Iceberg的数据表列更新方法及系统

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