一种存储和读取数据的方法及设备与流程

文档序号:12034635阅读:160来源:国知局
一种存储和读取数据的方法及设备与流程

本公开内容涉及网络通信技术领域,特别涉及一种存储和读取数据的方法及设备。



背景技术:

随着计算机及网络技术的发展,数据的种类日益增多,对于不同种类的数据,需要采取合理的存储方法。目前,通常采用集合、数据表和数据库等形式存储数据。

在通过集合或数据表存储该数据时,存在一种大记录数小数据体的数据模型,该集合或数据表中的记录数非常多,通常是亿级甚至是十亿级,但是集合中的每一个元素或者数据表中的每一条记录对应的数据信息占用的存储空间非常小。例如,一个数据表中保存的是用户状态,此数据表就为大记录数小数据体,该数据表中的记录数为所有用户,则记录数非常多,而记录的数据为每一个用户对应的用户状态,每一条记录占用的存储空间非常小。

目前,在存储大记录数小数据体时,采用hash(哈希)结构进行存储,形如:<数据标识,数据内容>。即在存储该数据时,需要将数据标识和数据内容同时存储。由于对于大记录数小数据体而言,数据内容占用的存储空间非常小,一般使用bit(比特)存储,而数据标识一般占用4-8字节的存储空间,因此存储数据标识占用的存储空间远远大于存储数据内容占用的存储空间,从而造成了存储空间的浪费。

综上所述,目前存储数据的方法造成存储空间的浪费。



技术实现要素:

本公开内容提供一种存储和读取数据的方法及设备,用以解决现有技术的存储数据的方法造成存储空间的浪费的问题。

基于上述问题,本公开内容实施例提供一种存储数据的方法,包括:

确定需要存储的数据的标识id;

对所述数据的id进行运算处理,确定所述数据对应的存储索引信息;

将所述数据的数据内容存储到数据表中所述存储索引信息对应的存储位置上;

其中,所述数据表的结构为二维数组结构。

由于本公开内容实施例根据需要存储的数据的id,确定该数据对应的存储索引信息,根据确定的存储索引信息,将该数据的数据内容存储到数据表中,在将数据存储到数据表时,只需要存储该数据的内容,不需要存储数据的id,从而有效的减少了存储数据需要的内存空间。

可选的,所述根据所述存储索引信息,将所述数据的数据内容存储到数据表中之前,还包括:

根据所述数据的id,确定所述数据为热点数据。

由于本公开内容实施例在二维数组结构的数据表只存储热点数据,不存储非热点数据,从而有效减小存储空间的浪费,并且在调用该数据表时,由于数据表占用内存较小,使得效率更高。

可选的,所述数据对应的存储索引信息包括所述数据对应的数组位置、所述数据对应的在数组中的元素位置、所述数据在元素中的起始位;

所述对所述数据的id进行运算处理,确定所述数据对应的存储索引信息,包括:

根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的数组位置和在数组中的元素位置;

根据所述l,以及所述数据的id,确定所述数据在元素中的起始位;

其中,所述n为所述数据表中每个数组包括的元素个数;

所述l为所述数据表中每个元素存储数据的个数,并且所述l为h的约数,所述h为一个元素的位数;

所述n、l和h为正整数。

由于本公开内容实施例在二维数组结构的数据表存储数据时,只存储数据的内容,而数据的id作为确定数据在数据对应的存储索引信息的计算参数,根据数据对应的存储索引信息将数据的数据内容存储到数据表中,不需要将数据的id存储在二维数组结构的数据表,从而最大限度的减小内存。

可选的,所述根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的数组位置,包括:

根据所述n和所述l,对所述数据的id进行除法运算,并将所述除法运算后的商值进行取整运算,确定所述数据对应的数组位置;

所述根据所述数据表的参数信息中的n和l,以及所述数据的id,确定所述数据对应的在数组中的元素位置,包括:

根据所述n和所述l,对所述数据的id进行取模运算和取整运算,确定所述数据对应的在数组中的元素位置;

所述根据所述l,以及所述数据的id,确定所述数据在元素中的起始位,包括:

根据所述l,对所述数据的id进行取模运算,确定所述数据在元素中的起始位。

可选的,所述根据所述n和所述l,对所述数据的id进行除法运算,并将所述除法运算后的商值进行取整运算,确定所述数据对应的数组位置,包括:

将所述数据的id除以m,并将得到的商值进行向上取整运算;

根据所述取整运算后得到的数值,确定所述数据对应的数组位置;

其中,所述m为所述n与所述l的乘积;

所述根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的在数组中的元素位置,包括:

将所述数据的id与所述m进行取模运算,并将所述取模运算后得到的数值除以所述l,将得到的商值进行向上取整运算;

根据所述向上取整运算后得到的数值,确定所述数据对应的在数组中的元素位置;

其中,所述m为所述n与所述l的乘积;

所述根据所述l,对所述数据的id进行取模运算,确定所述数据在元素中的起始位,包括:

将所述数据的id与所述l进行取模运算,确定所述数据在元素中的数据位置;

根据所述数据在元素中的所述数据位置,以及所述数据在元素中占用的位数,确定所述数据在元素中的起始位。

由于本公开内容实施例的数据对应的存储索引信息包括数据对应的数组位置、数据对应的在数组中的元素位置、数据在元素中的起始位。并提供了根据数据的id,以及二维数组结构的数据表的参数,确定数据对应的存储索引信息的计算方式,保证了数据表中数据的id与数据内容的一一对应。

可选的,所述数据对应的存储索引信息还包括所述数据在元素中的结束位;

根据所述l,以及所述数据的id,确定所述数据在元素中的结束位。

可选的,所述根据所述l,以及所述数据的id,确定所述数据在元素中的结束位,包括:

根据所述数据的id与所述l进行取模运算后的数值,确定所述数据在元素中的数据位置;

根据所述数据在元素中的数据位置,确定与所述数据相邻且位于所述数据位置之后的目标数据在元素中的起始位;

根据所述目标数据在元素中的起始位,确定所述数据在元素中的结束位。

由于本公开内容实施例的数据对应的存储索引信息还包括数据在元素中的结束位。并提供了根据数据的id,以及二维数组结构的数据表的参数,确定数据在元素中的结束位的计算方式,从而更加准确的根据数据对应的存储索引信息存储数据,保证了数据表中数据的id与数据内容的一一对应。

基于上述问题,本公开内容实施例提供一种读取数据的方法,包括:

确定需要读取的数据的标识id;

对所述数据的id进行运算处理,确定所述数据对应的存储索引信息;

从数据表中所述存储索引信息对应的存储位置上读取所述数据的数据内容;

其中,所述数据表的结构为二维数组结构。

由于本公开内容实施例在读取数据时,只需要根据确定的需要读取数据的id,以及该数据对应的存储索引信息,就能够快速读取到数据表中该存储索引信息对应的数据内容,从而实现在占用很小内存的情况下,准确读取数据。

