模型文件存储方法、装置、可读存储介质和计算机设备与流程

文档序号:18102433发布日期:2019-07-06 11:26阅读:165来源:国知局
模型文件存储方法、装置、可读存储介质和计算机设备与流程
本申请涉及计算机
技术领域
,特别是涉及一种模型文件存储方法、装置、计算机可读存储介质和计算机设备。
背景技术
:随着计算机技术的不断发展,出现了机器学习模型。机器学习模型是专门研究计算机怎样模拟或实现人类的学习行为,通过多次训练以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身性能的模型。随着模型版本的不断更新,在服务器上存储的模型版本数据的量也越来越大。但是,目前主要是使用单机存储机器学习的训练模型,受限于单台服务器的内存,只能存储gb级别的模型,无法满足大量的模型版本数据的存储需求。技术实现要素:基于此,有必要针对无法满足大量的模型版本数据的存储需求的技术问题,提供一种模型文件存储方法、装置、计算机可读存储介质和计算机设备。一种模型文件存储方法,包括:获取待存储的模型文件;将所述待存储的模型文件进行分片处理,确定各分片的哈希值;获取各存储节点组的存储范围,所述存储节点组的存储范围是根据所述存储节点组的数量和哈希值的数据类型确定的;根据所述各分片的哈希值和所述各存储节点组的存储范围,确定所述各分片所对应的存储节点组;按照所述各分片所对应的存储节点组将所述各分片进行存储。一种模型文件存储装置,所述装置包括:文件获取模块,用于获取待存储的模型文件;处理模块,用于将所述待存储的模型文件进行分片处理,确定各分片的哈希值;范围获取模块,用于获取各存储节点组的存储范围,所述存储节点组的存储范围是根据所述存储节点组的数量和哈希值的数据类型确定的;确定模块,用于根据所述各分片的哈希值和所述各存储节点组的存储范围,确定所述各分片所对应的存储节点组;存储模块,用于按照所述各分片所对应的存储节点组将所述各分片进行存储。一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行上述模型文件存储方法的步骤。一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行上述模型文件存储方法的步骤。上述模型文件存储方法、装置、计算机可读存储介质和计算机设备,通过获取待存储的模型文件,将待存储的模型文件分片处理并确定各分片的哈希值。接着获取各存储节点组的存储范围,根据各分片的哈希值和各存储节点组的存储范围,能够确定每个分片的哈希值在哪个存储节点组的范围内,从而确定每个分片要存储到哪个存储节点组中。再按照各分片所对应的存储节点组将各分片进行存储,能够将待存储的模型文件的分片存储到不同的存储节点组中,解决了单机内存无法存储大量模型版本数据的问题,实现了大规模的模型文件的存储。附图说明图1为一个实施例中模型文件存储方法的应用环境图;图2为一个实施例中模型文件存储方法的流程示意图;图3为一个实施例中将分片存储到内存块的步骤的流程示意图;图4为一个实施例中将分片存储到内存块的步骤的流程示意图;图5为一个实施例中一个节点存储多个内存块的结构示意图;图6为一个实施例中将分片存储到内存块的步骤的流程示意图;图7为一个实施例中将分片存储到哈希桶的步骤的流程示意图;图8为一个实施例中将分片存储到哈希桶的步骤的流程示意图;图9为一个实施例中一个内存块的结构示意图;图10为一个实施例中将分片存储到哈希桶的步骤的流程示意图;图11为一个实施例中查询分片的步骤的流程示意图;图12为一个实施例中查询分片的步骤的流程示意图;图13为一个实施例中路由管理的示意图;图14为一个实施例中模型文件存储装置的结构框图;图15为一个实施例中计算机设备的结构框图。具体实施方式为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。图1为一个实施例中模型文件存储方法的应用环境图。该模型文件存储方法可应用于如图1所示的分布式模型存储系统中。该分布式模型存储系统包括管理服务器110、存储服务器120和客户端软件开发工具包130。其中,管理服务器110包括模型导入服务112和路由管理服务114。存储服务器120包括多个存储节点组122。客户端软件开发工具包130提供给客户端查询各分片的存储节点组的接口。管理服务器110可以用独立的服务器或者是多个服务器组成的服务器集群来实现。存储服务器120可以用多个服务器组成的服务器集群来实现。模型导入服务112能够定期探测模型文件目录。当发现存在待存储的模型文件140时,模型导入服务112读取该待存储的模型文件140,并将该待存储的模型文件140进行分片。路由管理服务114获取存储服务器120当前有哪些存储节点组,以及每个存储节点组下的节点。路由管理服务114将存储服务器120的这些信息发送给模型导入服务112。模型导入服务112根据路由管理服务114所提供的存储服务器120的信息,将待存储的模型文件140的分片写入存储服务器120。存储服务器120中可存在多个存储节点组,每个存储节点组下存在至少一个节点,每个节点中可有多个内存块。一个存储节点组的一个节点中的一个内存块中存储了一个模型版本的部分分片。因此,一个存储节点组的一个节点中的多个内存块中所存储的分片都是不同版本的,从而能够在存储节点组的一个节点中同时存储多个模型版本的数据。当新的模型文件存储完成后,路由管理服务114会根据每个分片存储的位置更新路由表。更新路由表后,路由管理服务114会将更新的路由表同步到客户端软件开发工具包130中。并且存储服务器120定时上报每个存储节点组的每个节点的心跳信息给路由管理服务114,以确定节点是否出现问题,避免查询数据出现错误。需要注意的是,上述所提到的“多个”表示至少两个。该模型文件存储方法适用于机器学习和深度学习的训练模型的存储,支持例如浏览器的资讯和视频等场景下使用。在一个实施例中,模型导入服务、路由管理服务和各存储节点组可以在相同的服务器上。模型导入服务定期探测模型文件目录。当发现存在新的模型文件,即待存储的模型文件时,模型导入服务读取该待存储的模型文件,并将该待存储的模型文件进行分片。路由管理服务获取当前有哪些存储节点组,以及每个存储节点组下的节点。路由管理服务将各存储节点组的信息发送给模型导入服务。模型导入服务根据路由管理服务所提供的各存储节点组的信息,将待存储的模型文件的分片写入各存储节点组。如图2所示,在一个实施例中,提供了一种模型文件存储方法。本实施例主要以该方法应用于上述图1中的管理服务器110来举例说明。参照图2,该模型文件存储方法具体包括如下步骤:步骤202,获取待存储的模型文件。其中,待存储的模型文件是指需要存储到存储节点组中的模型文件。待存储的模型文件可以是模型版本中的所有文件,也可以是模型版本中的一部分文件。该待存储的模型文件中存储的是模型参数的标识和参数值。具体地,管理服务器中的模型导入服务定期检测模型文件的目录,当发现有存在新的模型文件时,则读取该模型文件,该模型文件即为待存储的模型文件。步骤204,将待存储的模型文件进行分片处理,确定各分片的哈希值。其中,分片处理是指将整体的数据拆分为多个小部分的数据,分片指的是模型参数的标识和该标识对应的参数值。哈希值是指通过哈希算法将任意长度的二进制值映射为固定长度的较小的二进制值。具体地,该待存储的模型文件中存储的数据为模型参数的标识和参数值。管理服务器的模型导入服务解析该待存储的模型文件,得到模型参数,模型参数包括该模型参数的标识和参数值。其中,模型参数是键与参数值对应的一条条记录。例如,有模型f(x,y,z)=ax+by+cz+w,需要存储的是a、b、c和w的标识和值。当给定x、y和z时,查询出模型参数a、b、c和w,就可以计算出一个值。则需要存储的模型参数如下:标识(id)参数值(value)1a2b3c4w每个模型参数的标识作为该模型参数的键。将解析得到的模型参数划分为不同的分片,每个分片中保存了待存储的模型文件的一部分数据。接着,管理服务器的路由管理服务通过哈希算法计算模型参数的键的哈希值,该哈希值即该分片的哈希值,从而确定每个分片的哈希值。步骤206,获取各存储节点组的存储范围,存储节点组的存储范围是根据存储节点组的数量和哈希值的数据类型确定的。其中,哈希值的数据类型决定了将代表哈希值的位存储在内存中的方式。例如,int_64位的哈希值表示该哈希值以64位的整数存储在内存中。不同数据类型的哈希值的范围不相同。例如,64位的整数的哈希值所包括的整数范围是-2^63(-9,223,372,036,854,775,808)到2^63-1(+9,223,372,036,854,775,807)之间的整数。具体地,管理服务器获取各存储节点组的存储范围,每个存储节点组的存储范围是根据存储节点组的数量和哈希值的数据类型确定的。进一步地,管理服务器可通过确定哈希值的数据类型,接着可确定该数据类型的哈希值所包括的数值范围。然后,管理服务器可确定当前的存储节点组的数量,根据存储节点组的数量将该数据类型的哈希值所包括的数值范围进行划分,每个存储节点组对应一个哈希值的数值范围。划分的方式可以是均分、随机分配或者自定义划分每个存储节点组所对应的哈希值的数值范围。例如,管理服务器检测到有10个存储节点组,分片的哈希值是64位的整数,则将64位整数所包括的整数范围均分为10个范围,每个存储节点组对应一个存储范围。步骤208,根据各分片的哈希值和各存储节点组的存储范围,确定各分片所对应的存储节点组。具体地,管理服务器确定分片的哈希值落在哪个存储节点组的存储范围内,即可确定该分片应存储在哪个存储节点组。并通过相同的方式,确定待存储的所有分片对应的存储节点组。步骤210,按照各分片所对应的存储节点组将各分片进行存储。具体地,管理服务器将各分片存储到对应的存储节点组。管理服务器可先确定所有的分片对应的存储节点组,接着将需要存储到同一个存储节点组的分片写入对应的存储节点组中。也可以按照确定各分片对应的存储节点组的顺序,依次将每个分片写入对应的存储节点组。管理服务器还可以在确定了一个分片的哈希值落在哪个存储节点组的存储范围后,直接将该分片写入到对应的存储节点组中。接着再判断下一个分片的哈希值落在哪个存储节点组的存储范围内,从而将所有的分片写入相应的存储节点组中。上述模型文件存储方法,通过获取待存储的模型文件,将待存储的模型文件分片处理并确定各分片的哈希值。接着获取各存储节点组的存储范围,根据各分片的哈希值和各存储节点组的存储范围,能够确定每个分片的哈希值落在哪个存储节点组的范围内,从而确定每个分片要存储到哪个存储节点组中。再按照各分片所对应的存储节点组将各分片进行存储,能够将待存储的模型文件的分片存储到不同的存储节点组中,解决了单机内存无法存储大量模型版本数据的问题,实现了大规模的模型文件的存储。在一个实施例中,将模型参数划分为分片时,可将每个模型参数划分为一个分片,也可将多个模型参数划分为一个分片。将每个模型参数划分为一个分片时,计算分片的哈希值即为计算该模型参数的键的哈希值。将多个模型参数划分为一个分片时,该多个模型参数的哈希值应在同一个存储范围内,并为该包含多个模型参数的分片配置唯一的标识,该分片的标识与该分片包含的多个模型参数的标识不相同。该分片的哈希值为该多个模型参数的键的哈希值的集合。例如,哈希值的存储范围被划分为a,b和c三个范围,管理服务器可将哈希值在a的范围内的多个模型参数d1、d2和d3划分为同一个分片d。当a,b和c三个范围被分配给不同的存储节点组时,a对应的存储节点组即为该包含多个模型参数的分片d的存储位置。在一个实施例中,如图3所示,按照各分片所对应的存储节点组将各分片进行存储,包括:步骤302,确定存储节点组上存储的最旧的模型版本。具体地,存储服务器的每个存储节点组上可存在多个节点,每个节点上存在多个内存块,每个内存块存储同一个模型版本的部分数据。管理服务器将新的模型版本中需要存储在该存储节点组中的分片写入之前,先确定该存储节点组上存储的最旧的模型版本。确定存储节点组上存储的最旧的模型版本的方式,可以通过管理服务器获取该存储节点组上的每个内存块的模型版本号,将该存储节点组上的每个内存块的模型版本号进行对比,从而确定出最旧的模型版本。步骤304,清空最旧的模型版本的数据占用的内存块。具体地,管理服务器确定该存储节点组中的最旧的模型版本所占用的内存块,并将该内存块中的数据清空。存储节点组中可能存在多个节点,多个节点中存在的内存块数量相同,存储的数据是相同。则管理服务器需要确定该存储节点组的每个节点中的最旧的模型版本,并清空该存储节点组的每个节点中的最旧的模型版本所占用的内存块。步骤306,将需要存储于存储节点组的分片存储到内存块。具体地,管理服务器将需要存储到该存储节点组中的分片存储到该清空的内存块中。进一步地,管理服务器将分片存储到该存储节点组的每个节点中被清空的内存块。上述模型文件存储方法,通过确定存储节点组上存储的最旧的模型版本,确定需要清空的内存块。清空最旧的模型版本的数据占用的内存块,从而给新的模型版本的数据分配了存储空间。将需要存储于存储节点组的分片存储到内存块,并且存储到存储节点组的每个节点的内存块中,实现了多个模型版本的数据共存,并且实现了版本模型的全量存储。在本实施例中,管理服务器获取的待存储文件可以是一个完整的新版本,则管理服务器将该新版本的模型文件进行分片后,一个内存块中存储的是该新版本的部分数据。而每个内存块中的数据都是以分片的形式进行存储的,则管理服务器清空该节点中最旧的模型版本的数据占用的内存块,即是将该内存块中所存储的分片数据删除。在一个实施例中,一个存储节点组的不同节点中存储的数据是相同的,即一个存储节点组下可存储至少两个相同的副本。其中,副本就是与源分片相同的分片。例如,要将一个分片a存储到该存储节点组,则将分片a存储到该存储节点组下的两个节点中,分别存储为分片a1和分片a2。则分片a为源分片,分片a1和分片a2即为该分片a的副本,分片a1、分片a2与源分片a完全相同。管理服务器确定分片所存储的存储节点组后,需要将该分片存储到该存储节点组下的每个节点的对应内存块中,从而保持数据的一致性。在另一个实施例中,如图4所示,按照各分片所对应的存储节点组将各分片进行存储,包括:步骤402,确定存储节点组上存储的最旧的模型版本和最新的模型版本。步骤404,清空最旧的模型版本的数据占用的内存块。步骤406,将最新的模型版本的数据复制到最旧的模型版本的数据占用的内存块中。步骤408,将需要存储于存储节点组的分片存储到内存块。具体地,确定各分片所对应的存储节点组后,管理服务器检测一个存储节点组上的每个节点中存储的最旧的模型版本和最新的模型版本。接着管理服务器确定该存储节点组上的每个节点中存储的最旧的模型版本所占用的内存块,将每个节点中存储的最旧的模型版本所占用的内存块清空,并将最新的模型版本的数据复制到每个节点中被清空的内存块中。接着,管理服务器将需要存储于该存储节点组的分片存储到每个节点中的该内存块中,从而更新该内存块中的存储的模型版本。通过将该存储节点组上存储的最新的模型版本的数据复制到最旧的模型版本所占用的内存块中,再将待存储的模型文件中需要存储在该存储节点组上的分片写入该内存块中,从而实现了模型版本数据的增量存储。对于流式训练模型,模型依据在线效果、新的样本数据不停的迭代训练。但这些训练不一定会影响所有的模型数据,只有部分数据会变更,增量导入就是只更新模型的部分数据。通过基于已有模型版本的增量数据导入,提高存储的效率,能够快速地更新模型版本。在一个实施例中,待存储的模型文件是基于已有的模型文件版本上实现的新功能的增量文件,并非整个版本的模型文件。管理服务器将该增量的模型文件进行分片,并分配到不同的存储节点组上。需要存储于该存储节点组的分片即为该增量的模型文件的分片。管理服务器确定该存储节点组的一个节点中的最旧的模型版本,即可就确定该存储节点组的所有节点中最旧的模型版本,并查找该存储节点组下的所有节点中最旧的模型版本所占用的内存块,则可以快速清空每个节点的最旧模型版本所占用的内存空间。当管理服务器将该存储节点组的最新的模型文件的分片复制到该存储节点组的一个节点的内存块中,并且将增量的模型文件存储到该内存块之后,可以直接复制该内存块中的所有分片数据。并将该分片数据存储到该存储节点组的其它节点中被清空的内存块中。通过在一个节点的内存块中形成新的模型版本,再将该内存块中的所有分片数据复制到同一存储节点组的其它节点的内存块中,避免每个节点的内存块都需要重复确定新旧版本,从而能够更快速准确地在其余节点中形成新版本。在一个实施例中,一个存储节点组中存在多个节点,一个节点中可存在多个内存块,如图5所示为一个节点中存在的3个内存块。内存块1中存储模型版本11的分片数据,内存块2中存储模型版本12的分片数据,内存块3中存储模型版本13的分片数据。当管理服务器将需要存储在该存储节点组上的分片写入时,管理服务器确定最旧的模型版本11所占用的内存块,并清空该内存块。接着,管理服务器将该节点中的最新的模型版本13的分片数据复制到清空的内存块中,再把需要存储在该存储节点组上的分片写入该内存块中,从而形成新的模型版本14。在其中一个实施例中,如图6所示,将需要存储于存储节点组的分片存储到内存块,包括:步骤602,获取内存块中分片的哈希值。步骤604,将需要存储于存储节点组的分片的哈希值与内存块中分片的哈希值进行对比。步骤606,当两者的哈希值不同时,则将需要存储于存储节点组的分片存储到内存块。具体地,管理服务器将最新的模型版本的数据复制到最旧的模型版本的数据占用的内存块时,所有的模型版本的数据是以分片的形式存储,因此存储到该内存块中的最新的模型版本的数据仍是以分片的形式存在。则管理服务器将需要存储于存储节点组的分片存储到该内存块之前,需要先确定该内存块中是否已存储有相同的分片。则管理服务器获取该内存块中分片的哈希值,并将需要存储于存储节点组的每个分片的哈希值都与内存块中每个分片的哈希值进行对比。当需要存储于存储节点组的分片的哈希值与内存块中的分片的哈希值相同时,判断这两个分片相同,即内存块中已存储有相同的分片,则不需要再存储该相同的分片。当需要存储于存储节点组的分片的哈希值与内存块中的分片的哈希值不相同时,判断这两个分片不相同,则将与内存块中的分片的哈希值不同的分片写入该内存块中。通过对比需要存储到该存储节点组的分片的哈希值和内存块中的分片的哈希值,能够确定内存块中是否存在相同的分片,进一步确定哪些分片需要存储在该内存块中,哪些分片不需要再次存储,从而能够节省内存块的存储容量,进而提升存储的效率。在一个实施例中,该模型文件存储方法还包括:当模型版本的数据处于写入状态时,将模型版本的数据配置为不可读状态;当模型版本的数据写入完成后,将模型版本的数据配置为只读状态。其中,写入状态是指正在修改、存储数据的状态。不可读状态是指不能读取数据的状态。只读状态是指文档或属性只能读取,不能修改也不能存储。具体地,当管理服务器将待存储的模型文件写入某个内存块时,管理服务器将该内存块中的模型版本的数据配置为不可读状态,该状态下的数据不允许读取。当模型版本的数据写入完成后,管理服务器将该内存块中的模型版本的数据配置为只读状态,该状态下的数据只能读取,不能修改也不能存储。通过将写入状态下的模型版本数据配置为不可读状态,避免用户在数据修改过程中仍能够查询数据,可能查询到错误的或者非最新的数据的情况。写入完成后将模型版本的数据配置为只读状态,避免用户在查询过程中不小心修改或删除了数据的问题。通过该方法可以实现模型版本数据的读写分离,并且实现了数据的无锁化读取。在其中一个实施例中,如图7所示,按照各分片所对应的存储节点组将各分片进行存储,包括:步骤702,确定分片在所对应的存储节点组中所属的内存块。具体地,一个存储节点组中可能存在至少一个节点,每个节点上可存在至少一个内存块。同一个存储节点组中的每个节点的内存块数量相同,每个节点存储的数据也相同。管理服务器确定各分片所对应的存储节点组之后,若该存储节点组中的每个节点不止一个内存块,管理服务器还应该确定各分片需要存储在哪个内存块中。管理服务器可根据分片的版本号确定所要存储的内存块。同一个待存储的模型文件的所有分片都有相同的版本号,待存储的模型文件的版本号即为其所有分片的版本号。同一个待存储的模型文件的每个分片具有相同的版本号,但是每个分片都具有唯一的标识,可以是id标识。管理服务器根据需要存储在该存储节点组的分片的版本号和该存储节点组中各内存块存储的模型版本的版本号,可知该分片应存储在哪个内存块中。步骤704,获取分片所属的内存块中的哈希桶序号,将需要存储于内存块的分片的哈希值与哈希桶序号进行匹配。步骤706,将需要存储于该内存块的分片存储在匹配成功的哈希桶序号所对应的哈希桶中。其中,哈希桶是用来存放不同键链表的容器。具体地,每个内存块中可以存在多个哈希桶。管理服务器确定分片所属的内存块中的哈希桶的数量和哈希桶的序号,并将需要存储于该内存块的分片的哈希值与哈希桶序号进行匹配。内存块中的所有哈希桶相当于一个数组,每个哈希桶相当于数组的一个元素,哈希桶的序号为该数组中元素的下标。数值的下标从0开始,则哈希桶的序号可相应地从0开始。匹配的方式可以是将分片的哈希值除以哈希桶的数量,得到余数。该余数与哈希桶的序号对比,哈希桶的序号与余数相同即为匹配成功。则管理服务器将该分片存储在匹配成功的哈希桶序号所对应的哈希桶中。例如,有4个哈希桶,序号分别是0,1,2和3。需要存储在该内存块中的一个分片的哈希值为9,则余数为1,该分片应存储在序号为1的哈希桶中。上述模型文件存储方法,通过确定分片的版本号可以确定该分片在所对应的存储节点组中所属的内存块。并通过将该分片的哈希值和内存块中的哈希桶序号进行匹配,从而能够更准确地确定分片存储的具体位置,进一步划分每个分片存储的空间。在本实施例中,管理服务器可检测该存储节点组的节点下是否存在空的内存块,若存在空的内存块,则将该需要存储在该存储节点组的分片写入该内存块,并将该分片的版本号作为该内存块的名称。若不存在空的内存块,则确定该存储节点组中的最旧的模型版本,该最旧的模型版本所占用的内存块即为该分片需要写入的内存块。在另一个实施例中,如图8所示,将所述需要存储于该内存块的分片存储在匹配成功的哈希桶序号所对应的哈希桶中,还包括:步骤802,当匹配成功的哈希桶中已存储有分片时,确定该内存块中除匹配成功的哈希桶外的其余哈希桶是否可用。具体地,当需要存储于该内存块的分片的哈希值与哈希桶的序号匹配成功时,管理服务器检测该哈希桶中是否存储有分片。若该哈希桶中未存储有分片,则将该分片存储在该匹配成功的哈希桶中。若该哈希桶中已存储有分片,则管理服务器按顺序检测该内存块中其余哈希桶是否可用。步骤804,当其余哈希桶可用时,将匹配成功且未存储的分片存储在其余哈希桶中。具体地,当管理服务器检测到其余哈希桶可用时,将匹配成功且未存储的分片存储在其余哈希桶中。并且,管理服务器将匹配成功且未存储的分片优先存储在序号在前的其余哈希桶中。步骤806,当其余哈希桶不可用时,将匹配成功且未存储的分片存储在内存块的冲突区。具体地,内存块中包括一个冲突区。分片的哈希值与哈希桶的序号匹配成功,但该哈希桶中已存储有分片的情况称为哈希冲突。当管理服务器检测到该内存块中的其余哈希桶都不可用时,将该匹配成功且未存储的分片存储在内存块的冲突区。上述模型文件存储方法中,当匹配成功的哈希桶中已存储有分片时,确定该内存块中除匹配成功的哈希桶外的其余哈希桶是否可用,以确定该匹配成功且未存储的分片能否存储在其余的哈希桶中。当其余哈希桶可用时,将匹配成功且未存储的分片存储在其余哈希桶中。当其余哈希桶不可用时,将匹配成功且未存储的分片存储在内存块的冲突区,从而确定了产生哈希冲突的分片的存储位置,解决了分片之间的哈希冲突的问题。在一个实施例中,如图9所示,为一个共享内存块的内部存储结构。为了保证服务重启时,数据不丢失,存储引擎使用共享内存进行数据存储。该共享内存包括头部、哈希(hash)索引区、冲突区头部、冲突区和实际数据存储区(chunk区)。其中,头部用于存储该内存块的属性和状态数据。hash索引区用于存储具体的hash桶实现,其中每个hash桶的元素内容为<key,valueaddr>,valueaddr是实际存储数据的chunk块的地址。冲突区头部用于记录冲突区的可用容量,指针头等信息。冲突区用于存储hash冲突的key,其<key,valueaddr>保存在冲突区。冲突区一个元素称为conflictitem,而unorderd_map中存储的是<key,conflictitem*>,服务重启时根据冲突区的内容来恢复unorderd_map。unorderd_map相当于一个缓存空间,当服务关闭时,unorderd_map的数据会被清除。服务重启时则重新建立unorderd_map,把冲突区的数据存放进去,以供查询。chunk区为实际数据存储区。写数据时,从chunk区分配内存块,用于存储value。哈希桶存储在哈希索引区,哈希索引区就是一个数组,hash桶就是其中的数组元素。当发生哈希冲突时,管理服务器按照哈希桶的序号确定哈希索引区的其余哈希桶是否可用。当其余哈希桶可用时,将匹配成功但未存储的分片存储在哈希索引区的其余哈希桶中。当哈希索引区的其余哈希桶都不可用时,将匹配成功但未存储的分片存储存储在冲突区,从而解决了哈希冲突的存储问题。在一个实施例中,如图10所示,确定该内存块中除匹配成功的哈希桶外的其余哈希桶是否可用,包括:步骤1002,获取哈希桶中键的值。步骤1004,当哈希桶中键的值为预设值时,判定哈希桶可用。步骤1006,当哈希桶中键的值为非预设值时,判定哈希桶不可用。其中,键的值是指用于表示哈希桶是否为空的数值,例如键为-1,表示该哈希桶为空。具体地,管理服务器需要确定该内存块中除匹配成功的哈希桶外的其余哈希桶是否可用,可通过其余哈希桶中键的值来判断。每个哈希桶中都存储了键和实际数据的地址,管理服务器获取预设值,检测哈希桶中的键的值与预设值是否相同。若哈希桶中键的值与预设值相同,则代表该哈希桶中未存储有分片,判定该哈希桶可用。若该哈希桶中键的值与预设值不相同,则代表该哈希桶中已存储有分片,判定该哈希桶不可用。例如,每个hash桶里面存储了key和valueaddr,hash桶未存储数据时,该桶中的key为-1,通过检测key是否是-1来确定该桶是否可用。通过对比哈希桶中键的值是否与预设值相同,以判断哈希桶是否可用,能够快速准确地检测出可用的哈希桶,加快数据存储的效率。在其中一个实施例中,该模型文件存储方法还包括:在存储完成后,根据各分片的存储路径信息和待存储的模型文件的名称,更新路由表,存储路径信息包括分片标识、分片所对应的存储节点组中的存储节点和存储节点中的内存块。其中,路由表也称路由择域信息库(rib),是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。路由表存储着指向特定网络地址的路径在有些情况下,还记录有路径的路由度量值。路由表中含有网络周边的拓扑信息。路由表建立的主要目标是为了实现路由协议和静态路由选择。本实施例中的路由表中记录了每个分片的版本号、分片的标识、每个分片所存储的存储节点组、每个分片所存储的存储节点组中的节点和每个分片所存储的节点的内存块等信息。具体地,管理服务器的模型导入服务完成模型文件的存储后,模型导入服务传递新模型版本存储完成的消息给管理服务器的路由管理服务,并将该待存储的模型文件的名称、各分片的标识、分片标识对应的存储节点组、分片标识对应的存储节点组中的存储节点和存储节点中的内存块等信息传输给路由管理服务。其中,待存储的模型文件的名称可以是该模型文件的版本号,该模型文件的版本号即为该模型文件的各分片的版本号。路由管理服务接收到存储完成的消息和存储的相关信息后,在路由表中增加分片的版本号、各分片的标识、分片标识对应的存储节点组、分片标识对应的存储节点组中的存储节点和存储节点中的内存块等相关信息,从而生成新的路由表。在其中一个实施例中,同步是指两个或两个以上随时间变化的量在变化过程中保持一定的相对关系。在本实施例中,同步路由表是指根据路由管理服务的路由表更新本地客户端上的路由表,以保持数据的一致性。管理服务器可将获取路由管理服务的路由表的时间戳,并获取客户端的本地路由表的时间戳。当客户端的本地路由表的时间戳晚于路由管理服务的路由表的时间戳时,获取路由管理服务的路由表替换客户端的本地路由表,使得能够快速更新本地路由表,保持数据一致性。在另一个实施例中,管理服务器获取路由表中的分片标识,并获取客户端本地的路由表中的分片标识,对比两者的分片标识。确定管理服务器的路由表中的分片标识未在客户端本地的路由表中查找到的,该未在客户端本地的路由表中查找到的分片标识即为更新的数据。则将更新的分片的版本号、分片的标识、分片标识对应的存储节点组、分片标识对应的存储节点组中的存储节点和存储节点中的内存块等相关信息存储到客户端的本地路由表中,以保持数据的一致性。在其中一个实施例中,该模型文件存储方法还包括:获取存储节点组的存储节点的心跳信息;当在预设时间内未获取到存储节点的心跳信息时,删除存储节点。其中,心跳信息是指存储节点组的名称、存储节点组中的节点名称和节点ip(internetprotocoladdress,互联网协议地址)。具体地,存储节点组需要定时上报节点的心跳信息给管理服务器的路由管理服务,则路由管理服务会定时获取存储节点组上报的节点的心跳信息。当路由管理服务检测到在预设时间内未接收到某个存储节点组中的某个节点的心跳信息时,判定该存储节点组中的该节点出现问题,则管理服务器删除该存储节点组中的该节点。例如,存储节点组每隔1秒向路由管理服务上报一次各节点的心跳。路由管理服务记录节点每次上报心跳的时间,然后定期的检查心跳记录,如果发现某节点超过预设时间未上报心跳,则判断超时。预设时间可根据需求进行调整,如1分钟、5分钟等。通过定时获取节点的心跳信息,以确定存储节点组的节点是否存在问题。将上报心跳信息超时的节点删除,避免用户查询数据时查询到有问题的节点,保证了查询数据的准确性。在一个实施例中,当检测到存储节点组中的节点心跳信息上报超时时,路由管理服务从路由表中删除该节点的信息。并且管理服务器将删除节点信息的路由表同步到客户端的本地路由表,以保持数据的一致性。例如,存储节点组a下有节点a1和节点a2,存储节点组a每隔2秒向路由管理服务上报一次节点a1和节点a2的心跳信息。路由管理服务每一分钟获取一次存储节点组a上报的心跳信息。当路由管理服务检测到节点a1上报的时间超过了2秒时,判定节点a1存在问题,则路由管理服务将节点a1的信息从路由表中删除。在一个实施例中,当检测到存储节点组中的节点心跳信息上报超时时,路由管理服务从路由表中删除该节点的信息后,管理服务器将该存储节点组中该存在问题的节点删除,以节省存储节点组的空间。在一个实施例中,如图11所示,该模型文件存储方法还包括:步骤1102,当接收到查询指令时,根据查询指令获取需要查询的分片对应的存储节点组。具体地,查询指令携带了需要查询的数据信息,可以是需要查询的模型文件的版本号和需要查询的部分分片的标识中的至少一个。例如,当用户要查询一个版本的模型文件的全部数据时,查询指令中可携带需要查询的该模型文件的版本号。当用户要查询一个版本的模型文件中的部分数据时,查询指令中可携带该部分数据的分片的标识。管理服务器接收到该查询指令后,从查询指令中提取出需要查询的分片,并在路由表查找确定这些需要查询的分片所对应的存储节点组,从而确定需要查询的分片具体的存储位置。步骤1104,将需要查询的分片按照存储节点组分组。步骤1106,将分组后的每组分片发送到对应的存储节点组进行查询,得到每组分片对应的查询结果。具体地,管理服务器确定需要查询的分片所对应的存储节点组后,将存储在相同存储节点组的分片分到同一组中。接着,管理服务器将分组后的每一组分片并发地发送给每组对应的存储节点组进行查询,得到每组分片对应的查询结果。步骤1108,整合每组分片对应的查询结果,并返回整合后的查询结果。具体地,管理服务器可按组为单位检测返回的查询结果的数量,当返回的查询结果的组数等于分片分组的组数时,判定接收查询结果结束。接着管理服务器将每组分片对应的查询结果整合为一份完整的查询结果,并将该整合后的查询结果返回给客户端。例如,客户端查询一般都是批量查询。例如一次批量查询5万个分片数据,软件开发工具包(例如sdk)本地缓存有路由表,根据路由表先把5万个分片进行分组,即属于同一个存储节点组的分片分到一组。然后并发的将每一组分片发送到对应存储节点组中的一个节点进行查询。等所有的查询结果返回后,sdk再将这些组的结果聚合到一起,统一返回给客户端。上述模型文件存储方法中,当接收到查询指令时,从查询指令获取需要查询的分片,然后确定分片对应的存储节点组,将需要查询的分片按照存储节点组分组。将分组后的每组分片发送到对应的存储节点组进行查询,从而实现路由的分发,实现数据的批量查询。得到每组分片对应的查询结果后,整合每组分片对应的查询结果,并返回整合后的查询结果,能够实现数据的聚合。在其中一个实施例中,该模型文件存储方法可存储多个版本的模型文件存储,用户可以根据自身需求指定版本并获取对应的模型分片。也可以默认获取最新版本的模型分片,从而能够满足不同用户的不同需求。在一个实施例中,管理服务器将需要查询的分片按照存储节点组进行分组后,还可将每组分片按照各存储节点组下的节点进行分组。将每组中相同节点的分片分到同一组,得到再次分组的分片。接着,将按照节点分组后的分片并发送给对应的存储节点组下的节点进行查询。在其中一个实施例中,如图12所示,获取需要查询的分片的存储节点组,包括:步骤1202,确定需要查询的分片的哈希值。步骤1204,将需要查询的分片的哈希值转换为页号。具体地,管理服务器通过哈希算法计算出需要查询的分片的哈希值,并通过预设规则将分片的哈希值转换为页号。预设规则是将哈希值以单页的范围进行划分,则可得到该哈希值对应的页号。例如,分片计算得到的哈希值为整数x,如果设置1页可存储的分片为1000万,那么页号=x/1000万。步骤1206,根据页号与存储节点组的映射关系确定页号所属的存储节点组。具体地,管理服务器可按照将哈希值包括的整数范围按照特定的单位为间隔划分为多页,再将总页数按照存储节点组的数量划分为多组,每个存储节点组负责存储一组页数。管理服务器确定该分片的页号后,可确定分片的页号落在哪个存储节点组负责的页数范围内。分片的页号落在哪个存储节点组负责的页数范围内表示该分片存储在该存储节点组上。上述模型文件存储方法中,通过查询指令确定需要查询的分片,并计算分片的哈希值,将哈希值转换为页号,确定页号与存储节点组的映射关系,从而能够准确确定需要查询的分片的存储位置,快速响应查询请求。如图13所示,为一个实施例中路由管理服务确定分片对应的页数所属的存储节点组的过程。哈希值包括的整数范围为0~4294967295(unsignedint),路由管理服务将整个范围按照1万为间隔划分成429497“页”。不同的“页”路由到不同的存储节点组。一个存储节点组负责存储多个“页”的数据。读/写某个分片时,首先将分片的key进行hash计算,再将hash的结果转换为对于的页号,就可以判断出该分片存储在哪个存储节点组上。如图13中,有3个存储节点组cache_group_0、cache_group_1和cache_group_2。cache_group_0存储的页号为0~143165页,cache_group_1存储的页号为143165~286330页,cache_group_1存储的页号为286330~429497页。在本实施例中,3个存储节点组cache_group_0、cache_group_1和cache_group_2上各存在两个节点。cache_group_0上存在节点cache_a和cache_b,cache_group_1上存在节点cache_c和cache_d,cache_group_2上存在节点cache_e和cache_f。同一个存储节点组中的多个节点所存储的数据是相同的,则从一个存储节点组查询数据时,可通过轮询的方式从该存储节点组的节点中查询需要的数据。其中,轮询是指将查询请求轮流分配给节点,以实现负载均衡。例如,cache_group_0上存在两个节点cache_a和cache_b,路由管理服务将第一个查询请求分配给节点cache_a,由cache_a返回结果。将第二个查询请求分配给节点cache_b,由cache_b返回结果。这种轮询的方式使得在查询大量数据时,能够将请求分担给多个节点,从而提高了数据处理能力,保证了模型存储系统的高可用性。在一个实施例中,该模型文件存储方法包括:管理服务器获取待存储的模型文件,将待存储的模型文件进行分片处理,确定各分片的哈希值。接着,管理服务器获取各存储节点组的存储范围,存储节点组的存储范围是根据存储节点组的数量和哈希值的数据类型确定的。进一步地,管理服务器根据各分片的哈希值和各存储节点组的存储范围,确定各分片所对应的存储节点组。可选地,管理服务器确定存储节点组上存储的最旧的模型版本和最新的模型版本。接着,管理服务器清空最旧的模型版本的数据占用的内存块。接着,管理服务器将最新的模型版本的数据复制到最旧的模型版本的数据占用的内存块中。可选地,管理服务器获取内存块中分片的哈希值,将需要存储于存储节点组的分片的哈希值与内存块中分片的哈希值进行对比。当两者的哈希值不同时,管理服务器则将需要存储于存储节点组的分片存储到内存块。接着,管理服务器获取分片所属的内存块中的哈希桶序号,将需要存储于内存块的分片的哈希值与哈希桶序号进行匹配。接着,管理服务器将需要存储于内存块的分片存储在匹配成功的哈希桶序号所对应的哈希桶中。进一步地,当匹配成功的哈希桶中已存储有分片时,管理服务器获取哈希桶中键的值;当哈希桶中键的值为预设值时,判定哈希桶可用;当哈希桶中键的值为非预设值时,判定哈希桶不可用。进一步地,当其余哈希桶可用时,管理服务器将匹配成功且未存储的分片存储在其余哈希桶中。可选地,当其余哈希桶不可用时,管理服务器将匹配成功且未存储的分片存储在内存块的冲突区。接着,当模型版本的数据处于写入状态时,管理服务器将模型版本的数据配置为不可读状态。接着,当模型版本的数据写入完成后,管理服务器将模型版本的数据配置为只读状态。进一步地,在存储完成后,管理服务器根据各分片的存储路径信息和待存储的模型文件的名称,更新路由表,存储路径信息包括分片标识、分片所对应的存储节点组中的存储节点和存储节点中的内存块。可选地,管理服务器获取存储节点组的存储节点的心跳信息。进一步地,当在预设时间内未获取到存储节点的心跳信息时,管理服务器删除存储节点。可选地,当接收到查询指令时,管理服务器根据查询指令确定需要查询的分片的哈希值。接着,管理服务器将需要查询的分片的哈希值转换为页号。接着,管理服务器根据页号与存储节点组的映射关系确定页号所属的存储节点组。进一步地,管理服务器将需要查询的分片按照存储节点组分组。接着,管理服务器将分组后的每组分片发送到对应的存储节点组进行查询,得到每组分片对应的查询结果。接着,管理服务器整合每组分片对应的查询结果,并返回整合后的查询结果。上述模型文件存储方法中,通过获取待存储的模型文件,将待存储的模型文件分片处理并确定各分片的哈希值。接着获取各存储节点组的存储范围,根据各分片的哈希值和各存储节点组的存储范围,能够确定每个分片的哈希值落在哪个存储节点组的范围内,从而确定每个分片要存储到哪个存储节点组中,能够将待存储的模型文件的分片存储到不同的存储节点组中,解决了单机内存无法存储大量模型版本数据的问题,实现了大规模的模型文件的存储。通过将该存储节点组上存储的最新的模型版本的数据复制到最旧的模型版本所占用的内存块中,再将待存储的模型文件中需要存储在该存储节点组上的分片写入该内存块中,从而实现了模型版本数据的增量存储。通过基于已有模型版本的增量数据导入,提高存储的效率,能够快速地更新模型版本。通过对比需要存储到该存储节点组的分片的哈希值和内存块中的分片的哈希值,能够确定内存块中是否存在相同的分片,进一步确定哪些分片需要存储在该内存块中,哪些分片不需要再次存储,从而能够节省内存块的存储容量,进而提升存储的效率。通过将该分片的哈希值和该分片所属内存块中的哈希桶序号进行匹配,从而能够更准确地确定分片存储的具体位置,进一步划分每个分片存储的空间。当匹配成功的哈希桶中已存储有分片时,确定该内存块中除匹配成功的哈希桶外的其余哈希桶是否可用,以确定该匹配成功且未存储的分片能否存储在其余的哈希桶中。当其余哈希桶可用时,将匹配成功且未存储的分片存储在其余哈希桶中。当其余哈希桶不可用时,将匹配成功且未存储的分片存储在内存块的冲突区,从而确定了产生哈希冲突的分片的存储位置,解决了分片之间的哈希冲突的问题。通过对比哈希桶中键的值是否与预设值相同,以判断哈希桶是否可用,能够快速准确地检测出可用的哈希桶,加快数据存储的效率。通过将写入状态下的模型版本数据配置为不可读状态,避免用户在数据修改过程中仍能够查询数据,可能查询到错误的或者非最新的数据的情况。写入完成后将模型版本的数据配置为只读状态,避免用户在查询过程中不小心修改或删除了数据的问题。通过该方法可以实现模型版本数据的读写分离,并且实现了数据的无锁化读取。根据路由表中增加待存储的模型文件的名称、各分片的标识、分片标识对应的存储节点组、分片标识对应的存储节点组中的存储节点和存储节点中的内存块等相关信息,从而实现路由表的更新。通过定时获取节点的心跳信息,以确定存储节点组的节点是否存在问题。将上报心跳信息超时的节点删除,避免用户查询数据时查询到有问题的节点,保证了查询数据的准确性。当接收到查询指令时,从查询指令获取需要查询的分片,然后确定分片对应的存储节点组,将需要查询的分片按照存储节点组分组。将分组后的每组分片发送到对应的存储节点组进行查询,从而实现路由的分发,实现数据的批量查询。得到每组分片对应的查询结果后,整合每组分片对应的查询结果,并返回整合后的查询结果,能够实现数据的聚合。通过查询指令确定需要查询的分片,并计算分片的哈希值,将哈希值转换为页号,确定页号与存储节点组的映射关系,从而能够准确确定需要查询的分片的存储位置,快速响应查询请求。图2-图13为一个实施例中模型文件存储方法的流程示意图。应该理解的是,虽然图2-图13的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-图13中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。在一个实施例中,如图14所示,一种模型文件存储装置,包括:文件获取模块1402,用于获取待存储的模型文件。处理模块1404,用于将待存储的模型文件进行分片处理,确定各分片的哈希值。范围获取模块1406,用于获取各存储节点组的存储范围,存储节点组的存储范围是根据存储节点组的数量和哈希值的数据类型确定的。确定模块1408,用于根据各分片的哈希值和各存储节点组的存储范围,确定各分片所对应的存储节点组。存储模块1410,用于按照各分片所对应的存储节点组将各分片进行存储。上述模型文件存储装置,通过获取待存储的模型文件,将待存储的模型文件分片处理并确定各分片的哈希值。接着获取各存储节点组的存储范围,根据各分片的哈希值和各存储节点组的存储范围,能够确定每个分片的哈希值落在哪个存储节点组的范围内,从而确定每个分片要存储到哪个存储节点组中。再按照各分片所对应的存储节点组将各分片进行存储,能够将待存储的模型文件的分片存储到不同的存储节点组中,解决了单机内存无法存储大量模型版本数据的问题,实现了大规模的模型文件的存储。在一个实施例中,存储模块1410还用于:确定存储节点组上存储的最旧的模型版本;清空最旧的模型版本的数据占用的内存块;将需要存储于存储节点组的分片存储到内存块。上述模型文件存储装置,通过确定存储节点组上存储的最旧的模型版本,确定需要清空的内存块。清空最旧的模型版本的数据占用的内存块,从而给新的模型版本的数据分配了存储空间。将需要存储于存储节点组的分片存储到内存块,并且存储到存储节点组的每个节点的内存块中,实现了多个模型版本的数据共存,并且实现了版本模型的全量存储。在一个实施例中,存储模块1410还用于:确定存储节点组上存储的最旧的模型版本和最新的模型版本;清空最旧的模型版本的数据占用的内存块;将最新的模型版本的数据复制到最旧的模型版本的数据占用的内存块中;将需要存储于存储节点组的分片存储到内存块。通过将该存储节点组上存储的最新的模型版本的数据复制到最旧的模型版本所占用的内存块中,再将待存储的模型文件中需要存储在该存储节点组上的分片写入该内存块中,从而实现了模型版本数据的增量存储。通过基于已有模型版本的增量数据导入,提高存储的效率,能够快速地更新模型版本。在一个实施例中,存储模块1410还用于:获取内存块中分片的哈希值;将需要存储于存储节点组的分片的哈希值与内存块中分片的哈希值进行对比;当两者的哈希值不同时,则将需要存储于存储节点组的分片存储到内存块。通过对比需要存储到该存储节点组的分片的哈希值和内存块中的分片的哈希值,能够确定内存块中是否存在相同的分片,进一步确定哪些分片需要存储在该内存块中,哪些分片不需要再次存储,从而能够节省内存块的存储容量,进而提升存储的效率。在一个实施例中,该模型文件存储装置还包括:配置模块。配置模块用于:当模型版本的数据处于写入状态时,将模型版本的数据配置为不可读状态;当模型版本的数据写入完成后,将模型版本的数据配置为只读状态。通过将写入状态下的模型版本数据配置为不可读状态,避免用户在数据修改过程中仍能够查询数据,可能查询到错误的或者非最新的数据的情况。写入完成后将模型版本的数据配置为只读状态,避免用户在查询过程中不小心修改或删除了数据的问题。通过该方法可以实现模型版本数据的读写分离,并且实现了数据的无锁化读取。在一个实施例中,存储模块1410还用于:确定分片在所对应的存储节点组中所属的内存块;获取分片所属的内存块中的哈希桶序号,将需要存储于内存块的分片的哈希值与哈希桶序号进行匹配;将需要存储于内存块的分片存储在匹配成功的哈希桶序号所对应的哈希桶中。通过确定分片的版本号可以确定该分片在所对应的存储节点组中所属的内存块。并通过将该分片的哈希值和内存块中的哈希桶序号进行匹配,从而能够更准确地确定分片存储的具体位置,进一步划分每个分片存储的空间。在一个实施例中,存储模块1410还用于:当匹配成功的哈希桶中已存储有分片时,确定内存块中除匹配成功的哈希桶外的其余哈希桶是否可用;当其余哈希桶可用时,将匹配成功且未存储的分片存储在其余哈希桶中;当其余哈希桶不可用时,将匹配成功且未存储的分片存储在内存块的冲突区。当匹配成功的哈希桶中已存储有分片时,确定该内存块中除匹配成功的哈希桶外的其余哈希桶是否可用,以确定该匹配成功且未存储的分片能否存储在其余的哈希桶中。当其余哈希桶可用时,将匹配成功且未存储的分片存储在其余哈希桶中。当其余哈希桶不可用时,将匹配成功且未存储的分片存储在内存块的冲突区,从而确定了产生哈希冲突的分片的存储位置,解决了分片之间的哈希冲突的问题。在一个实施例中,存储模块1410还用于:获取哈希桶中键的值;当哈希桶中键的值为预设值时,判定哈希桶可用;当哈希桶中键的值为非预设值时,判定哈希桶不可用。通过对比哈希桶中键的值是否与预设值相同,以判断哈希桶是否可用,能够快速准确地检测出可用的哈希桶,加快数据存储的效率。在一个实施例中,该模型文件存储装置还包括:更新模块。更新模块用于:在存储完成后,根据各分片的存储路径信息和待存储的模型文件的名称,更新路由表,存储路径信息包括分片标识、分片所对应的存储节点组中的存储节点和存储节点中的内存块。路由管理服务接收到存储完成的消息和存储的相关信息后,在路由表中增加待存储的模型文件的名称、各分片的标识、分片标识对应的存储节点组、分片标识对应的存储节点组中的存储节点和存储节点中的内存块等相关信息,从而生成新的路由表。在一个实施例中,该模型文件存储装置还包括:删除模块。删除模块用于:获取存储节点组的存储节点的心跳信息;当在预设时间内未获取到存储节点的心跳信息时,删除存储节点。通过定时获取节点的心跳信息,以确定存储节点组的节点是否存在问题。将上报心跳信息超时的节点删除,避免用户查询数据时查询到有问题的节点,保证了查询数据的准确性。在一个实施例中,该模型文件存储装置还包括:查询模块。查询模块用于:当接收到查询指令时,根据查询指令获取需要查询的分片对应的存储节点组;将需要查询的分片按照存储节点组分组;将分组后的每组分片发送到对应的存储节点组进行查询,得到每组分片对应的查询结果;整合每组分片对应的查询结果,并返回整合后的查询结果。当接收到查询指令时,从查询指令获取需要查询的分片,然后确定分片对应的存储节点组,将需要查询的分片按照存储节点组分组。将分组后的每组分片发送到对应的存储节点组进行查询,从而实现路由的分发,实现数据的批量查询。得到每组分片对应的查询结果后,整合每组分片对应的查询结果,并返回整合后的查询结果,能够实现数据的聚合。在一个实施例中,查询模块还用于:确定需要查询的分片的哈希值;将需要查询的分片的哈希值转换为页号;根据页号与存储节点组的映射关系确定页号所属的存储节点组。通过查询指令确定需要查询的分片,并计算分片的哈希值,将哈希值转换为页号,确定页号与存储节点组的映射关系,从而能够准确确定需要查询的分片的存储位置,快速响应查询请求。图15示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的管理服务器110和存储服务器120。如图15所示,该计算机设备包括该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现模型文件存储方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行模型文件存储方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。本领域技术人员可以理解,图15中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。在一个实施例中,本申请提供的模型文件存储装置可以实现为一种计算机程序的形式,计算机程序可在如图15所示的计算机设备上运行。计算机设备的存储器中可存储组成该模型文件存储装置的各个程序模块,比如,图14所示的文件获取模块、处理模块、范围获取模块、确定模块和存储模块。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的模型文件存储方法中的步骤。例如,图15所示的计算机设备可以通过如图14所示的模型文件存储装置中的文件获取模块获取待存储的模型文件。计算机设备可通过处理模块将待存储的模型文件进行分片处理,确定各分片的哈希值。计算机设备可通过范围获取模块获取各存储节点组的存储范围,存储节点组的存储范围是根据存储节点组的数量和哈希值的数据类型确定的。计算机设备可通过确定模块根据各分片的哈希值和各存储节点组的存储范围,确定各分片所对应的存储节点组。计算机设备可通过存储模块,执行按照各分片所对应的存储节点组将各分片进行存储的步骤。在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述模型文件存储方法的步骤。此处模型文件存储方法的步骤可以是上述各个实施例的模型文件存储方法中的步骤。在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行上述模型文件存储方法的步骤。此处模型文件存储方法的步骤可以是上述各个实施例的模型文件存储方法中的步骤。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1