CN115934354A - 在线存储方法和装置 - Google Patents
在线存储方法和装置 Download PDFInfo
- Publication number
- CN115934354A CN115934354A CN202211742123.3A CN202211742123A CN115934354A CN 115934354 A CN115934354 A CN 115934354A CN 202211742123 A CN202211742123 A CN 202211742123A CN 115934354 A CN115934354 A CN 115934354A
- Authority
- CN
- China
- Prior art keywords
- value
- node
- data
- memory
- memory block
- 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
Images
Classifications
-
- 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
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种在线存储方法,包括:预分配多个内存块;响应于数据文件的加载请求,从所述多个内存块中选择第一内存块;将所述数据文件中连续的多个节点对象存储到所述第一内存块中,以加载所述数据文件。本申请提供还提供了在线存储装置、计算机设备、计算机可读存储介质。在本申请中,在数据加载时通过预分配的内存块存储连续的节点对象,减少了由于单个副本数据的新建或删除操作导致的大内存块的申请或释放,从而可以有效地提升资源利用率,减少数据加载时的资源浪费。
Description
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种在线存储方法、装置、计算机设备、计算机可读存储介质。
背景技术
随着计算机技术的发展,针对各类数据的海量存储、读写成为了当前的热点问题。以KV数据的存储和加载为例,其主要使用Redis为主的NoSQL服务作为解决方案。通过使用Redis Cluster方式将服务进行集群化部署后,可以实现数据的分布式存储。
然而,现有的系统进行批量数据的存储和加载,需要反复申请内存,导致资源浪费。
需要说明的是,上述内容并不必然是现有技术,也不用于限制本申请的专利保护范围。
发明内容
本申请实施例的目的是提供一种在线存储方法、装置、计算机设备及计算机可读存储介质,用于解决或缓解上述问题。
本申请实施例的一个方面提供了一种在线存储方法,所述方法包括:
预分配多个内存块;
响应于数据文件的加载请求,从所述多个内存块中选择第一内存块;
将所述数据文件中连续的多个节点对象存储到所述第一内存块中,以加载所述数据文件。
可选地,所述将所述数据文件中连续的多个节点对象存储到所述第一内存块中,包括:
依次读取所述数据文件中的每一个节点对象;
根据所述每一个节点对象的数据长度以及所述第一内存块的大小,确定所述多个节点对象。
可选地,所述方法还包括:
在所述第一内存块的剩余空间低于阈值的情况下,从所述多个内存块中选择第二内存块;
将所述数据文件中的至少部分节点对象存储到所述第二内存块中;其中,至少部分节点对象包括:所述数据文件中未存储到所述第一内存块的至少部分剩余节点对象。
可选地,所述方法还包括:
获取原始节点数据,所述原始节点数据的数据格式包括Key-Value键值对;
对所述原始节点数据进行序列化,以得到相应的节点对象;其中所述相应的节点对象包括所述原始节点数据的Key值,及序列化得到的Value值长度和二进制Value值。
可选地,所述方法还包括:
创建第一层索引结构和第二层索引结构;所述第一层索引结构用于存储多个第一索引信息,每个第一索引信息对应一个第二层索引结构,所述第二级索引结构用于存储一个或多个节点对象的第二索引信息,所述第二索引信息包括Key值和指针;
依次读取每个内存块中的节点对象;
根据读取的节点对象的Key值,确定所述读取的节点对象对应的第一目标索引信息;
根据第一目标索引信息,将所述读取的节点对象的Key值和相应的指针存入所述与第一目标索引信息对应的第二层索引结构;所述相应的指针指向所述读取的节点对象。
可选地,第一索引信息包括HashMap值;所述根据读取的节点对象的Key值,确定所述读取的节点对象对应的第一目标索引信息,包括:
通过对所述读取的节点对象的Key值进行哈希运算,获取所述相应的哈希值;及
通过对所述相应的哈希值取模,获取相应的HashMap值,以作为所述第一目标索引信息。
可选地,所述方法还包括:
响应于查询请求,获取所述查询请求中的待查询Key值;
对所述待查询Key值转换为待查询HashMap值;
根据所述待查询HashMap值,在所述第一层索引结构中查找对应的目标HashMap值;
在所述目标HashMap值的第二层索引结构中,通过所述待查询Key值找到目标指针;
根据所述目标指针确定目标节点对象;
返回所述目标节点对象中的Value值长度和二进制Value值。
本申请实施例的另一个方面提供了一种在线存储装置,所述装置包括:
分配模块,用于预分配多个内存块;
选择模块,用于响应于数据文件的加载请求,从所述多个内存块中选择第一内存块;
存储模块,用于将所述数据文件中连续的多个节点对象存储到所述第一内存块中,以加载所述数据文件。
本申请实施例的另一个方面提供了一种计算机设备,包括:
至少一个处理器;及
与所述至少一个处理器通信连接的存储器;其中:
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-8中任一项所述的方法。
本申请实施例的另一个方面提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机指令,所述计算机指令被处理器执行时实现如上所述的方法。
本申请实施例提供的在线存储方法、装置、计算机设备、计算机可读存储介质,在数据加载时通过预分配的内存块存储连续的节点对象,减少了由于单个副本数据的新建或删除操作导致的大内存块的申请或释放,从而可以有效地提升资源利用率,减少数据加载时的资源浪费。
附图说明
图1示意性示出了根据本申请实施例一的在线存储方法的的运行环境图;
图2示意性示出了根据本申请实施例一的在线存储方法的流程图;
图3示意性示出了根据本申请实施例一的在线存储方法的新增步骤流程图;
图4示意性示出了数据加载的流向过程;
图5示意性示出了根据本申请实施例一的在线存储方法的新增步骤流程图;
图6示意性示出了DNN模型的一个Embedding参数的序列化过程;
图7示意性示出了根据本申请实施例一的在线存储方法的新增步骤流程图;
图8示意性示出了图8中步骤S704的子流程图;
图9示意性示出了构建两层索引的过程;
图10示意性示出了根据本申请实施例一的在线存储方法的新增步骤流程图;
图11示意性示出了数据查询过程;
图12示意性示出了根据本申请实施例二的在线存储装置的框图;及
图13示意性示出了根据本申请实施例三中的计算机设备的硬件架构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,在本申请实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
在本申请的描述中,需要理解的是,步骤前的数字标号并不标识执行步骤的前后顺序,仅用于方便描述本申请及区别每一步骤,因此不能理解为对本申请的限制。
首先,本申请涉及的术语解释:
KV存储服务:将数据以“键-值”对(Key-Value)的格式进行存储。“键”作为输入,“值”为输出。
分布式存储:将一份完整的数据分割成若干个分片,分别存放在多个存储节点中;在某个存储节点发生异常时,通常为了保证数据的完整性,每个分片还会有若干个副本分别存放在不同的存储节点中;同时,多个副本还能对数据查询进行负载均衡,提高整体查询请求的吞吐量。
Redis:一款开源的内存级的KV存储服务,将数据以“键-值”对的形式存放在服务器内存中。若使用集群(Cluster)方式进行部署,则可以实现内存级的分布式存储。
ProtoBuf:Protocol Buffers序列化框架的简称,由Google公司开发并且进行开源,其提供了一种跨平台跨语言的序列化工具,可以简单快速地将对象转化为二进制数据。
HashMap,为哈希映射,可以提供键-值映射关系。
Vector,为一个容器,内部元素以连续方式存放,每一个元素都紧挨着前一个元素存储。
其次,为方便本领域技术人员理解本申请实施例提供的技术方案,下面相关技术进行说明:
KV数据的存储方式,其主要使用Redis为主的NoSQL服务作为解决方案。具体的,通过使用Redis Cluster方式将服务进行集群化部署后,可以实现数据的分布式存储。Redis服务基于内存存储的方式实现,能够响应毫秒级的数据读写请求。
然而上述KV数据的存储方式存在以下的不足:1.不支持本地加载数据,在进行批量数据加载时需要反复申请内存,导致资源浪费;2.不支持自定义的数据结构,无法在数据存储和查询时进行优化;3.由于Redis服务旨在满足通用格式的数据存储,因此在批量查询时,没有针对性的进行性能优化,导致查询效率较低。
为此,本申请实施例提供了新的参数存储方案。在方案中,可以解决DNN模型参数存储及查询的需求,能够满足模型参数的快速加载、高效存储及高性能查询等需求。具体的,1.使用内存池技术,在数据加载时使用预分配的内存块存储一组连续的Value对象,减少了由于单个副本数据的新建或删除操作导致的大内存块的申请或释放;2.使用自定义的数据结构,将Value对象设计为包含length和data两部份,在查询时无需解析data的内容,减少无效的解析及内存复制工作;3.使用Vector+HashMap作为索引的数据结构,通过了细粒度Hash减少了数据碰撞的概率,同时还提升了HashMap的负载系数,降低了整体的内存开销。具体见后文。
图1示意性示出了根据本申请实施例的在线存储方法的环境运行图。
如图1所示,所述环境示意图包括服务器2、网络4、电子设备6,其中:
服务器2,作为计算服务平台,可以由单个或多个计算设备构成。该单个或多个计算设备可以包括虚拟化计算实例。虚拟化计算实例可以包括虚拟机,诸如计算机系统的仿真,操作系统,服务器等。计算设备可以基于定义用于仿真的特定软件(例如,操作系统,专用应用程序,服务器)的虚拟映像和/或其他数据来加载虚拟机。随着对不同类型的处理服务的需求改变,可以在一个或多个计算设备上加载和/或终止不同的虚拟机。可以实现管理程序以管理同一个计算设备上的不同虚拟机的使用。
服务器2可以提供加载、存储、查询服务。
服务器2可以被配置为通过网络4与电子设备6等通信。
电子设备6,可以提供有用户访问页面,使用于可以操控服务器2或发出请求等。
下面以服务器2为执行主体,通过多个实施例介绍本申请的在线存储方案。
实施例一
图2示意性示出了根据本申请实施例一的在线存储方法的流程图。
如图2所示,该在线存储方法可以包括步骤S200~S204,其中:
步骤S200,预分配多个内存块。
步骤S202,响应于数据文件的加载请求,从所述多个内存块中选择第一内存块。
步骤S204,将所述数据文件中连续的多个节点对象存储到所述第一内存块中,以加载所述数据文件。
在本实施例可以使用在各种场景中,提供数据的快速加载、高效存储、高性能查询等。
举例来说,本实施例可以用于DNN的在线模型参数的快速加载或存储等。
DNN(Deep Neural Networks,深度神经网络)模型,是由一个输入层、多个隐藏层、一个输出层组成,每一层又包含了多个神经单元。DNN模型可以用于各种数值预测中,如用于商业效果广告的点击率/转化率预估,来提高预估的准确度;相较于逻辑回归模型,DNN模型有着更丰富的特征信息,能够取得更好的商业价值;同时,DNN模型需要存储更多的模型参数,其中包括模型权重及Embedding参数两部分。
模型权重,为DNN模型中每一层的权重参数,需要参与模型计算,参数的数量通常与模型的神经单元总数相关。通常,单个DNN模型的权重参数的数量在百万级别。
Embedding参数,DNN模型中输入层的输入数据,参数的数量通常与DNN模型的单特征数和组合特征数有关。通常,单个DNN模型的Embedding参数数量在十亿级别。
在本实施例中,可以将DNN模型的海量模型权重、Embedding参数等快速加载、存储到内存中。
当然,本实施例还可以用于其他的模型参数加载存储,或用于其他批量数量的加载存储等。
本实施例提供的在线存储方法,使用内存池技术,在数据加载时通过预分配的内存块存储连续的节点对象,减少了由于单个副本数据的新建或删除操作导致的大内存块的申请或释放,从而可以有效地提升资源利用率,减少数据加载时的资源浪费。
下面模型参数为例并结合图2,对步骤S200~S204中各步骤和其他新增步骤进行详细阐述。
步骤S200,预分配多个内存块。
当在线存储节点启动时,服务器2会通过内存池先初始化进程级的一组固定大小的内存块,以备后续加载数据时使用。需要说明的是,内存块也可以加载本地数据。在另一些实施例中,也可以基于其他条件或动作触发的多个内存块的预分配。
内存池(Memory Block Pool),是一种内存分配方式,又被称为固定大小区块规划(fixed-size-blocks allocation)。使用内存之前,先申请分配一定数量的、大小固定的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存。这样做的一个显著优点是,使得内存分配效率得到提升。
步骤S202,响应于数据文件的加载请求,从所述多个内存块中选择第一内存块。
当数据文件(如模型参数的数据文件)加载时,服务器2会取出一个预分配的内存块(第一内存块)。所述第一内存块可以随机选取,可以基于各个内存块的顺序选取,也可以是基于内存块的大小选取。具体的选择规则可以根据实际情况而定。
步骤S204,将所述数据文件中连续的多个节点对象存储到所述第一内存块中,以加载所述数据文件。
依次读取每一个节点对象,将一组连续的节点对象存储到同一个内存块(第一内存块)。在预分配的第一内存块存储连续的节点对象,可以减少由于单个副本数据的新建或删除操作导致的大内存块的申请或释放,从而可以减少数据加载时的资源浪费。
所述节点对象可以包括一条数据,该条数据可以由多个部分组成。具体根据实际情况而定。
在一些情况下,单个内存块无法存储和加载完整的数据文件。
在可选的实施例中,步骤S204“所述将所述数据文件中连续的多个节点对象存储到所述第一内存块中”包括:依次读取所述数据文件中的每一个节点对象;根据所述每一个节点对象的数据长度以及所述第一内存块的大小,确定所述多个节点对象。在本可选的实施例中,将合适个数的节点对象加载到第一内存块中,防止第一内存块中的数据过多甚至溢出,从而在一定程度上确保第一内存块的正常运行。
在上述单个内存块无法存储和加载完整的数据文件,剩余节点对象可以接着存储和加载到其他一个或多个内存块中,从而使得服务器2可以完整地存储和加载文件。
在可选的实施例中,如图3所示,所述方法还包括:
步骤S300,在所述第一内存块的剩余空间低于阈值的情况下,从所述多个内存块中选择第二内存块;
步骤S302,将所述数据文件中的至少部分节点对象存储到所述第二内存块中;其中,至少部分节点对象包括:所述数据文件中未存储到所述第一内存块的至少部分剩余节点对象。
如图4所示,其提供了一个数据加载的流向过程。在图3中,通过内存池(MemoryBlock Pool)预分配多个内存块(Block),选择一个内存块作为当前内存块,用于数据的存储和加载。加载过程中,依次读取每一个节点对象,并且根据数据长度及预设的内存块大小,将一组连续的节点对象存放到当前内存块中;在当前内存块的剩余空间不足时,则取出下一个预分配的内存块,继续读取并加载剩下的节点对象,直至数据文件全部加载完成。所述节点对象可以是二进制数据(Binary Data)。当需要多个内存块加载时,根据加载顺序形成内存块列表(Block List)。
上述介绍了数据文件的快速存储和加载。然而,不同的数据文件也会对数据的存储、查询等构成较大的影响。因此,还可以在数据结构上改进,以优化数据存储和查询。
在可选的实施例中,如图5所示,所述方法还可以包括:
步骤S500,获取原始节点数据,所述原始节点数据的数据格式包括Key-Value键值对;
步骤S502,对所述原始节点数据进行序列化,以得到相应的节点对象;其中所述相应的节点对象包括所述原始节点数据的Key值,及序列化得到的Val ue值长度和二进制Value值。
如上,将节点对象设计为包含Value值长度(length)和数据(二进制Val ue值)两部份,在查询时无需解析二进制Value值的内容,减少无效的解析及内存复制工作。
图6提供了DNN模型的一个Embedding参数的序列化过程。Embedding参数的原始数据格式为Key-Value键值对,由一个64位的整数key和一个浮点数数组Value所组成。为了能够实现数据的快速加载及高效传输,在Embeddin g参数的序列化过程中,可以使用ProtoBuf格式将Value值转化成二进制数据(data),并且记录二进制数据的长度为length。将Key值、length、data按序排列组合成节点对象,这种排列方式的数据结构能够使得节点对象存储在连续的数据文件及内存中。
在可选的实施例中,还可以对查询提供优化方案,如减少数据碰撞的概率、降低内存开销等。
如图7所示,所述方法还可以包括:
步骤S700,创建第一层索引结构和第二层索引结构;所述第一层索引结构用于存储多个第一索引信息,每个第一索引信息对应一个第二层索引结构,所述第二级索引结构用于存储一个或多个节点对象的第二索引信息,所述第二索引信息包括Key值和指针。
步骤S702,依次读取每个内存块中的节点对象。
步骤S704,根据读取的节点对象的Key值,确定所述读取的节点对象对应的第一目标索引信息。
步骤S706,根据第一目标索引信息,将所述读取的节点对象的Key值和相应的指针存入所述与第一目标索引信息对应的第二层索引结构;所述相应的指针指向所述读取的节点对象。
通过构建双层索引结构,可以向匹配第一层索引结构的第一索引信息,接下来匹配第二层索引结构中的Key值,这种两次索引的方式,可以降低整体的内存开销。
在可选的实施例中,第一索引信息包括HashMap值。如图8所示,所述步骤S704“根据读取的节点对象的Key值,确定所述读取的节点对象对应的第一目标索引信息”可以包括:
步骤S800,通过对所述读取的节点对象的Key值进行哈希运算,获取所述相应的哈希值;及
步骤S802,通过对所述相应的哈希值取模,获取相应的HashMap值,以作为所述第一目标索引信息。
第一层索引结构可以采用Vector,从而在构建索引数据时,形成了Vector+HashMap的双层数据结构,第一层索引结构为HashMap值的集合,第一层索引结构中的每个元素组成了第二层索引结构。若加载和存储Embedding参数,则HashMap的key可以为Embedding参数的key,HashMap的Value值为指向节点对象的指针。
如图9所示,构建两层索引的过程可以为:依次读取每个内存块中的每个节点对象,先将节点对象的Key值进行哈希运算后取模,在第一层索引结构(1st Layer)中找到对应的HashMap值。然后将节点对象的Key值和指向节点对象的指针存入第二层索引结构(2ndLayer)中。
在上述可选的实施例中,使用Vector+HashMap作为索引结构,通过细粒度哈希减少了数据碰撞的概率,同时还提升了HashMap的负载系数,降低了整体的内存开销。
在得到上述双层索引结构的情形下,在查询(批量查询)时,可以提供更高的查询效率。
在可选的实施例中,如图10所示,所述方法还包括:
步骤S1000,响应于查询请求,获取所述查询请求中的待查询Key值;
步骤S1002,对所述待查询Key值转换为待查询HashMap值;
步骤S1004,根据所述待查询HashMap值,在所述第一层索引结构中查找对应的目标HashMap值;
步骤S1006,在所述目标HashMap值的第二层索引结构中,通过所述待查询Key值找到目标指针;
步骤S1008,根据所述目标指针确定目标节点对象;
步骤S1010,返回所述目标节点对象中的Value值长度和二进制Value值。
所述待查询Key值进行哈希计算后进行取模,可以得到所述HashMap值。该计算方式应该上文中的生成HashMap值的过程相对应。该计算方式,并不限制本申请保护范围。
如图11所示,在数据查询时,从查询请求中获取需要查询的Key值,对Key值进行哈希运算后取模,在Vector中找到对应的HashMap值;然后在HashMap中,使用Key值查询得到指向节点对象的指针;最终将节点对象的length和data写入到查询的返回值中。由于将节点对象设计为包含Value值长度(length)和数据(二进制Value值)两部份,在查询时无需解析二进制Value值的内容,减少无效的解析及内存复制工作。
实施例二
图12示意性示出了根据本申请实施例二的在线存储装置的框图,该在线存储装置可以被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本申请实施例。本申请实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例各程序模块的功能。
如图12所示,该在线存储装置1200可以包括分配模块1210、选择模块1220、存储模块1230,其中:
分配模块1210,用于预分配多个内存块;
选择模块1220,用于响应于数据文件的加载请求,从所述多个内存块中选择第一内存块;
存储模块1230,用于将所述数据文件中连续的多个节点对象存储到所述第一内存块中,以加载所述数据文件。
在可选的实施例中,所述存储模块1230,还用于:
依次读取所述数据文件中的每一个节点对象;
根据所述每一个节点对象的数据长度以及所述第一内存块的大小,确定所述多个节点对象。
在可选的实施例中,所述存储模块1230,还用于:
在所述第一内存块的剩余空间低于阈值的情况下,从所述多个内存块中选择第二内存块;
将所述数据文件中的至少部分节点对象存储到所述第二内存块中;其中,至少部分节点对象包括:所述数据文件中未存储到所述第一内存块的至少部分剩余节点对象。
在可选的实施例中,所述装置还包括序列化模块(未标识),用于:
获取原始节点数据,所述原始节点数据的数据格式包括Key-Value键值对;
对所述原始节点数据进行序列化,以得到相应的节点对象;其中所述相应的节点对象包括所述原始节点数据的Key值,及序列化得到的Value值长度和二进制Value值。
在可选的实施例中,所述装置还包括索引创建模块(未标识),用于:
创建第一层索引结构和第二层索引结构;所述第一层索引结构用于存储多个第一索引信息,每个第一索引信息对应一个第二层索引结构,所述第二级索引结构用于存储一个或多个节点对象的第二索引信息,所述第二索引信息包括Key值和指针;
依次读取每个内存块中的节点对象;
根据读取的节点对象的Key值,确定所述读取的节点对象对应的第一目标索引信息;
根据第一目标索引信息,将所述读取的节点对象的Key值和相应的指针存入所述与第一目标索引信息对应的第二层索引结构;所述相应的指针指向所述读取的节点对象。
在可选的实施例中,第一索引信息包括HashMap值;所述索引创建模块(未标识),还用于:
通过对所述读取的节点对象的Key值进行哈希运算,获取所述相应的哈希值;及
通过对所述相应的哈希值取模,获取相应的HashMap值,以作为所述第一目标索引信息。
在可选的实施例中,所述装置还包括查询模块(未标识),用于:
响应于查询请求,获取所述查询请求中的待查询Key值;
对所述待查询Key值转换为待查询HashMap值;
根据所述待查询HashMap值,在所述第一层索引结构中查找对应的目标HashMap值;
在所述目标HashMap值的第二层索引结构中,通过所述待查询Key值找到目标指针;
根据所述目标指针确定目标节点对象;
返回所述目标节点对象中的Value值长度和二进制Value值。
实施例三
图13示意性示出了根据本申请实施例三的适于实现在线存储方法的计算机设备10000的硬件架构示意图。所述计算机设备10000可以作为服务器2或电子设备6的一部分。本实施例中,计算机设备10000是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。例如,可以是智能手机、平板电脑、膝上笔记本、个人电脑、虚拟设备、机顶盒、电视机、投影仪、车载终端、耳机等。在另一些实施例中,计算机设备10000也可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图13所示,所述计算机设备10000至少包括但不限于:可通过系统总线相互通信链接存储器10010、处理器10020、网络接口10030。其中:
存储器10010至少包括一种类型的计算机可读存储介质,可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器10010可以是计算机设备10000的内部存储模块,例如该计算机设备10000的硬盘或内存。在另一些实施例中,存储器10010也可以是计算机设备10000的外部存储设备,例如该计算机设备10000上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,存储器10010还可以既包括计算机设备10000的内部存储模块也包括其外部存储设备。本实施例中,存储器10010通常用于存储安装于计算机设备10000的操作系统和各类应用软件,例如在线存储方法的程序代码等。此外,存储器10010还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器10020在一些实施例中可以是中央处理器(Central Processing Unit,简称为CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器10020通常用于控制计算机设备10000的总体操作,例如执行与计算机设备10000进行数据交互或者通信相关的控制和处理等。本实施例中,处理器10020用于运行存储器10010中存储的程序代码或者处理数据。
网络接口10030可包括无线网络接口或有线网络接口,该网络接口10030通常用于在计算机设备10000与其他计算机设备之间建立通信链接。例如,网络接口10030用于通过网络将计算机设备10000与外部终端相连,在计算机设备10000与外部终端之间的建立数据传输通道和通信链接等。网络可以是企业内部网(Intranet)、互联网(Internet)、全球移动通讯系统(Global System of Mobile communication,简称为GSM)、宽带码分多址(Wideband Code Division Multiple Access,简称为WCDMA)、4G网络、5G网络、蓝牙(Bluetooth)、Wi-Fi等无线或有线网络。
需要指出的是,图13仅示出了具有部件10010-10030的计算机设备,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
在本实施例中,存储于存储器10010中的在线存储方法还可以被分割为一个或者多个程序模块,并由一个或多个处理器(本实施例为处理器10020)所执行,以完成本申请实施例。
实施例四
本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质其上存储有计算机程序,计算机程序被处理器执行时实现实施例中的在线存储方法的步骤。
本实施例中,计算机可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,计算机可读存储介质可以是计算机设备的内部存储单元,例如该计算机设备的硬盘或内存。在另一些实施例中,计算机可读存储介质也可以是计算机设备的外部存储设备,例如该计算机设备上配备的插接式硬盘,智能存储卡(Smart Media Card,简称为SMC),安全数字(Secure Digital,简称为SD)卡,闪存卡(Flash Card)等。当然,计算机可读存储介质还可以既包括计算机设备的内部存储单元也包括其外部存储设备。本实施例中,计算机可读存储介质通常用于存储安装于计算机设备的操作系统和各类应用软件,例如实施例中在线存储方法的程序代码等。此外,计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的各类数据。
显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
需要说明的是,以上仅为本申请的优选实施例,并非因此限制本申请的专利保护范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (10)
1.一种在线存储方法,其特征在于,所述方法包括:
预分配多个内存块;
响应于数据文件的加载请求,从所述多个内存块中选择第一内存块;
将所述数据文件中连续的多个节点对象存储到所述第一内存块中,以加载所述数据文件。
2.根据权利要求1所述的方法,其特征在于,所述将所述数据文件中连续的多个节点对象存储到所述第一内存块中,包括:
依次读取所述数据文件中的每一个节点对象;
根据所述每一个节点对象的数据长度以及所述第一内存块的大小,确定所述多个节点对象。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述第一内存块的剩余空间低于阈值的情况下,从所述多个内存块中选择第二内存块;
将所述数据文件中的至少部分节点对象存储到所述第二内存块中;其中,至少部分节点对象包括:所述数据文件中未存储到所述第一内存块的至少部分剩余节点对象。
4.根据权利要求1至3任意一项所述的方法,其特征在于,所述方法还包括:
获取原始节点数据,所述原始节点数据的数据格式包括Key-Value键值对;
对所述原始节点数据进行序列化,以得到相应的节点对象;其中所述相应的节点对象包括所述原始节点数据的Key值,及序列化得到的Value值长度和二进制Value值。
5.根据权利要求1至3任意一项所述的方法,其特征在于,所述方法还包括:
创建第一层索引结构和第二层索引结构;所述第一层索引结构用于存储多个第一索引信息,每个第一索引信息对应一个第二层索引结构,所述第二级索引结构用于存储一个或多个节点对象的第二索引信息,所述第二索引信息包括Key值和指针;
依次读取每个内存块中的节点对象;
根据读取的节点对象的Key值,确定所述读取的节点对象对应的第一目标索引信息;
根据第一目标索引信息,将所述读取的节点对象的Key值和相应的指针存入所述与第一目标索引信息对应的第二层索引结构;所述相应的指针指向所述读取的节点对象。
6.根据权利要求5所述的方法,其特征在于,第一索引信息包括HashMa p值;所述根据读取的节点对象的Key值,确定所述读取的节点对象对应的第一目标索引信息,包括:
通过对所述读取的节点对象的Key值进行哈希运算,获取所述相应的哈希值;及
通过对所述相应的哈希值取模,获取相应的HashMap值,以作为所述第一目标索引信息。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
响应于查询请求,获取所述查询请求中的待查询Key值;
对所述待查询Key值转换为待查询HashMap值;
根据所述待查询HashMap值,在所述第一层索引结构中查找对应的目标HashMap值;
在所述目标HashMap值的第二层索引结构中,通过所述待查询Key值找到目标指针;
根据所述目标指针确定目标节点对象;
返回所述目标节点对象中的Value值长度和二进制Value值。
8.一种在线存储装置,其特征在于,所述装置包括:
分配模块,用于预分配多个内存块;
选择模块,用于响应于数据文件的加载请求,从所述多个内存块中选择第一内存块;
存储模块,用于将所述数据文件中连续的多个节点对象存储到所述第一内存块中,以加载所述数据文件。
9.一种计算机设备,其特征在于,包括:
至少一个处理器;及
与所述至少一个处理器通信连接的存储器;其中:
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-8中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机指令,所述计算机指令被处理器执行时实现如权利要求1-8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211742123.3A CN115934354A (zh) | 2022-12-30 | 2022-12-30 | 在线存储方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211742123.3A CN115934354A (zh) | 2022-12-30 | 2022-12-30 | 在线存储方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115934354A true CN115934354A (zh) | 2023-04-07 |
Family
ID=86697847
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211742123.3A Pending CN115934354A (zh) | 2022-12-30 | 2022-12-30 | 在线存储方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115934354A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117236236A (zh) * | 2023-11-10 | 2023-12-15 | 杭州行芯科技有限公司 | 一种芯片设计数据管理方法、装置、电子设备及存储介质 |
-
2022
- 2022-12-30 CN CN202211742123.3A patent/CN115934354A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117236236A (zh) * | 2023-11-10 | 2023-12-15 | 杭州行芯科技有限公司 | 一种芯片设计数据管理方法、装置、电子设备及存储介质 |
CN117236236B (zh) * | 2023-11-10 | 2024-04-16 | 杭州行芯科技有限公司 | 一种芯片设计数据管理方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11003625B2 (en) | Method and apparatus for operating on file | |
CN112214329B (zh) | 内存管理方法、装置、设备及计算机可读存储介质 | |
CN109191287B (zh) | 一种区块链智能合约的分片方法、装置及电子设备 | |
CN109766318B (zh) | 文件读取方法及装置 | |
CN112269665B (zh) | 内存的处理方法和装置、电子设备和存储介质 | |
CN109117273B (zh) | 数据存储方法、装置及设备 | |
CN107070645B (zh) | 比较数据表的数据的方法和系统 | |
CN107066498A (zh) | 键值kv存储方法和装置 | |
CN108153594B (zh) | 一种人工智能云平台的资源碎片整理方法及电子设备 | |
CN111885184A (zh) | 高并发场景下热点访问关键字处理方法和装置 | |
CN116089321A (zh) | 内存管理方法、装置、电子装置和存储介质 | |
CN112463058B (zh) | 一种碎片数据整理方法、装置及存储节点 | |
CN113672375B (zh) | 资源分配预测方法、装置、设备及存储介质 | |
CN115934354A (zh) | 在线存储方法和装置 | |
CN108897858B (zh) | 分布式集群索引分片的评估方法及装置、电子设备 | |
CN115129621A (zh) | 一种内存管理方法、设备、介质及内存管理模块 | |
CN110162395B (zh) | 一种内存分配的方法及装置 | |
CN114070847B (zh) | 服务器的限流方法、装置、设备及存储介质 | |
CN113868249A (zh) | 一种数据存储方法、装置、计算机设备以及存储介质 | |
CN114116189A (zh) | 任务处理的方法、装置和计算设备 | |
CN113568877A (zh) | 一种文件合并方法、装置、电子设备及存储介质 | |
CN115151902A (zh) | 集群扩容方法、装置、存储介质及电子设备 | |
CN111046004A (zh) | 一种数据文件存储方法、装置、设备及存储介质 | |
CN116578410A (zh) | 资源管理方法、装置、计算机设备和存储介质 | |
CN116842012A (zh) | 一种Redis集群的分片存储方法、装置、设备及存储介质 |
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 |