可选的,所述从数据表中所述存储索引信息对应的存储位置上读取所述数据的数据内容之前,还包括:

根据所述数据的id,确定所述数据为热点数据。

由于本公开内容实施例二维数组结构的数据表中存储有热点数据,在读取数据时,热点数据能够通过该数据表读取,由于该数据表占用内存很小,从而提高读取数据的效率。

可选的,所述数据对应的存储索引信息包括所述数据对应的数组位置、所述数据对应的在数组中的元素位置、所述数据在元素中的起始位;

所述对所述数据的id进行运算处理,确定所述数据对应的存储索引信息,包括:

根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的数组位置和在数组中的元素位置;

根据所述l,以及所述数据的id,确定所述数据在元素中的起始位;

其中,所述n为所述数据表中每个数组包括的元素个数;

所述l为所述数据表中每个元素存储数据的个数,并且所述l为h的约数,所述h为一个元素的位数;

所述n、l和h为正整数。

由于本公开内容实施例在二维数组结构的数据表存储数据时,只存储数据的内容,而数据的id作为确定数据在数据对应的存储索引信息的计算参数,根据数据对应的存储索引信息将数据的数据内容存储到数据表中,不需要将数据的id存储在二维数组结构的数据表,从而最大限度的减小内存。

可选的,所述根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的数组位置,包括:

根据所述n和所述l,对所述数据的id进行除法运算,并将所述除法运算后的商值进行取整运算,确定所述数据对应的数组位置;

所述根据所述数据表的参数信息中的n和l,以及所述数据的id,确定所述数据对应的在数组中的元素位置,包括:

根据所述n和所述l,对所述数据的id进行取模运算和取整运算,确定所述数据对应的在数组中的元素位置;

所述根据所述l,以及所述数据的id,确定所述数据在元素中的起始位,包括:

根据所述l,对所述数据的id进行取模运算,确定所述数据在元素中的起始位。

可选的,所述根据所述n和所述l,对所述数据的id进行除法运算,并将所述除法运算后的商值进行取整运算,确定所述数据对应的数组位置,包括:

将所述数据的id除以m,并将得到的商值进行向上取整运算;

根据所述取整运算后得到的数值,确定所述数据对应的数组位置;

其中,所述m为所述n与所述l的乘积;

所述根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的在数组中的元素位置,包括:

将所述数据的id与所述m进行取模运算,并将所述取模运算后得到的数值除以所述l,将得到的商值进行向上取整运算;

根据所述向上取整运算后得到的数值,确定所述数据对应的在数组中的元素位置;

其中,所述m为所述n与所述l的乘积;

所述根据所述l,对所述数据的id进行取模运算,确定所述数据在元素中的起始位,包括:

将所述数据的id与所述l进行取模运算,确定所述数据在元素中的数据位置;

根据所述数据在元素中的所述数据位置,以及所述数据在元素中占用的位数,确定所述数据在元素中的起始位。

由于本公开内容实施例的数据对应的存储索引信息包括数据对应的数组位置、数据对应的在数组中的元素位置、数据在元素中的起始位。并提供了根据数据的id,以及二维数组结构的数据表的参数,确定数据对应的存储索引信息的计算方式,保证了数据表中数据的id与数据内容的一一对应。

可选的,所述数据对应的存储索引信息还包括所述数据在元素中的结束位;

根据所述l,以及所述数据的id,确定所述数据在元素中的结束位。

可选的,所述根据所述l,以及所述数据的id,确定所述数据在元素中的结束位,包括:

根据所述数据的id与所述l进行取模运算后的数值,确定所述数据在元素中的数据位置;

根据所述数据在元素中的数据位置,确定与所述数据相邻且位于所述数据位置之后的目标数据在元素中的起始位;

根据所述目标数据在元素中的起始位,确定所述数据在元素中的结束位。

由于本公开内容实施例的数据对应的存储索引信息还包括数据在元素中的结束位。并提供了根据数据的id,以及二维数组结构的数据表的参数,确定数据在元素中的结束位的计算方式,从而更加准确的根据数据对应的存储索引信息存储数据,保证了数据表中数据的id与数据内容的一一对应。

另一方面,本公开内容实施例还提供一种存储数据的设备,包括:

第一确定模块,用于确定需要存储的数据的标识id;

第一处理模块,用于对所述数据的id进行运算处理,确定所述数据对应的存储索引信息;

第一控制模块,用于将所述数据的数据内容存储到数据表中所述存储索引信息对应的存储位置上;其中,所述数据表的结构为二维数组结构。

可选的,所述第一控制模块,还用于:

根据所述数据的id,确定所述数据为热点数据。

可选的,所述数据对应的存储索引信息包括所述数据对应的数组位置、所述数据对应的在数组中的元素位置、所述数据在元素中的起始位;

所述第一处理模块,具体用于:

根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的数组位置和在数组中的元素位置;根据所述l,以及所述数据的id,确定所述数据在元素中的起始位;其中,所述n为所述数据表中每个数组包括的元素个数;所述l为所述数据表中每个元素存储数据的个数,并且所述l为h的约数,所述h为一个元素的位数;所述n、l和h为正整数。

可选的,所述第一处理模块,具体用于:

根据所述n和所述l,对所述数据的id进行除法运算,并将所述除法运算后的商值进行取整运算,确定所述数据对应的数组位置;根据所述n和所述l,对所述数据的id进行取模运算和取整运算,确定所述数据对应的在数组中的元素位置;根据所述l,对所述数据的id进行取模运算,确定所述数据在元素中的起始位。

可选的,所述第一处理模块,具体用于:

将所述数据的id除以m,并将得到的商值进行向上取整运算;根据所述取整运算后得到的数值,确定所述数据对应的数组位置;其中,所述m为所述n与所述l的乘积;

将所述数据的id与所述m进行取模运算,并将所述取模运算后得到的数值除以所述l,将得到的商值进行向上取整运算;根据所述向上取整运算后得到的数值,确定所述数据对应的在数组中的元素位置;其中,所述m为所述n与所述l的乘积;

将所述数据的id与所述l进行取模运算,确定所述数据在元素中的数据位置;根据所述数据在元素中的所述数据位置,以及所述数据在元素中占用的位数,确定所述数据在元素中的起始位。

可选的,所述数据对应的存储索引信息还包括所述数据在元素中的结束位;

所述第一处理模块,具体用于:

根据所述l,以及所述数据的id,确定所述数据在元素中的结束位。

可选的,所述第一处理模块,具体用于:

根据所述数据的id与所述l进行取模运算后的数值,确定所述数据在元素中的数据位置;根据所述数据在元素中的数据位置,确定与所述数据相邻且位于所述数据位置之后的目标数据在元素中的起始位;根据所述目标数据在元素中的起始位,确定所述数据在元素中的结束位。

另一方面,本公开内容实施例还提供一种读取数据的设备,包括:

第二确定模块,用于确定需要读取的数据的标识id;

