一种数据存储方法、装置及设备
技术领域
本申请涉及存储
技术领域
,尤其是一种数据存储方法、装置及设备。背景技术
机器学习是实现人工智能的一种途径,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。机器学习用于研究计算机如何模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习更加注重算法设计,使计算机能够自动地从数据中学习规律,并利用规律对未知数据进行预测。
在机器学习的相关技术中,特征比对作为一种有效手段,被广泛应用于人脸识别、人体识别、车辆识别等领域。特征比对是指将待检测特征与大量特征模型进行一一比对,继而从大量特征模型中筛选出符合要求的目标特征模型。
由于特征模型的数量非常巨大,因此,如何对这些特征模型进行存储,目前并没有有效的存储方式,存储性能较低,存储效果较差,用户体验较差。
发明内容
有鉴于此,本申请提供一种数据存储方法,所述方法包括:
获取数据信息,所述数据信息包括待存储数据和待存储数据的数据标识;其中,所述待存储数据为待存储图像或者待存储特征模型;
从已创建的多个预分配文件中确定所述待存储数据的目标预分配文件,所述目标预分配文件包括多个存储区域,每个存储区域均包括头信息域和数据域;
从所述目标预分配文件的多个存储区域中选择未被占用的目标存储区域;
将所述待存储数据存储到所述目标存储区域的数据域,并将所述待存储数据的数据标识存储到所述目标存储区域的头信息域。
本申请提供一种数据存储装置,所述装置包括:
获取模块,用于获取数据信息,所述数据信息包括待存储数据和所述待存储数据的数据标识;其中,所述待存储数据为待存储图像或者待存储特征模型;
确定模块,用于从已创建的多个预分配文件中确定所述待存储数据的目标预分配文件,所述目标预分配文件包括多个存储区域,每个存储区域均包括头信息域和数据域;
选择模块,用于从所述目标预分配文件的多个存储区域中选择未被占用的目标存储区域;
存储模块,用于将所述待存储数据存储到所述目标存储区域的数据域,并将所述待存储数据的数据标识存储到所述目标存储区域的头信息域。
本申请提供一种数据存储设备,包括:处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;
所述处理器用于执行机器可执行指令,以实现如下的步骤:
获取数据信息,所述数据信息包括待存储数据和待存储数据的数据标识;其中,所述待存储数据为待存储图像或者待存储特征模型;
从已创建的多个预分配文件中确定所述待存储数据的目标预分配文件,所述目标预分配文件包括多个存储区域,每个存储区域均包括头信息域和数据域;
从所述目标预分配文件的多个存储区域中选择未被占用的目标存储区域;
将所述待存储数据存储到所述目标存储区域的数据域,并将所述待存储数据的数据标识存储到所述目标存储区域的头信息域。
由以上技术方案可见,本申请实施例中,可以将待存储数据存储到目标预分配文件的目标存储区域的数据域,并将该待存储数据的数据标识存储到目标预分配文件的目标存储区域的头信息域,也就是说,可以通过预分配文件来存储待存储数据(如待存储图像或者待存储特征模型),从而支持大量数据的存储,存储性能较高,存储效果较好,用户体验较好,能够提升存储性能和检索性能,提高待存储数据的存储速度,并提高待存储数据的读取性能。
附图说明
为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其他的附图。
图1是本申请一种实施方式中的数据存储方法的流程图;
图2是本申请一种实施方式中的预分配文件的示意图;
图3是本申请一种实施方式中的预分配文件的存储区域示意图;
图4是本申请一种实施方式中的预分配文件管理过程的示意图;
图5是本申请一种实施方式中的预分配文件分配过程的示意图;
图6是本申请一种实施方式中的预分配文件回收过程的示意图;
图7是本申请中的数据库文件、图像和特征模型的存储过程的示意图;
图8是本申请一种实施方式中的数据存储装置的结构图;
图9是本申请一种实施方式中的数据存储设备的结构图。
具体实施方式
在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
特征比对被广泛应用于人脸识别、人体识别、车辆识别等领域。特征比对是指将待检测特征与大量特征模型进行一一比对,继而从大量特征模型中筛选出符合要求的目标特征模型。为了实现特征比对,需要在数据库中存储大量图像,并在数据库中存储大量特征模型。示例性的,特征模型是通过算法对图像中目标进行描述的一串二进制数据,当特征模型中的特征点数量越多时,特征模型越长,特征模型的比对效果越好。当特征模型中的特征点数量越小时,则特征模型越短,特征模型的比对效果越差。综上所述,基于数据库中存储的大量图像,可以生成大量特征模型,对此特征模型的生成方式不做限制。
由于需要存储的图像数量巨大,如何对这些图像进行存储,在一种可能的实现方式中,将每个图像作为一个文件进行存储。例如,在文件夹中存储每个图像,即每个图像作为一个文件。显然,上述方式会导致文件夹下写入大量图像,随着图像数量的增加,会频繁更新文件系统分区表,读写性能很差。
由于需要存储的特征模型数量巨大,如何对这些特征模型进行存储,在一种可能的实现方式中,将每个特征模型作为一个文件进行存储。例如,在文件夹中存储每个特征模型,即每个特征模型作为一个文件。显然,上述方式会导致文件夹下写入大量特征模型,会频繁更新文件系统分区表,读写性能很差。
综上所述,如何对大量图像和大量特征模型进行存储,目前并没有有效的存储方式,存储性能较低,读写性能很差,存储效果较差,用户体验较差。
针对上述发现,本申请实施例中,可以创建多个预分配文件,每个预分配文件可以包括多个存储区域,每个存储区域用于存储待存储数据(如待存储图像或者待存储特征模型),也就是说,每个预分配文件可以存储多个待存储数据,从而通过预分配文件来支持大量数据的存储,存储性能较高,存储效果较好,能够提升存储性能和检索性能,并提高待存储数据的读取性能。
以下结合具体实施例,对本申请实施例的技术方案进行说明。
参见图1所示,为数据存储方法的流程示意图,该方法可以包括:
步骤101,获取数据信息,该数据信息包括待存储数据和待存储数据的数据标识。示例性的,待存储数据可以为待存储图像或者待存储特征模型。当然,待存储数据还可以为其它类型的数据,对此不做限制,只要是能够采用本申请的数据存储方法即可,后续以待存储图像和待存储特征模型为例进行说明。
例如,当需要存储某图像(为了区分方便,将需要存储的图像称为待存储图像)时,可以获取该待存储图像的数据信息,该数据信息包括待存储图像和该待存储图像的数据标识,该数据标识是图像的唯一标识。当需要存储某特征模型(为了区分方便,将需要存储的特征模型称为待存储特征模型)时,可以获取该待存储特征模型的数据信息,该数据信息可以包括待存储特征模型和该待存储特征模型的数据标识,该数据标识可以是待存储特征模型的唯一标识。
示例性的,针对所有待存储图像的数据标识,每个待存储图像的数据标识具有唯一性,即不同的待存储图像的数据标识可以不同。
示例性的,针对所有待存储特征模型的数据标识,每个待存储特征模型的数据标识具有唯一性,即不同的待存储特征模型的数据标识可以不同。
示例性的,假设基于待存储图像A生成待存储特征模型A,则待存储特征模型A的数据标识与待存储图像A的数据标识相同,基于此,可以利用待存储图像A的数据标识,查询到与该数据标识对应的待存储特征模型A,也可以利用待存储特征模型A的数据标识,查询到与该数据标识对应的待存储图像A。
步骤102,从已创建的多个预分配文件中确定待存储数据的目标预分配文件,目标预分配文件包括多个存储区域,每个存储区域均包括头信息域和数据域。
示例性的,在步骤102之前,需要创建多个预分配文件,针对多个预分配文件中的每个预分配文件来说,该预分配文件可以包括索引区域和多个存储区域,每个存储区域均可以包括头信息域和数据域。参见图2所示,为预分配文件的示意图,当然,预分配文件还可以包括其它区域,对此不做限制。
针对创建多个预分配文件的过程,可以在存储介质中创建多个预分配文件,例如,可以在存储介质的文件夹下创建多个预分配文件。其中,该存储介质可以包括RAM(RadomAccess Memory,随机存取存储器)、易失存储器、非易失性存储器、磁盘、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等)等,对此存储介质的类型不做限制。
针对多个预分配文件中的每个预分配文件,该预分配文件可以是二进制文件,当然,二进制文件只是示例,对此预分配文件的类型不做限制。
针对创建多个预分配文件的过程,可以在文件系统下预先创建多个预分配文件,即多个预分配文件是在文件系统下创建的。文件系统是操作系统用于明确存储介质或分区上文件的方法和数据结构,即在存储介质上组织文件的方法,操作系统中负责管理和存储数据的软件机构称为文件管理系统,简称文件系统。
针对创建多个预分配文件的过程,可以先确定每个预分配文件占用的存储空间大小,不同预分配文件占用的存储空间大小相同或者不同。然后,创建与该存储空间大小匹配的预分配文件,即预分配文件的大小为该存储空间大小。
例如,假设需要创建4个预分配文件,2个预分配文件占用的存储空间大小为64MB,另外2个预分配文件占用的存储空间大小为128MB,则可以创建64MB的预分配文件1,创建64MB的预分配文件2,创建128MB的预分配文件3,创建128MB的预分配文件4。预分配文件1的大小为64MB是指:虽然预分配文件1当前还没有存储数据,但是,已经为预分配文件1预留出64MB的存储空间,即,预分配文件1能够存储64MB的数据,预分配文件1占用存储空间的地址可以为地址A1-地址B1,且地址A1-地址B1之间的长度为64MB。针对其它预分配文件,情况与预分配文件1类似,在此不再重复赘述。
参见图2所示,针对预分配文件的多个存储区域中的每个存储区域,该存储区域用于存储待存储数据(如待存储图像或者待存储特征模型),具体存储过程参见后续实施例,在此不再赘述。针对预分配文件的索引区域,用于记录该预分配文件的管理信息,继而根据该管理信息对该预分配文件进行管理。
索引区域可以位于预分配文件的头部,也可以位于预分配文件的尾部,还可以位于预分配文件的其它位置,图2中以位于预分配文件的尾部为例。例如,索引区域的大小为1MB时,索引区域占用预分配文件尾部1MB的存储空间。
针对预分配文件的索引区域,该索引区域可以包括该预分配文件的文件状态,该文件状态可以为使用状态,或者已满状态,或者空闲状态。
其中,在创建预分配文件后,可以将该预分配文件的文件状态设置为空闲状态,空闲状态表示该预分配文件当前还没有存储任何待存储数据,是一个空闲的预分配文件,能够向该预分配文件中存储待存储数据。
在向某个预分配文件中存储待存储数据后,若该预分配文件还能够继续存储待存储数据,则可以将该预分配文件的文件状态设置为使用状态,使用状态表示该预分配文件当前已经存储待存储数据,但是预分配文件没有被写满,是一个未写满的预分配文件,能够继续向该预分配文件中存储待存储数据。
在向某个预分配文件中存储待存储数据后,若该预分配文件无法继续存储待存储数据,则可以将该预分配文件的文件状态设置为已满状态,已满状态表示该预分配文件当前已经存储待存储数据,且预分配文件已经被写满,是一个已写满的预分配文件,无法继续向该预分配文件中存储待存储数据。
针对预分配文件的索引区域,该索引区域可以包括预分配文件的使用类型,如使用类型是图像类型或特征模型类型。例如,针对每个预分配文件来说,可以存储一种使用类型的待存储数据,若预分配文件只用于存储待存储图像,则将预分配文件的使用类型设置为图像类型,表示该预分配文件中存储的均是待存储图像。若预分配文件只用于存储待存储特征模型,则将预分配文件的使用类型设置为特征模型类型,表示该预分配文件中存储的均是待存储特征模型。
针对预分配文件的索引区域,该索引区域可以包括预分配文件中已被占用的存储区域的第一地址信息。或者,针对预分配文件的索引区域,该索引区域可以包括预分配文件中未被占用的存储区域的第二地址信息。
例如,参见图3所示,预分配文件1占用存储空间的地址为地址A1-地址B1,地址A1-地址B1之间的长度为64MB,地址C1-地址B1之间的长度为1MB,已经被索引区域占用,假设地址A1-地址D1已经有待存储数据,则:
地址A1-地址D1是已被占用的存储区域,第一地址信息可以包括地址A1和地址D1,表示地址A1-地址D1之间是已被占用的存储区域,第一地址信息也可以包括地址D1,表示地址D1之前是已被占用的存储区域,对此不做限制,只要基于第一地址信息能够获知哪些地址是已被占用的存储区域即可。基于第一地址信息,可以确定地址D1之后的存储区域还未被占用,即地址D1-地址C1之间的存储区域还未被占用,可以用于存储待存储数据。
或者,地址D1-地址C1是未被占用的存储区域,第二地址信息可以包括地址D1和地址C1,表示地址D1-地址C1之间是未被占用的存储区域,第二地址信息也可以包括地址D1,表示地址D1之后是未被占用的存储区域,对此不做限制,只要基于第二地址信息能够获知哪些地址是未被占用的存储区域即可。基于第二地址信息,可以确定地址D1之后的存储区域还未被占用,即地址D1-地址C1之间的存储区域还未被占用,可以用于存储待存储数据。
基于创建的多个预分配文件,针对步骤102,从已创建的多个预分配文件中确定待存储数据的目标预分配文件,可以包括但不限于如下方式:
方式1、若多个预分配文件中存在文件状态为使用状态的预分配文件,则将该预分配文件确定为待存储数据的目标预分配文件。若多个预分配文件中不存在文件状态为使用状态的预分配文件,则从多个预分配文件中获取文件状态为空闲状态的预分配文件,将该预分配文件确定为待存储数据的目标预分配文件。
例如,针对多个预分配文件中的每个预分配文件,从该预分配文件的索引区域读取该预分配文件的文件状态,该文件状态为使用状态,或已满状态,或空闲状态。若预分配文件1的文件状态为使用状态,则将预分配文件1确定为待存储数据的目标预分配文件。若预分配文件1和预分配文件2的文件状态是已满状态,预分配文件3和预分配文件4的文件状态是空闲状态,则可以将预分配文件3或者预分配文件4确定为待存储数据的目标预分配文件。
示例性的,若多个预分配文件中存在文件状态为使用状态的预分配文件,且该预分配文件的使用类型与待存储数据匹配,则将该预分配文件确定为待存储数据的目标预分配文件。若该预分配文件的使用类型与待存储数据不匹配,则不将该预分配文件确定为待存储数据的目标预分配文件。
例如,假设预分配文件1和预分配文件2的文件状态为使用状态,预分配文件1的使用类型为图像类型,预分配文件2的使用类型为特征模型类型,则:待存储数据为待存储图像时,预分配文件1的使用类型与待存储图像匹配,预分配文件2的使用类型与待存储图像不匹配,因此,将预分配文件1确定为待存储图像的目标预分配文件。待存储数据为待存储特征模型时,预分配文件1的使用类型与待存储特征模型不匹配,预分配文件2的使用类型与待存储特征模型匹配,因此,将预分配文件2确定为待存储特征模型的目标预分配文件。
又例如,假设预分配文件1的文件状态为使用状态,预分配文件1的使用类型为图像类型,则:待存储数据为待存储特征模型时,预分配文件1的使用类型与待存储特征模型不匹配,从多个预分配文件中获取文件状态为空闲状态的预分配文件,假设获取预分配文件2,则将预分配文件2确定为待存储特征模型的目标预分配文件。其中,在预分配文件2的文件状态为空闲状态时,预分配文件2的使用类型为空,预分配文件2可以存储待存储特征模型,也可以存储待存储图像。在将预分配文件2确定为待存储特征模型的目标预分配文件后,可以将预分配文件2的文件状态设置为使用状态,并将预分配文件2的使用类型设置为特征模型类型,表示预分配文件2只存储待存储特征模型。
方式2、数据信息还可以包括待存储数据所属集合的集合标识,基于此,可以从多个预分配文件中获取该集合标识对应的预分配文件,并将该集合标识对应的预分配文件确定为待存储数据的目标预分配文件。示例性的,若多个预分配文件中已存在该集合标识对应的预分配文件,且该集合标识对应的预分配文件的文件状态为已满状态,或者,多个预分配文件中不存在该集合标识对应的预分配文件,则:可以从多个预分配文件中获取文件状态为空闲状态的预分配文件,并将获取的预分配文件确定为该集合标识对应的预分配文件。
示例性的,针对大量待存储数据来说,可以基于待存储数据的特征信息将这些待存储数据划分到相同或者不同集合,该特征信息可以包括但不限于地理位置、性别、年龄等等,对此特征信息不做限制,可以任意配置。例如,用户A1-用户A100所在地理位置属于城市A,针对用户A1-用户A100的待存储数据,将这些待存储数据划分到集合A;用户B1-用户B20所在地理位置属于城市B,针对用户B1-用户B20的待存储数据,将这些待存储数据划分到集合B,以此类推。又例如,用户C1-用户C500的性别为男性,针对用户C1-用户C500的待存储数据,将这些待存储数据划分到集合C;用户D1-用户D500的性别为女性,针对用户D1-用户D500的待存储数据,将这些待存储数据划分到集合D,以此类推。当然,上述只是示例,对此待存储数据所属的集合不做限制。
针对相同集合的多个待存储数据,可以存储到同一个预分配文件,针对不同集合的多个待存储数据,可以不存储到同一个预分配文件。例如,将集合A的多个待存储数据存储到预分配文件1,但是,即使预分配文件1的文件状态为使用状态,也不会将集合B的待存储数据存储到预分配文件1。
示例性的,在步骤101中,数据信息可以包括待存储数据,该待存储数据的数据标识,该待存储数据所属集合的集合标识,如集合标识aaa。
步骤102中,先判断多个预分配文件中是否存在与集合标识aaa对应的预分配文件。如果不存在与集合标识aaa对应的预分配文件,则可以从多个预分配文件中获取文件状态为空闲状态的预分配文件,如预分配文件3,并将预分配文件3确定为集合标识aaa对应的预分配文件,并将预分配文件3确定为待存储数据的目标预分配文件,且将预分配文件3的文件状态设置为使用状态。或者,
如果存在与集合标识aaa对应的预分配文件,如预分配文件1,则从预分配文件1的索引区域读取预分配文件1的文件状态,该文件状态为使用状态或已满状态。若预分配文件1的文件状态为使用状态,则可以将预分配文件1确定为待存储数据的目标预分配文件。若预分配文件1的文件状态是已满状态,则从多个预分配文件中获取文件状态为空闲状态的预分配文件,如预分配文件3,将预分配文件3确定为集合标识aaa对应的预分配文件,将预分配文件3确定为待存储数据的目标预分配文件,且将预分配文件3的文件状态设置为使用状态。
示例性的,若存在与集合标识aaa对应的预分配文件1,且预分配文件1的文件状态为使用状态,还可以确定预分配文件1的使用类型与待存储数据是否匹配。如果匹配,则将预分配文件1确定为待存储数据的目标预分配文件。如果不匹配,则不将预分配文件1确定为待存储数据的目标预分配文件。
例如,假设预分配文件1的使用类型为图像类型,待存储数据为待存储图像,则预分配文件1的使用类型与待存储图像匹配,将预分配文件1确定为待存储图像的目标预分配文件。假设预分配文件1的使用类型为图像类型,待存储数据为待存储特征模型,则预分配文件1的使用类型与待存储特征模型不匹配,不将预分配文件1确定为待存储特征模型的目标预分配文件;基于此,从多个预分配文件中获取文件状态为空闲状态的预分配文件,如预分配文件3,将预分配文件3确定为集合标识aaa对应的预分配文件,将预分配文件3确定为待存储特征模型的目标预分配文件,将预分配文件3的文件状态设置为使用状态。
其中,在预分配文件3的文件状态为空闲状态时,预分配文件3的使用类型为空,此时,预分配文件3可以存储待存储特征模型,也可以存储待存储图像。在将预分配文件3确定为待存储特征模型的目标预分配文件后,则可以将预分配文件3的文件状态设置为使用状态,并将预分配文件3的使用类型设置为特征模型类型,从而表示预分配文件3只存储待存储特征模型。
步骤103,从目标预分配文件的多个存储区域中选择未被占用的目标存储区域。示例性的,由于目标预分配文件包括多个存储区域,因此,可以从目标预分配文件的多个存储区域中选择未被占用的目标存储区域。
示例性的,目标预分配文件还包括索引区域,若索引区域包括目标预分配文件中已被占用的存储区域的第一地址信息,则可以根据第一地址信息从目标预分配文件的多个存储区域中选择未被占用的目标存储区域,或者,若索引区域包括目标预分配文件中未被占用的存储区域的第二地址信息,则可以根据第二地址信息从目标预分配文件的多个存储区域中选择未被占用的目标存储区域。
例如,假设第一地址信息表示已被占用的最后位置,基于此,可以根据第一地址信息,将第一地址信息后的存储区域作为目标存储区域。
例如,参见上述实施例,假设目标预分配文件为预分配文件1,第一地址信息包括地址A1和地址D1,则确定地址A1-地址D1之间是已被占用的存储区域,确定地址D1-地址C1之间的存储区域还未被占用,因此,可以将地址D1开始的存储区域确定为目标存储区域。又例如,假设目标预分配文件为预分配文件1,第二地址信息包括地址D1和地址C1,则确定地址D1-地址C1之间的存储区域还未被占用,因此,可以将地址D1开始的存储区域确定为目标存储区域。
综上所述,基于第一地址信息或第二地址信息,可以从目标预分配文件中选择未被占用的目标存储区域,目标存储区域可以包括头信息域和数据域。
步骤104,将待存储数据存储到目标存储区域的数据域,并将待存储数据的数据标识存储到该目标存储区域的头信息域,至此,完成数据存储过程。
示例性的,在从目标预分配文件中选择未被占用的目标存储区域后,由于目标存储区域包括头信息域(即用于存储待存储数据的数据标识的区域)和数据域(即用于存储待存储数据的区域,因此,可以将待存储数据存储到目标存储区域的数据域,并将待存储数据的数据标识存储到目标存储区域的头信息域。
由以上技术方案可见,本申请实施例中,可以将待存储数据存储到目标预分配文件的目标存储区域的数据域,并将该待存储数据的数据标识存储到目标预分配文件的目标存储区域的头信息域,也就是说,可以通过预分配文件来存储待存储数据(如待存储图像或者待存储特征模型),从而支持大量数据的存储,存储性能较高,存储效果较好,用户体验较好,能够提升存储性能和检索性能,提高待存储数据的存储速度,并提高待存储数据的读取性能。
在一种可能的实施方式中,步骤104之后,还可以确定待存储数据在目标预分配文件中的位置信息,如偏移起始位置和偏移长度,偏移起始位置表示待存储数据的数据标识和待存储数据在目标预分配文件中的起始位置,偏移长度表示待存储数据的数据标识和待存储数据在目标预分配文件中的长度。
例如,假设目标存储区域的地址区间为地址D1-地址E1,在将待存储数据存储到该目标存储区域的数据域,并将待存储数据的数据标识存储到该目标存储区域的头信息域后,确定偏移起始位置为地址D1,并确定偏移长度为地址D1与地址E1之间的长度,该偏移起始位置和该偏移长度就是待存储数据在目标预分配文件中的位置信息。基于该偏移起始位置和该偏移长度,可以从目标预分配文件中查询到待存储数据的数据标识和待存储数据。
然后,可以将待存储数据的数据标识,待存储数据对应的身份信息,目标预分配文件的文件标识和该位置信息,存储到数据库文件中。
示例性的,可以创建针对待存储图像的数据库文件(记为数据库文件a)和针对待存储特征模型的数据库文件(记为数据库文件b)。若待存储数据为待存储图像,则可以将待存储图像的数据标识,待存储图像对应的身份信息,目标预分配文件的文件标识和该位置信息,存储到数据库文件a。若待存储数据为待存储特征模型,则可以将待存储特征模型的数据标识,待存储特征模型对应的身份信息,目标预分配文件的文件标识和该位置信息,存储到数据库文件b。
在一种可能的实施方式中,针对已包括待存储数据的每个预分配文件来说,作为待存储数据的目标预分配文件,为了区分方便,将目标预分配文件中存储的数据称为已存储数据。基于此,当从目标预分配文件中删除已存储数据时,还可以根据目标预分配文件中的剩余已存储数据的数量,确定该目标预分配文件是否符合回收条件。如果是,则将剩余已存储数据迁移到迁移预分配文件。
示例性的,目标预分配文件的索引区域还可以包括目标预分配文件中的剩余已存储数据的数量,目标预分配文件的数据总数量。基于此,可以从目标预分配文件的索引区域中获取该剩余已存储数据的数量和该数据总数量。若该剩余已存储数据的数量与该数据总数量的比例大于预设阈值,则可以确定目标预分配文件不符合回收条件;若该剩余已存储数据的数量与该数据总数量的比例不大于预设阈值,则可以确定目标预分配文件符合回收条件。
以下结合具体应用场景,对本申请实施例的上述技术方案进行说明。
本应用场景中,以特征比对应用于人脸识别领域为例进行说明,针对人体识别、车辆识别等其它领域,实现过程与人脸识别领域的实现过程类似。
本应用场景中,涉及预分配文件管理过程,预分配文件分配过程,预分配文件回收过程,数据库文件、图像和特征模型的存储过程,以下对此进行说明。
参见图4所示,为预分配文件管理过程的示意图。在预分配文件管理过程中,可以预先创建人脸库存储目录,该人脸库存储目录包括人脸库文件夹,该人脸库文件夹用于存储待存储图像和待存储特征模型。示例性的,人脸库文件夹可以包括多个预分配文件,不同预分配文件占用的存储空间大小相同或者不同,例如,每个预分配文件占用的存储空间大小为64MB(64MB是一个示例,可以任意配置),也就是说,每个预分配文件的大小可以为64MB。
示例性的,人脸库文件夹(即facelib文件夹)用于存储待存储图像和待存储特征模型,人脸库文件夹中的文件均为预分配文件,可以将待存储图像和待存储特征模型分别存储在不同的预分配文件中。也就是说,若某个预分配文件存储待存储图像后,在该预分配文件中不再存储待存储特征模型;若某个预分配文件存储待存储特征模型后,在该预分配文件中不再存储待存储图像。
示例性的,针对每个预分配文件来说,该预分配文件可以包括索引区域和多个存储区域,每个存储区域均可以包括头信息域(即head)和数据域(即body),头信息域用于存储待存储数据的数据标识,数据域用于存储待存储数据(如待存储图像或者待存储特征模型)。索引区域用于记录预分配文件的管理信息。
示例性的,索引区域可以包括但不限于:1、预分配文件的文件状态,该文件状态可以为使用状态,或者已满状态,或者空闲状态。2、预分配文件的使用类型,该使用类型可以是图像类型或特征模型类型。3、预分配文件中已被占用的存储区域的第一地址信息,或者,预分配文件中未被占用的存储区域的第二地址信息。4、预分配文件中的剩余已存储数据的数量(即有效数据总个数,假设预分配文件中存储了10个数据,即占用了10个存储区域,则剩余已存储数据的数量为10),预分配文件的数据总数量(即预分配文件最多存储多少个数据,假设预分配文件最多存储100个数据,则数据总数量为100)。当然,上述只是索引区域中的内容的几个示例,对此索引区域中的内容不做限制。
示例性的,可以按照人脸库总需容量确定预分配文件的数量,并创建所述数量个预分配文件,例如,每个预分配文件的大小为64MB(可配置),人脸库总需容量为600MB,则预分配文件的数量为10,可以创建10个预分配文件。
示例性的,每个预分配文件均具有自身的使用类型,若该使用类型是图像类型,则表示该预分配文件可以只用于存储待存储图像。若该使用类型是特征模型类型,则表示该预分配文件可以只用于存储待存储特征模型。
示例性的,每个集合(一个人脸库可以是一个集合)可以单独使用一个预分配文件,即不同集合的待存储数据,需要存储到不同的预分配文件中。
参见图4所示,人脸库存储目录还包括数据库文件(如人脸库数据库文件,也可以称为storvcalibdb文件),数据库文件的数量可以为一个或者多个。
示例性的,数据库文件用于记录待存储数据的数据标识,待存储数据对应的身份信息,目标预分配文件的文件标识,待存储数据在目标预分配文件中的位置信息(如偏移起始位置和偏移长度)。例如,在将数据A存储到预分配文件1之后,可以在数据库文件中记录数据A的数据标识,数据A对应的身份信息,预分配文件1的文件标识,数据A在预分配文件1中的位置信息。
由于待存储数据的数据标识,待存储数据对应的身份信息,目标预分配文件的文件标识,待存储数据在目标预分配文件中的位置信息,均属于结构化数据,因此,可以将上述信息存储在数据库文件中,从而便于检索和更新。
针对待存储数据对应的身份信息,假设待存储数据是针对用户A的待存储数据,则身份信息是指用户A的身份信息,对此身份信息不做限制,只要基于身份信息能够正确识别用户A即可,如手机号码、身份证号码、姓名、住址等。
示例性的,可以创建针对待存储图像的数据库文件和针对待存储特征模型的数据库文件。待存储图像的数据库文件,用于记录与待存储图像有关的内容,待存储特征模型的数据库文件,用于记录与待存储特征模型有关的内容。
参见图5所示,为预分配文件分配过程的示意图,该过程可以包括:
步骤501,获取数据信息,该数据信息包括待存储数据(如待存储图像或者待存储特征模型),待存储数据的数据标识,待存储数据所属集合的集合标识。
步骤502,判断是否存在与该集合标识对应的预分配文件。
如果是,则可以执行步骤503,如果否,则可以执行步骤506。
步骤503,判断与该集合标识对应的预分配文件中,是否存在使用类型与待存储数据匹配的预分配文件。如果是,执行步骤504,如果否,执行步骤506。
例如,若与该集合标识对应的预分配文件的使用类型为图像类型,待存储数据为待存储图像,则该预分配文件的使用类型与待存储图像匹配;或者,若与该集合标识对应的预分配文件的使用类型为图像类型,待存储数据为待存储特征模型,则该预分配文件的使用类型与待存储特征模型不匹配。
步骤504,从使用类型与待存储数据匹配的预分配文件的索引区域中,读取该预分配文件的文件状态,该文件状态可以为使用状态或已满状态。若该文件状态为使用状态,则执行步骤505;若该文件状态为已满状态,则执行步骤506。
步骤505,将文件状态为使用状态的预分配文件(即使用类型与待存储数据匹配的预分配文件)确定为待存储数据的目标预分配文件,然后执行步骤508。
步骤506,从多个预分配文件中获取文件状态为空闲状态的预分配文件。
示例性的,可以将该预分配文件确定为该集合标识对应的预分配文件,并将该预分配文件的文件状态设置为使用状态,并将该预分配文件的使用类型设置为与待存储数据匹配的使用类型。例如,若该待存储数据为待存储图像,则可以将该预分配文件的使用类型设置为图像类型;若该待存储数据为待存储特征模型,则可以将该预分配文件的使用类型设置为特征模型类型。
步骤507,将获取的预分配文件(即文件状态为空闲状态的预分配文件)确定为待存储数据的目标预分配文件,然后执行步骤508。
步骤508,从目标预分配文件的多个存储区域中选择未被占用的目标存储区域。示例性的,目标存储区域可以包括头信息域和数据域。
步骤509,将待存储数据存储到目标存储区域的数据域,并将待存储数据的数据标识存储到该目标存储区域的头信息域,至此,完成数据存储过程。
在一种可能的实施方式中,还可以将预分配文件的管理信息缓存在内存中,并通过预分配文件的管理信息进行文件分配。预分配文件的管理信息可以在内存中实时更新,且预分配文件的管理信息可以定期写入到索引区域中。
示例性的,可以启动线程对预分配文件进行整理回收,避免空间浪费和空间不足。参见图6所示,为预分配文件回收过程的示意图,该过程可以包括:
步骤601,当从预分配文件中删除已存储数据时,可以从该预分配文件的索引区域中读取剩余已存储数据的数量和数据总数量。
例如,当从预分配文件中删除已存储数据时,触发预分配文件回收过程。当然,从预分配文件中删除已存储数据只是一个示例,还可以采用其它触发条件,如定期触发预分配文件回收过程,对此触发条件不做限制。
步骤602,根据剩余已存储数据的数量和数据总数量,确定该预分配文件是否符合回收条件。如果是,执行步骤603,如果否,不对该预分配文件执行回收操作,等到下次从预分配文件中删除已存储数据时,继续执行步骤601。
示例性的,若剩余已存储数据的数量与数据总数量的比例大于预设阈值(可以根据经验配置,如50%),则预分配文件不符合回收条件;若剩余已存储数据的数量与数据总数量的比例不大于预设阈值,则预分配文件符合回收条件。
步骤603,将该预分配文件记录为开始整理状态。在预分配文件为开始整理状态时,不再通过该预分配文件执行读写操作,表示该预分配文件正在回收。
步骤604,从多个预分配文件中确定剩余已存储数据的迁移预分配文件。
示例性的,迁移预分配文件的确定过程可以参见步骤502-步骤507,例如,基于剩余已存储数据所属集合的集合标识,剩余已存储数据的类型(如图像类型或者特征模型类型),可以执行步骤502-步骤507,最终得到目标预分配文件,而步骤604中,将剩余已存储数据的目标预分配文件记为迁移预分配文件。
步骤605,将剩余已存储数据迁移到该迁移预分配文件。
示例性的,可以从迁移预分配文件的多个存储区域中选择未被占用的目标存储区域,并将剩余已存储数据存储到目标存储区域的数据域,并将剩余已存储数据的数据标识存储到目标存储区域的头信息域。
步骤606,确定剩余已存储数据在迁移预分配文件中的位置信息。
例如,剩余已存储数据在迁移预分配文件中的位置信息可以为位置信息A,该位置信息A可以包括偏移起始位置和偏移长度等内容。
步骤607,利用剩余已存储数据的数据标识,从数据库文件中查询与该数据标识对应的表项,利用位置信息A对该表项中的位置信息进行更新。
例如,数据库文件的每个表项,用于记录数据标识,身份信息,预分配文件的文件标识,数据在目标预分配文件中的位置信息之间的映射关系,基于此,可以利用剩余已存储数据的数据标识,从数据库文件中查询到与该数据标识对应的表项,然后,利用位置信息A替换该表项中的位置信息。
步骤608,将该预分配文件回收为文件状态为空闲状态的预分配文件。
示例性的,可以对数据库文件、图像和特征模型进行分离存储,参见图7所示,为数据库文件、图像和特征模型的存储过程的示意图,该过程可以包括:
步骤701,获取待存储图像,并获取用于存储待存储图像的预分配文件,即预分配文件的使用类型与待存储图像匹配,具体过程参见上述实施例。
步骤702,将待存储图像存储到该预分配文件。
步骤703,确定待存储图像在该预分配文件中的位置信息。
步骤704,将待存储图像的数据标识,待存储图像对应的身份信息,该预分配文件的文件标识,待存储图像在预分配文件中的位置信息记录到数据库文件。
例如,上述内容可以记录到针对待存储图像的数据库文件中。
步骤705,获取待存储特征模型,并获取用于存储待存储特征模型的预分配文件,即预分配文件的使用类型与待存储特征模型匹配。
步骤706,将待存储特征模型存储到该预分配文件。
步骤707,确定待存储特征模型在该预分配文件中的位置信息。
步骤708,将待存储特征模型的数据标识,待存储特征模型对应的身份信息,该预分配文件的文件标识,该位置信息记录到数据库文件。
例如,上述内容可以记录到针对待存储特征模型的数据库文件中。
在上述实施例中,预分配文件采用头信息域和数据域的方式进行存储,这种存储结构能够实现:待存储图像和待存储特征模型可以复用该存储结构;在进行特征比对时,可以将该存储结构中存储的数据,直接从磁盘加载到内存中。示例性的,上述方式能够避免频繁写磁盘,文件索引信息在内存中实时更新,定期写入存储介质中,开机时再利用数据库统计校正一次。
在一种可能的实施方式中,在进行特征比对时,可以将预分配文件中的特征模型加载到内存中,然后,将待检测特征与内存中的特征模型进行特征比对,对此特征比对过程不做限制,可以采用传统的特征比对方式。
基于与上述方法同样的申请构思,本申请实施例中还提出一种数据存储装置,如图8所示,为所述数据存储装置的结构图,所述装置包括:
获取模块81,用于获取数据信息,所述数据信息包括待存储数据和所述待存储数据的数据标识;其中,所述待存储数据为待存储图像或者待存储特征模型;确定模块82,用于从已创建的多个预分配文件中确定所述待存储数据的目标预分配文件,所述目标预分配文件包括多个存储区域,每个存储区域均包括头信息域和数据域;选择模块83,用于从所述目标预分配文件的多个存储区域中选择未被占用的目标存储区域;存储模块84,用于将所述待存储数据存储到所述目标存储区域的数据域,并将所述待存储数据的数据标识存储到所述目标存储区域的头信息域。
示例性的,所述数据信息还包括待存储数据所属集合的集合标识,所述确定模块82从已创建的多个预分配文件中确定所述待存储数据的目标预分配文件时具体用于:从所述多个预分配文件中获取所述集合标识对应的预分配文件,并将所述集合标识对应的预分配文件确定为所述待存储数据的目标预分配文件。
所述确定模块82从所述多个预分配文件中获取所述集合标识对应的预分配文件时具体用于:若所述多个预分配文件中已存在所述集合标识对应的预分配文件,且所述集合标识对应的预分配文件的文件状态为已满状态,或者,所述多个预分配文件中不存在所述集合标识对应的预分配文件,则
从所述多个预分配文件中获取文件状态为空闲状态的预分配文件,并将获取的预分配文件确定为所述集合标识对应的预分配文件。
示例性的,针对所述多个预分配文件中的每个预分配文件,该预分配文件包括索引区域,所述索引区域包括该预分配文件的文件状态;其中,所述文件状态为使用状态,或已满状态,或空闲状态。
示例性的,所述目标预分配文件还包括索引区域,所述选择模块83从所述目标预分配文件的多个存储区域中选择未被占用的目标存储区域时具体用于:
若所述索引区域包括所述目标预分配文件中已被占用的存储区域的第一地址信息,所述第一地址信息表示已被占用的最后位置,则根据所述第一地址信息从所述目标预分配文件的多个存储区域中选择未被占用的目标存储区域。
所述确定模块82还用于:将所述待存储数据存储到所述目标存储区域的数据域之后,确定所述待存储数据在所述目标预分配文件中的位置信息;所述存储模块84还用于:将所述待存储数据的数据标识,所述待存储数据对应的身份信息,所述目标预分配文件的文件标识和所述位置信息,存储到数据库文件中。
所述确定模块82还用于:将所述待存储数据存储到所述目标存储区域的数据域后,当从所述目标预分配文件中删除已存储数据时,根据所述目标预分配文件中的剩余已存储数据的数量,确定所述目标预分配文件是否符合回收条件;所述存储模块84还用于:如果所述确定模块82确定,则所述目标预分配文件符合回收条件,则将所述剩余已存储数据迁移到迁移预分配文件。
所述目标预分配文件还包括索引区域,所述索引区域包括所述目标预分配文件中的剩余已存储数据的数量,所述目标预分配文件的数据总数量;
所述确定模块82根据所述目标预分配文件中的剩余已存储数据的数量,确定所述目标预分配文件是否符合回收条件时具体用于:从所述索引区域中获取所述剩余已存储数据的数量和所述数据总数量;若所述剩余已存储数据的数量与所述数据总数量的比例大于预设阈值,则确定所述目标预分配文件不符合回收条件;若所述剩余已存储数据的数量与所述数据总数量的比例不大于预设阈值,则确定所述目标预分配文件符合回收条件。
基于与上述方法同样的申请构思,本申请实施例中还提出一种数据存储设备,本申请实施例提供的数据存储设备,从硬件层面而言,数据存储设备的硬件架构示意图可以参见图9所示。数据存储设备可以包括:处理器91和机器可读存储介质92,所述机器可读存储介质92存储有能够被所述处理器91执行的机器可执行指令;所述处理器91用于执行机器可执行指令,以实现本申请上述示例公开的方法。例如,处理器91用于执行机器可执行指令,以实现如下步骤:
获取数据信息,所述数据信息包括待存储数据和待存储数据的数据标识;其中,所述待存储数据为待存储图像或者待存储特征模型;
从已创建的多个预分配文件中确定所述待存储数据的目标预分配文件,所述目标预分配文件包括多个存储区域,每个存储区域均包括头信息域和数据域;
从所述目标预分配文件的多个存储区域中选择未被占用的目标存储区域;
将所述待存储数据存储到所述目标存储区域的数据域,并将所述待存储数据的数据标识存储到所述目标存储区域的头信息域。
基于与上述方法同样的申请构思,本申请实施例还提供一种机器可读存储介质,其中,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被处理器执行时,能够实现本申请上述示例公开的方法。
例如,所述计算机指令被处理器执行时,能够实现如下步骤:
获取数据信息,所述数据信息包括待存储数据和待存储数据的数据标识;其中,所述待存储数据为待存储图像或者待存储特征模型;
从已创建的多个预分配文件中确定所述待存储数据的目标预分配文件,所述目标预分配文件包括多个存储区域,每个存储区域均包括头信息域和数据域;
从所述目标预分配文件的多个存储区域中选择未被占用的目标存储区域;
将所述待存储数据存储到所述目标存储区域的数据域,并将所述待存储数据的数据标识存储到所述目标存储区域的头信息域。
示例性的,上述机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
- 上一篇:石墨接头机器人自动装卡簧、装栓机
- 下一篇:一种数据存储方法和系统