第二处理模块,用于对所述数据的id进行运算处理,确定所述数据对应的存储索引信息;

第二控制模块,用于从数据表中所述存储索引信息对应的存储位置上读取所述数据的数据内容;其中,所述数据表的结构为二维数组结构。

可选的,所述第二控制模块,还用于:

根据所述数据的id,确定所述数据为热点数据。

可选的,所述数据对应的存储索引信息包括所述数据对应的数组位置、所述数据对应的在数组中的元素位置、所述数据在元素中的起始位;

所述第二处理模块,具体用于:

根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的数组位置和在数组中的元素位置;根据所述l,以及所述数据的id,确定所述数据在元素中的起始位;其中,所述n为所述数据表中每个数组包括的元素个数;所述l为所述数据表中每个元素存储数据的个数,并且所述l为h的约数,所述h为一个元素的位数;所述n、l和h为正整数。

可选的,所述第二处理模块,具体用于:

根据所述n和所述l,对所述数据的id进行除法运算,并将所述除法运算后的商值进行取整运算,确定所述数据对应的数组位置;根据所述n和所述l,对所述数据的id进行取模运算和取整运算,确定所述数据对应的在数组中的元素位置;根据所述l,对所述数据的id进行取模运算,确定所述数据在元素中的起始位。

可选的,所述第二处理模块,具体用于:

将所述数据的id除以m,并将得到的商值进行向上取整运算;根据所述取整运算后得到的数值,确定所述数据对应的数组位置;其中,所述m为所述n与所述l的乘积;

将所述数据的id与所述m进行取模运算,并将所述取模运算后得到的数值除以所述l,将得到的商值进行向上取整运算;根据所述向上取整运算后得到的数值,确定所述数据对应的在数组中的元素位置;其中,所述m为所述n与所述l的乘积;

将所述数据的id与所述l进行取模运算,确定所述数据在元素中的数据位置;根据所述数据在元素中的所述数据位置,以及所述数据在元素中占用的位数,确定所述数据在元素中的起始位。

可选的,所述数据对应的存储索引信息还包括所述数据在元素中的结束位;

所述第二处理模块,具体用于:

根据所述l,以及所述数据的id,确定所述数据在元素中的结束位。

可选的,所述第二处理模块,具体用于:

根据所述数据的id与所述l进行取模运算后的数值,确定所述数据在元素中的数据位置;根据所述数据在元素中的数据位置,确定与所述数据相邻且位于所述数据位置之后的目标数据在元素中的起始位;根据所述目标数据在元素中的起始位,确定所述数据在元素中的结束位。

附图说明

图1为本公开内容实施例存储数据方法的流程图;

图2为本公开内容实施例二维数组结构的数据表的结构示意图;

图3为本公开内容实施例存储用户状态的数据表的结构示意图;

图4为本公开内容实施例读取数据方法的流程图;

图5为本公开内容实施例存储数据设备的结构示意图;

图6为本公开内容实施例读取数据设备的结构示意图。

具体实施方式

本公开内容实施例确定需要存储的数据的id(identification,标识);对所述数据的id进行运算处理,确定所述数据对应的存储索引信息;将所述数据的数据内容存储到数据表中所述存储索引信息对应的存储位置上;其中,所述数据表的结构为二维数组结构。由于本公开内容实施例根据需要存储的数据的id,确定该数据对应的存储索引信息,根据确定的存储索引信息,将该数据的数据内容存储到数据表中,在将数据存储到数据表时,只需要存储该数据的内容,不需要存储数据的id,从而有效的减少了存储数据需要的内存空间。

本公开内容实施例可以应用在有多个数据中心为用户提供服务的场景。在该场景中包括一个重要的组成部分就是记录用户到其最近数据中心的映射关系,又可以称为路由表,用于支持用户的就近服务,让用户访问其最近的数据中心。

由于路由表需要在应用程序的各层中使用,因此每个数据中心在工作时都需要持续的调用该路由表。采用现有的储存数据的方法存储该路由表,使得该路由表占用的内存空间很大,不便于在每个数据中心都存储该路由表。现有技术将路由表存储在远程的集中式服务器或者远程的数据库服务器中,在需要使用路由表时,由使用路由表的应用程序通过网络调用路由表读取用户与数据中心的对应关系。通过网络调用获取路由表信息的方式,由于天然的网络延时,降低系统的性能。

然而在多个数据中心为用户提供服务的场景中,使用本公开内容实施例提供的存储数据的方法,根据用户id确定用户对应的归属数据中心,这种存储每个用户对应的归属数据中心信息的方式,极大地减小占用内存,从而能够直接在数据中心中存储每个用户对应的归属数据中心信息,提高了数据中心的使用性能。

下面结合说明书附图对本公开内容实施例作进一步详细描述。

如图1所示,本公开内容实施例一种存储数据的方法,包括:

步骤101、确定需要存储的数据的标识id;

步骤102、对所述数据的id进行运算处理,确定所述数据对应的存储索引信息;

步骤103、将所述数据的数据内容存储到数据表中所述存储索引信息对应的存储位置上;其中,所述数据表的结构为二维数组结构。

本公开内容实施例的数据包括数据的id和数据的内容,其中每一个数据的内容占用的存储空间非常小,以bit为单位进行存储。

本公开内容实施例的数据的id为十进制数。例如,在数的id为用户id时,用户id可以为10、122、2000等形式的数值。

本公开内容实施例的数据表采用二维数组结构,并且该二维数组结构可以是二维字节数组结构。该二维数组结构的数据表第一维为定长的数组,并且每个定长的数组包括的n个元素;每个元素中存储数据的个数为l,若h为一个元素的位数,则l为h的约数。

本公开内容实施例的数据表的参数信息包括:数据表的数组个数m、每个数组中的元素个数n和每个元素中可以存储的数据个数l。

具体的,本公开内容实施例二维数组结构的数据表可以采用二位字节数组结构的数据表,如图2所示,其中,该二维字节数组结构的第一维为定长的字节数组,将其命名为slot(桶),其中每一个字节数组包括n个字节(byte);该二维字节数组结构的第二维为定长的slot指针数组,将slot指针数组的个数标记为m;由于本公开内容每一个数据的内容占用的存储空间非常小,在二维字节数组结构的数据表中,每一个字节可以存储l个数据的内容。

本公开内容实施例二维数组结构的数据表中每一个数组包括n个元素,其中n是根据对需要存储的数据的分析,最大限度的减小该数据表在使用过程中占用的内存,合理的确定n的值。

本公开内容实施例中每一个元素可以存储l个数据,其中l是由需要存储的数据的内容决定的。例如,数据表中需要存储用户状态,则根据用户id确定该用户的数据存储在数据表中的位置,将该用户对应的用户状态存储在该数据表中的位置,而用户的状态采用“0”或“1”表示,“1”表示用户在线,“0”表示用户离线,而且每一个用户的状态只占用一位,则该数据表中每一个元素可以存储8个用户的用户状态,此时l=8。

本公开内容实施例二维数组结构的数据表中数组的个数标记为m,其中m的个数是由该数据表需要存储的总的数据个数决定的,在n和l确定后,根据总的数据个数确定m的取值。在二维数组结构的数据表的n、m和l三个数值确定后,则该数据表能够存储的数据的总的个数为n*m*l。例如,数据表需要存储的总的数据个数为10000,其中二维数组结构的数据表的n=50,l=4,此时,确定m的值不小于50。

可选的,本公开内容实施例根据所述数据的id,确定所述数据为热点数据。

本公开内容实施例中热点为一个集合中只有部分元素是活跃的或常常被使用的。例如,数据库系统中存储的数据,只有其中一部分会被经常读写,这一部分数据就是这个数据库系统的热点。

并且,热点大多以呈现局部集中,全局离散的形式分布。

本公开内容实施例在对数据进行存储时,根据对该数据的热点区域识别,将需要存数的数据分为热点数据和非热点数据。针对热点数据,本公开内容实施例采用下面的方式进行存储。

具体的,本公开内容实施例在对热点数据进行存储时,具体可以采用下列两种方式。

方式一、根据确定的热点区域,获取热点区域的数据进行存储。

本公开内容实施例针对需要存储的所有数据,对所有数据进行热点区域识别,将对热点区域的识别结果以数据id的形式呈现。

例如,需要存储的一组数据的id范围为1-2000,经过对需要存储的一组数据进行热点区域识别,需要存储的一组数据的热点数据呈现如下状态:

局部热点1:数据的id范围为100-105;

局部热点2:数据的id范围为300-400;

局部热点3:数据的id范围为1000-1099;

局部热点4:数据的id范围为1500-1700。

以上述例子为例,在对上述的一组数据进行存储时,分别读取局部热点1、局部热点2、局部热点3和局部热点4中的每一个数据的id对应的数据,将该数据的内容存储到数据表中。

方式二、读取每一个需要存储的数据,根据该数据的id确定该数据是否为热点数据,若是热点数据,则将该数据存储在数据表中。

本公开内容实施例针对需要存储的所有数据,对所有数据进行热点区域识别,将对热点区域的识别结果以数据id的形式呈现。在得到所有数据中的热点区域后,依次确定每一数据是否为热点数据,若是热点数据,则将该数据存储在数据表中;若不是热点数据,则不对该数据进行存储。

例如,需要存储的一组数据的id范围为1-2000,经过对需要存储的一组数据进行热点区域识别,需要存储的一组数据的热点数据呈现如下状态:

局部热点1:数据的id范围为100-105;

局部热点2:数据的id范围为300-400;

局部热点3:数据的id范围为1000-1099;

局部热点4:数据的id范围为1500-1700。

以上述例子为例,在对上述的一组数据进行存储时,根据数据id,依次获取每一个数据,并根据上述热点区域判断获取的数据是否为热点数据,若是,则存储到数据表中,若不是,则不进行存储。比如,获取数据的id为20的数据,根据热点区域判断数据id为20的数据不是热点数据,则不存储数据id为20的数据;又比如,获取的数据的id为255,根据热点区域判断数据id为255的数据是热点数据,则将数据id为255的数据存储到数据表中。

由于本公开内容实施例的二维数组结构的数据表包括m个定长的数组,每个数组包括n个元素,每个元素又可以存储l个数据。因此,在根据数据的id确定数据在数据表中的存储位置时,需要确定该数据对应的数组位置,在数组中的元素位置,以及该数据在元素中的起始位和结束位。

本公开内容实施例的数据对应的存储索引信息包括数据对应的数组位置、所述数据对应的在数组中的元素位置、所述数据在元素中的起始位、所述数据在元素中的结束位。

其中,数据对应的存储索引信息即为数据在数据表中的存储位置。

本公开内容实施例采用a表示数据对应的数组位置,采用c表示数据对应的在数组中的元素位置,采用d1表示该数据在元素中的起始位,以及采用d2表示该数据在元素中的结束位。

本公开内容实施例数据对应的数组位置为a,表示数据对应的存储位置为数据表中第a个数组;数据对应的在数组中的元素位置为c,表示数据对应的存储位置为数据表中数组中第c个元素;数据在元素中的起始位为d1,结束位为d2,表示数据对应的存储位置为数据表元素中从第d1位开始,到第d2位结束。

下面具体说明确定数据对应的数组位置、在数组中的元素位置、该数据在元素中的起始位和结束位的方法。

一、根据下列方式确定数据对应的数组位置。

根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的数组位置。

可选的,根据所述n和所述l,对所述数据的id进行除法运算,并将所述除法运算后的商值进行取整运算,确定所述数据对应的数组位置;

具体的计算方式为:

将所述数据的id除以m,并将得到的商值进行向上取整运算;根据所述取整运算后得到的数值,确定所述数据对应的数组位置;其中,所述m为所述n与所述l的乘积。

具体的,采用下列公式一确定所述数据对应的数组位置:

公式一中,a为所述数据对应的数组位置,x为所述数据的id,表示向上取整操作。

例如,一组记录用户与其归属的数据中心的绑定关系的用户数据,其中数据的id为用户id,数据的内容为用户归属的数据中心。假设,用户id的范围为1-2000,局部热点1:用户id范围为100-105;局部热点2:用户id范围为300-400;局部热点3:用户id范围为1000-1099;局部热点4:用户id范围为1500-1700。用于存储用户与其归属的数据中心的绑定关系的二维数组结构的数据表,该数据表的参数信息为:m=50,n=20,l=2;即该数据表共包括50个数组,每个数组包括20个元素,其中每一个元素可以存储两个用户数据。在确定用户id为100的用户数据在数据表中对应的存储位置时,根据公式一计算用户id为100的用户数据在数据表中对应的数组位置则确定用户id为100的用户数据的数据内容存储在数据表的第三个数组中。

二、根据下列方式确定数据对应的在数组中的元素位置。

根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的在数组中的元素位置。

可选的,根据所述n和所述l,对所述数据的id进行取模运算和取整运算,确定所述数据对应的在数组中的元素位置。

具体的计算方式为:

将所述数据的id与所述m进行取模运算,并将所述取模运算后得到的数值除以所述l,将得到的商值进行向上取整运算;根据所述向上取整运算后得到的数值,确定所述数据对应的在数组中的元素位置;其中,所述m为所述n与所述l的乘积。

具体的,采用下列公式二确定所述数据对应的在数组中的元素位置:

公式二中,b=x%(n*l)………公式三;

公式三中,c为所述数据对应的在数组中的元素位置,x为所述数据的id,表示向上取整操作。

本公开内容实施例在根据公式二确定数据对应的在数组中的元素位置时,首先需要根据公式三计算公式一中参数b,其中b为确定数据对应的在数组中的元素位置过程中的中间变量。

例如,一组记录用户与其归属的数据中心的绑定关系的用户数据,其中数据的id为用户id,数据的内容为用户归属的数据中心。假设,用户id的范围为1-2000,局部热点1:用户id范围为100-105;局部热点2:用户id范围为300-400;局部热点3:用户id范围为1000-1099;局部热点4:用户id范围为1500-1700。用于存储用户与其归属的数据中心的绑定关系的二维数组结构的数据表,该数据表的参数信息为:m=50,n=20,l=2;即该数据表共包括50个数组,每个数组包括20个元素,其中每一个元素可以存储两个用户数据。在确定用户数据在数据表中对应的在数组中的元素位置时,首先根据用户id,数据表的参数信息n和l,根据公式三计算得到b,根据参数b和l确定用户数据在数据表中对应的在数组中的元素位置。比如,在确定用户id为100的用户数据在数据表中对应的在数组中的元素位置时,根据公式三计算b=x%(n*l)=100%(20*2)=20;然后根据公式二,计算用户id为100的用户数据在数据表中对应的在数组中的元素位置则确定用户id为100的用户数据的数据内容存储在数据表的数组中第10个元素中。

三、根据下列方式确定数据在元素中的起始位。

根据所述l,以及所述数据的id,确定所述数据在元素中的起始位。

可选的,根据所述l,对所述数据的id进行取模运算,确定所述数据在元素中的起始位。

具体的计算方式为:

将所述数据的id与所述l进行取模运算,确定所述数据在元素中的数据位置;根据所述数据在元素中的所述数据位置,以及所述数据在元素中占用的位数,确定所述数据在元素中的起始位。

具体的,采用下列公式四确定所述数据在元素位置中的起始位:

公式四中,d1为所述数据在元素中的起始位,x为所述数据的id,h为一个元素的位数。

本公开内容实施例在确定数据在元素中的起始位时,需要确定数据的id,每一个元素中存储的数据个数l,以及一个元素的位数h,在确定这三个个参数后,根据公式四计算得到数据在元素中的起始位。

需要说明的是,本公开内容实施例的数据对应的存储索引信息中可以只包括数据对应的数组位置、数据对应的在数组中的元素位置、以及数据对应的在元素中的起始位。在不确定数据对应的在元素中的结束位时,也可以只根据数据对应的数组位置、数据对应的在数组中的元素位置、以及数据对应的在元素中的起始位准确确定数据在数据表中的存储位置。

四、根据下列方式确定数据在元素中的结束位。

根据所述l,以及所述数据的id,确定所述数据在元素中的结束位。

具体的计算方式为:

根据所述数据的id与所述l进行取模运算后的数值,确定所述数据在元素中的数据位置;根据所述数据在元素中的数据位置,确定与所述数据相邻且位于所述数据位置之后的目标数据在元素中的起始位;根据所述目标数据在元素中的起始位,确定所述数据在元素中的结束位。

具体的,采用下列公式五确定所述数据在元素中的结束位:

公式五中,d2为所述数据在元素中的起始位,x为所述数据的id,h为一个元素的位数。

本公开内容实施例在确定数据在元素位置中的结束位时,需要确定数据的id,每一个元素中存储的数据个数l,以及一个元素的位数h,在确定这三个参数后,根据公式五计算得到数据在元素中的结束位。

本公开内容实施例一个元素的位数为8,即h=8。由于l为h的约数,则l可以取得值包括1、2、4和8。

在l=1时,x%l=0,h/l=8,此时根据公式四计算得到d1=0,则数据在元素中的起始位为第0位,此时根据公式五计算得到d1=7,则数据在元素中的结束位为第7位;

在l=2时,x%l可取的值有0,1,并且h/l=4,则一个数据在元素中占用四位;在x%l=0时,根据公式四计算得到d1=0,则数据在元素中的起始位为第0位,根据公式五计算得到d2=3,则数据在元素中的结束位为第3位;在x%l=1时,根据公式四计算得到d1=4,则数据在元素中的起始位为第4位,根据公式五计算得到d2=7,则数据在元素中的结束位为第7位。

在l=4时,x%l可取的值有0,1,2,3,并且h/l=2,则一个数据在元素中占用两位;在x%l=0时,根据公式四计算得到d1=0,则数据在元素中的起始位为第0位,根据公式五计算得到d2=1,则数据在元素中的结束位为第1位;在x%l=1时,根据公式四计算得到d1=2,则数据在元素中的起始位为第2位,根据公式五计算得到d2=3,则数据在元素中的结束位为第3位;在x%l=2时,根据公式四计算得到d1=4,则数据在元素中的起始位为第4位,根据公式五计算得到d2=5,则数据在元素中的结束位为第5位;在x%l=3时,根据公式四计算得到d1=6,则数据在元素中的起始位为第6位,根据公式五计算得到d2=7,则数据在元素中的结束位为第7位。

在l=8时,x%l可取的值有0,1,2,3,4,5,6,7,并且h/l=1,此时公式四为:d1=(x%l)*1=x%l;公式五为:d2=(x%l+1)*1-1=x%l,则数据的起始位和结束位相同,即在x%l=0时,数据在元素中的位置为第0位;在x%l=1时,数据在元素中的位置为第1位;在x%l=2时,数据在元素中的位置为第2位;在x%l=3时,数据在元素中的位置为第3位;在x%l=4时,数据在元素中的位置为第4位;在x%l=5时,数据在元素中的位置为第5位;在x%l=6时,数据在元素中的位置为第6位;在x%l=7时,数据在元素中的位置为第7位。

本公开内容实施例在根据上述方式得到数据在数据表中的数组位置、数据在数组中的元素位置,以及数据在元素中的起始位和结束位之后,根据数据对应的数组位置和在数组中的元素位置,以及所述数据在元素中的起始位和结束位,确定所述数据在所述数据表中的存储位置。

本公开内容实施例数据在数据表中对应的存储位置,是由数据在数据表中的数组位置、数据在数组中的元素位置,以及数据在元素中的起始位和结束位四个位置共同确定的,在上述四个位置确定后,该数据在数据表中的位置唯一确定。

例如,一组记录用户与其状态的绑定关系的用户数据,其中数据的id为用户id,数据的内容为用户的状态。假设,用户id的范围为1-5000,局部热点1:用户id范围为100-105;局部热点2:用户范围为300-400;局部热点3:用户范围为900-1099;局部热点4:用户范围为1500-1700;局部热点5:用户范围为2500-1900;局部热点6:用户范围为3100-3600;存储用户与其状态的绑定关系的数据表采用二维数组结构,该数据表的参数信息为:m=25,n=25,l=8;即该数据表共包括25个数组,每个数组包括25个元素,其中每一个元素可以存储8个用户数据。在确定用户id为950的用户数据在数据表中对应的存储位置时,首先根据用户id以及数据表的参数,根据公式一确定用户id为950的用户数据对应的数组位置a。

具体的,则确定用户id为950的用户数据对应的数组位置为第5个数组;

在确定用户数据对应的数组位置之后,根据公式二和公式三确定用户数据对应的在数组中的元素位置。

具体的,b=x%(n*l)=950%(25*8)=150;根据b以及数据表的参数信息,根据公式二,确定c,则确定用户id为950的用户数据对应的在数组中的元素位置为第19个元素。

在确定用户数据对应的在数组中的元素位置之后,根据公式四确定用户数据在元素中的起始位:

根据公式五确定用户数据在元素中的结束位:

则确定用户id为950的用户数据在元素中第6位。

综合上述得到的a、c、d1和d2,确定用户id为950的用户数据在数据表中对应的存储位置为第5个数组中第19个元素中的第6位。

需要说明的是,在实施中,确定数据对应的数组位置和在数组中的元素位置,以及所述数据在元素中的起始位和结束位时,可以采取任意顺序进行确定,本公开内容实施例不限定确定数据对应的数组位置和在数组中的元素位置,以及所述数据在元素中的起始位和结束位的顺序。

针对非热点数据,本公开内容实施例采用统一远程存储的形式进行存储,具体可以采用集中式cache(高速缓冲存储器),还可以采用远程的数据库服务器。本公开内容实施例针对非热点数据的存储方法不作限定。

本公开内容实施例针对一组数据,经过热点区域识别,将热点数据存储在二维数组结构的数据表中,将非热点数据采用统一远程存储的形式。而且在将热点数据存储在数据表中时,根据数据的id,计算得到每一个数据对应的位置;由于数据表的参数信息m、n和l根据该组数据的热点区域和数据的个数确定,并且m*n*l所得到的值不小于数据的个数,因此,将该组数据的热点数据存储在数据表中后,非热点数据在数据表中对应的位置为空,从而在调用该组数据时,可以有效减小数据占用的内存。

例如,针对一组记录用户状态的数据,数据的id为用户id,数据的内容为用户状态。假设用户id范围为1-500,其中,局部热点1:用户id范围为1-80;局部热点2:用户id范围为161-200;局部热点3:用户id范围为241-272;局部热点4:用户id范围为401-500。则在对该组数据存储时,将热点数据存储在二维数组结构的数据表中,非热点数据采用远程集中式cache存储。根据对热点区域的分析,确定数据表的参数信息为n=5,l=8,m=13。在对热点数据进行存储后,二维数组结构的数据表如图3所示的二维字节数组结构,其中,第一字节数组、第二字节数组、第五字节数组、第七字节数组、第十一字节数组、第十二字节数组和第十三字节数组中保存有数据,第三字节数组、第四字节数组、第六字节数组、第八字节数组、第九字节数组和第十字节数组为空。

由于本公开内容实施例二维数组结构的数据表中每一个数组包括n个元素,其中n是根据对需要存储的一组数据的分析,最大限度的减小该数据表在使用过程中占用的内存,经过分析合理的确定n。

其中,对需要存储的一组数据的分析是通过该组数据经过热点识别,确定该组数据的局部热点区域,根据局部热点区域合理确定数据表每个数组包括的元素个数n。又由于每个元素存储的数据个数l是由数据本身确定的,根据确定的n和l,以及需要存储的该组数据的个数,确定数据表包括的数组个数m。因此,针对不同的待存储数据,二维数组结构的数据表的参数信息是不同的。

本公开内容实施例针对同一组存储的数据,存储该组数据的二维数组结构的数据表的参数信息也不是唯一确定的,由于数据表的参数信息由存储的数据中热点区域确定,因此,在热点区域发生变化后,用于存储数据的二维数组结构的数据表的参数信息也发生变化。存储数据的二维数组结构的数据表的参数信息发生变化后,该组数据的存储位置需要重新计算,并重新存储。

本公开内容实施例针对一组存储的数据,在该组数据在二维数组结构的数据表中存储完成之后,需要周期性的对该组数据的热点数据进行分析,在该组数据的局部热点区域发生变化后,调整二维数组结构的数据表的参数信息,对该组数据重新存储。

例如,针对一组记录用户与其归属的数据中心的绑定关系的用户数据,每间隔24小时对该组用户数据进行热点区域识别,在确定热点区域发生变化后,调整存储该用户数据的数据表的参数信息,对该组用户数据重新存储。

还比如,若针对一组记录用户与其状态的映射关系的数据,可以每间隔一周对该组数据进行热点区域识别,在确定热点区域发生变化后,调整存储数据的数据表的参数信息,对该组数据重新存储。

另一方面,如图4所示,本公开内容实施例还提供一种读取数据的方法,包括:

步骤401、确定需要读取的数据的id;

步骤402、对所述数据的id进行运算处理,确定所述数据对应的存储索引信息;

步骤403、从数据表中所述存储索引信息对应的存储位置上读取所述数据的数据内容;其中,所述数据表的结构为二维数组结构。

本公开内容实施例的数据包括数据的id和数据的内容。并且数据的内容占用的存储空间很小;数据的id为十进制数值。

本公开内容实施例存储数据的数据表采用二维数组结构,并且该二维数组结构的数据表的参数信息包括:

数组的个数m、每个数组的元素个数n和每个元素存储的数据个数l。

可选的,根据所述数据的id,确定所述数据为热点数据。

本公开内容实施例在对一组数据进行存储时,根据对该组数据的热点区域识别,将该组数据分为热点数据和非热点数据。而本公开内容实施例只是针对热点数据,采用二维数组结构的数据表进行存储;对于非热点数据,采用其它远程存储的方式。

由于本公开内容实施例的二维数组结构的数据表存储的是热点数据,因此在读取数据时,还需要根据数据的类型进行读取。具体的,可以根据下面两种方式读取数据。

方式一、根据数据的id确定该数据是否为热点数据,若是,根据该数据在数据表中的存储位置读取数据的内容。

本公开内容实施例针对一组数据,预先对该组数据进行分析,确定该组数据的热点数据和非热点数据,并以数据id的形式呈现。例如,需要存储的一组数据的id范围为1-2000,经过对需要存储的一组数据进行热点区域识别,需要存储的一组数据的热点数据呈现如下状态:

局部热点1:数据的id范围为100-105;

局部热点2:数据的id范围为300-400;

局部热点3:数据的id范围为1000-1099;

局部热点4:数据的id范围为1500-1700。

本公开内容实施例在读取数据时,根据待读取数据的id,以及根据确定的该组数据的热点数据的id范围,确定待读取数据是否为热点数据,若是,则根据该待读取数据的id,以及确定的数据表的参数信息,确定该待读取数据在数据表中的存储位置,从数据表中读取该存储位置上的数据内容。

比如,针对一组记录用户与其归属的数据中心的绑定关系的用户数据,其中数据的id为用户id,数据的内容为用户归属的数据中心。其中,用户id的范围为1-2000,局部热点1:用户id范围为100-105;局部热点2:用户id范围为300-400;局部热点3:用户id范围为1000-1099;局部热点4:用户id范围为1500-1700。若读取的用户id为255,根据确定的局部热点区域,确定用户id为255的数据为热点数据,则根据用户id为255,以及数据表的参数信息确定用户id为255的数据在数据表中的存储位置,从该存储位置上读取以后id为255的用户归属的数据中心。

方式二、根据数据的id,确定该数据在数据表中对应的存储位置,判断该存储位置上是否有数据内容,若有,则确定该数据为热点数据,从该存储位置上读取数据的内容。

本公开内容实施例在存储数据时,数据表中只存储了热点数据,而非热点数据在数据表中对应的存储位置没有数据。本公开内容实施例在根据数据的id,确定该数据在数据表中对应的存储位置后,通过判断该存储位置上有没有数据的内容,确定该数据是否为热点数据,从而读取该存储位置的数据内容。

例如,针对一组记录用户与其归属的数据中心的绑定关系的用户数据,其中数据的id为用户id,数据的内容为用户归属的数据中心。在读取用户id为255的用户归属的数据中心时,根据用户id为255,以及数据表的参数信息,确定用户id为255的用户对应的数据表中的存储位置,假设用户id为255的用户对应的数据表中的存储位置为第5个数组中第5个元素的第一位,并且该存储位置上的数据内容为数据中心1,则确定用户id为255的用户归属的数据中心为数据中心1。

由于本公开内容实施例的二维数组结构的数据表包括m个定长的数组,每个数组包括n个元素,每个元素又可以存储l个数据。因此,在根据数据的id确定数据在数据表中的存储位置时,需要确定该数据对应的数组位置,该数据对应的在数组中的元素位置,以及该数据在元素中的起始位和结束位。

本公开内容实施例采用a表示数据对应的数组位置,采用c表示数据对应的在数组中的元素位置,以及采用d1表示该数据在元素中的起始位,采用d2表示该数据在元素中的结束位。

本公开内容实施例数据对应的数组位置为a,表示数据对应的存储位置为数据表中第a个数组;数据对应的在数组中的元素位置为c,表示数据对应的存储位置为数据表中数组中第c个元素;数据在元素中的起始位为d1,数据在元素中的结束位为d2,表示数据对应的存储位置为数据表中元素的第d1-d2位。

本公开内容实施例在确定需要读取的数据的id后,对所述数据的id进行运算处理,确定所述数据对应的存储索引信息,即确定数据对应的数组位置、在数组中的元素位置以及数据在元素中的起始位和结束位。

其中,本公开内容实施例的数据对应的存储索引信息为数据在数据表中的存储位置。

下面具体说明确定数据在数据表中对应的存储位置的方法。

一、根据下列方式确定数据对应的数组位置。

根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的数组位置。

可选的,根据所述n和所述l,对所述数据的id进行除法运算,并将所述除法运算后的商值进行取整运算,确定所述数据对应的数组位置;

具体的计算方式为:

将所述数据的id除以m,并将得到的商值进行向上取整运算;根据所述取整运算后得到的数值,确定所述数据对应的数组位置;其中,所述m为所述n与所述l的乘积。

具体的,采用下列公式确定所述数据对应的数组位置:

其中,公式一中a为所述数据对应的数组位置,x为所述数据的id,表示向上取整操作。

二、根据下列方式确定数据对应的在数组中的元素位置。

根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的在数组中的元素位置。

可选的,根据所述n和所述l,对所述数据的id进行取模运算和取整运算,确定所述数据对应的在数组中的元素位置。

具体的计算方式为:

将所述数据的id与所述m进行取模运算,并将所述取模运算后得到的数值除以所述l,将得到的商值进行向上取整运算;根据所述向上取整运算后得到的数值,确定所述数据对应的在数组中的元素位置;其中,所述m为所述n与所述l的乘积。

具体的,采用下列公式确定所述数据对应的在数组中的元素位置:

其中,b=x%(n*l);c为所述数据对应的在数组中的元素位置,x为所述数据的id,表示向上取整操作。

本公开内容实施例在根据公式确定数据对应的在数组中的元素位置时,首先需要根据公式b=x%(n*l)计算参数b,其中b为确定数据对应的在数组中的元素位置过程中的中间变量。

三、根据下列方式确定数据在元素中的起始位。

根据所述l,以及所述数据的id,确定所述数据在元素中的起始位。

可选的,根据所述l,对所述数据的id进行取模运算,确定所述数据在元素中的起始位。

具体的计算方式为:

将所述数据的id与所述l进行取模运算,确定所述数据在元素中的数据位置;根据所述数据在元素中的所述数据位置,以及所述数据在元素中占用的位数,确定所述数据在元素中的起始位。

具体的,采用下列公式确定所述数据在元素位置中的起始位:

公式四中,d1为所述数据在元素中的起始位,x为所述数据的id,h为一个元素的位数。

本公开内容实施例在确定数据在元素中的起始位时,需要确定数据的id,每一个元素中存储的数据个数l,以及一个元素的位数h,在确定这三个个参数后,根据公式计算得到数据在元素中的起始位。

需要说明的是,本公开内容实施例的数据对应的存储索引信息中可以只包括数据对应的数组位置、数据对应的在数组中的元素位置、以及数据对应的在元素中的起始位。在不确定数据对应的在元素中的结束位时,也可以只根据数据对应的数组位置、数据对应的在数组中的元素位置、以及数据对应的在元素中的起始位准确确定数据在数据表中的存储位置。

四、根据下列方式确定数据在元素中的结束位。

根据所述l,以及所述数据的id,确定所述数据在元素中的结束位。

具体的计算方式为:

根据所述数据的id与所述l进行取模运算后的数值,确定所述数据在元素中的数据位置;根据所述数据在元素中的数据位置,确定与所述数据相邻且位于所述数据位置之后的目标数据在元素中的起始位;根据所述目标数据在元素中的起始位,确定所述数据在元素中的结束位。

具体的,采用下列确定所述数据在元素位置中的结束位:

其中,d2为所述数据在元素中的起始位,x为所述数据的id,h为一个元素的位数。

本公开内容实施例在确定数据在元素位置中的结束位时,需要确定数据的id,每一个元素中存储的数据个数l,以及一个元素的位数h,在确定这三个参数后,根据公式计算得到数据在元素中的结束位。

本公开内容实施例在根据上述方式得到数据在数据表中的数组位置、数据在数组中的元素位置,以及数据在元素中的起始位和结束位之后,根据数据对应的数组位置和在数组中的元素位置,以及所述数据在元素中的起始位和结束位,确定所述数据在所述数据表中的存储位置。

需要说明的是,本公开内容实施例的二维数据结构的数据表中只存储有热点数据,而对于非热点数据,需要根据在数据存储过程中非热点数据的存储方式,从非热点数据的存储位置上读取。

基于同一发明构思,本公开内容实施例中还提供了一种存储数据的设备,由于该设备解决问题的原理与本公开内容实施例存储数据的方法相似,因此该设备的实施可以参见方法的实施,重复之处不再赘述。

如图5所示,本公开内容实施例一种存储数据的设备,包括:

第一确定模块501,用于确定需要存储的数据的标识id;

第一处理模块502,用于对所述数据的id进行运算处理,确定所述数据对应的存储索引信息;

第一控制模块503,用于将所述数据的数据内容存储到数据表中所述存储索引信息对应的存储位置上;其中,所述数据表的结构为二维数组结构。

可选的,所述第一控制模块503,还用于:

根据所述数据的id,确定所述数据为热点数据。

可选的,所述数据对应的存储索引信息包括所述数据对应的数组位置、所述数据对应的在数组中的元素位置、所述数据在元素中的起始位;

所述第一处理模块502,具体用于:

根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的数组位置和在数组中的元素位置;根据所述l,以及所述数据的id,确定所述数据在元素中的起始位;其中,所述n为所述数据表中每个数组包括的元素个数;所述l为所述数据表中每个元素存储数据的个数,并且所述l为h的约数,所述h为一个元素的位数;所述n、l和h为正整数。

可选的,所述第一处理模块502,具体用于:

根据所述n和所述l,对所述数据的id进行除法运算,并将所述除法运算后的商值进行取整运算,确定所述数据对应的数组位置;根据所述n和所述l,对所述数据的id进行取模运算和取整运算,确定所述数据对应的在数组中的元素位置;根据所述l,对所述数据的id进行取模运算,确定所述数据在元素中的起始位。

可选的,所述第一处理模块502,具体用于:

将所述数据的id除以m,并将得到的商值进行向上取整运算;根据所述取整运算后得到的数值,确定所述数据对应的数组位置;其中,所述m为所述n与所述l的乘积;

将所述数据的id与所述m进行取模运算,并将所述取模运算后得到的数值除以所述l,将得到的商值进行向上取整运算;根据所述向上取整运算后得到的数值,确定所述数据对应的在数组中的元素位置;其中,所述m为所述n与所述l的乘积;

将所述数据的id与所述l进行取模运算,确定所述数据在元素中的数据位置;根据所述数据在元素中的所述数据位置,以及所述数据在元素中占用的位数,确定所述数据在元素中的起始位。

可选的,所述数据对应的存储索引信息还包括所述数据在元素中的结束位;

所述第一处理模块502,具体用于:

根据所述l,以及所述数据的id,确定所述数据在元素中的结束位。

可选的,所述第一处理模块502,具体用于:

根据所述数据的id与所述l进行取模运算后的数值,确定所述数据在元素中的数据位置;根据所述数据在元素中的数据位置,确定与所述数据相邻且位于所述数据位置之后的目标数据在元素中的起始位;根据所述目标数据在元素中的起始位,确定所述数据在元素中的结束位。

基于同一发明构思,本公开内容实施例中还提供了一种读取数据的设备,由于该设备解决问题的原理与本公开内容实施例读取数据的方法相似,因此该设备的实施可以参见方法的实施,重复之处不再赘述。

如图6所示,本公开内容实施例一种读取数据的设备,包括:

第二确定模块601,用于确定需要读取的数据的标识id;

第二处理模块602,用于对所述数据的id进行运算处理,确定所述数据对应的存储索引信息;

第二控制模块603,用于从数据表中所述存储索引信息对应的存储位置上读取所述数据的数据内容;其中,所述数据表的结构为二维数组结构。

可选的,所述第二控制模块603,还用于:

根据所述数据的id,确定所述数据为热点数据。

可选的,所述数据对应的存储索引信息包括所述数据对应的数组位置、所述数据对应的在数组中的元素位置、所述数据在元素中的起始位;

所述第二处理模块602,具体用于:

根据所述数据表的n和l,以及所述数据的id,确定所述数据对应的数组位置和在数组中的元素位置;根据所述l,以及所述数据的id,确定所述数据在元素中的起始位;其中,所述n为所述数据表中每个数组包括的元素个数;所述l为所述数据表中每个元素存储数据的个数,并且所述l为h的约数,所述h为一个元素的位数;所述n、l和h为正整数。

可选的,所述第二处理模块602,具体用于:

根据所述n和所述l,对所述数据的id进行除法运算,并将所述除法运算后的商值进行取整运算,确定所述数据对应的数组位置;根据所述n和所述l,对所述数据的id进行取模运算和取整运算,确定所述数据对应的在数组中的元素位置;根据所述l,对所述数据的id进行取模运算,确定所述数据在元素中的起始位。

可选的,所述第二处理模块602,具体用于:

将所述数据的id除以m,并将得到的商值进行向上取整运算;根据所述取整运算后得到的数值,确定所述数据对应的数组位置;其中,所述m为所述n与所述l的乘积;

将所述数据的id与所述m进行取模运算,并将所述取模运算后得到的数值除以所述l,将得到的商值进行向上取整运算;根据所述向上取整运算后得到的数值,确定所述数据对应的在数组中的元素位置;其中,所述m为所述n与所述l的乘积;

将所述数据的id与所述l进行取模运算,确定所述数据在元素中的数据位置;根据所述数据在元素中的所述数据位置,以及所述数据在元素中占用的位数,确定所述数据在元素中的起始位。

可选的,所述数据对应的存储索引信息还包括所述数据在元素中的结束位;

所述第二处理模块602,具体用于:

根据所述l,以及所述数据的id,确定所述数据在元素中的结束位。

可选的,所述第二处理模块602,具体用于:

根据所述数据的id与所述l进行取模运算后的数值,确定所述数据在元素中的数据位置;根据所述数据在元素中的数据位置,确定与所述数据相邻且位于所述数据位置之后的目标数据在元素中的起始位;根据所述目标数据在元素中的起始位,确定所述数据在元素中的结束位。

以上参照示出根据本公开内容实施例的方法、装置(系统)和/或计算机程序产品的框图和/或流程图描述本公开内容。应理解,可以通过计算机程序指令来实现框图和/或流程图示图的一个块以及框图和/或流程图示图的块的组合。可以将这些计算机程序指令提供给通用计算机、专用计算机的处理器和/或其它可编程数据处理装置,以产生机器,使得经由计算机处理器和/或其它可编程数据处理装置执行的指令创建用于实现框图和/或流程图块中所指定的功能/动作的方法。

相应地,还可以用硬件和/或软件(包括固件、驻留软件、微码等)来实施本公开内容。更进一步地,本公开内容可以采取计算机可使用或计算机可读存储介质上的计算机程序产品的形式,其具有在介质中实现的计算机可使用或计算机可读程序代码,以由指令执行系统来使用或结合指令执行系统而使用。在本公开内容上下文中,计算机可使用或计算机可读介质可以是任意介质,其可以包含、存储、通信、传输、或传送程序,以由指令执行系统、装置或设备使用,或结合指令执行系统、装置或设备使用。

显然,本领域的技术人员可以对本公开内容进行各种改动和变型而不脱离本公开内容的精神和范围。这样,倘若本公开内容的这些修改和变型属于本公开内容权利要求及其等同技术的范围之内,则本公开内容也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1