具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本发明实施例提供了一种数据存储方法,图1是根据本发明实施例的数据存储方法的流程示意图,如图1所示,该流程可以包括如下的步骤:
步骤S102,获取待存储的数据的标识;
步骤S104,根据该标识,确定用于存储该数据的目录分支,其中,该目录分支位于分布式文件系统中;
步骤S106,根据确定的目录分支,将该数据存储到分布式文件系统中。
通过上述步骤,提供了一种根据待存储的数据的标识将数据存储到分布式文件系统中的方式,从而提供了对分布式文件系统的支持,并且,使用上述方式由于根据数据的标识确定存储的目录分支,实现了数据在多个目录分支中的均匀存储。采用上述的存储方法之后,在一个优选实施方式中,在用户需要查询数据时,可以直接通过数据的标识查询到数据存储的目录分支的位置。这相对于相关技术中采用分表方式的存储方法而言,本实施例不再需要通过关系数据库中复杂的查询算法在多个节点中查询数据,从而对高效率的查询提供了支持。通过本实施例,解决了无法将海量用户数据均匀存储到分布式文件结构中的问题,进而实现了数据在分布式文件系统中的均匀存储。
优选地,上述的分布式文件系统包括多个分布式文件结构,这些分布式文件结构的位置可以用目录分支进行表示。
优选地,上述步骤S104可以包括:根据预定的哈希算法对标识进行处理,并根据处理得到的哈希值,确定用于存储数据的目录分支。需要说明的是,根据标识存储数据的方式是可以有多种的,在一些优选的实施例中,采用了上述的对标识进行哈希运算,以将各个标识对应的数据散列到各个目录分支中进行存储。在存储数据之后,就可以根据数据对应的标识,结合散列算法(即哈希算法)定位到对应的分支目录进行查询等数据操作。采用上述的哈希算法能实现压缩映射的功能,把一个大范围映射到一个小范围,并且,哈希值的空间通常远小于输入的空间,节省了存储空间,便于数据的保存。
优选地,在确定用于存储数据的目录分支的情况下,可以根据确定的可用于存储数据的目录分支的数目和经过哈希运算得到的哈希值,确定这些可用于存储数据的目录分支中的某一个目录分支,并使用这一个目录分支存储该数据。优选地,采用哈希值(P)模以可用于存储数据的目录分支的数目(Q),即P%Q,则可以确定这Q个目录分支中的第(P%Q)+1个目录分支用于存储该哈希值对应的数据。
优选地,确定将该哈希值对应的数据存储到对应的目录分支中之后,该数据在该目录分支中还可以具有其他的数据存储结构,或者在该目录分支下的存储还可以通过该数据的标识进一步确定存储的目录分支的子目录分支。在本发明实施例中对数据在目录分支中的存储结构并不做限定。
在一个优选的实施例中,采用了一种对包含多个字符值的标识通过哈希算法进行处理的方式,该方式可以包括:根据预定的哈希算法,对标识的多个字符值进行处理。
优选地,假设标识为A1A2…An,n≥2,其中An表示标识的多个字符值中的第n个字值符,该哈希算法包括下列算式:(A1×Mn-1)+(A2×Mn-2)+…+(An-1×M1)+An,其中,M为正整数,算式的结果为用于确定目录分支的哈希值。
需要说明的是,上述的算式可以有多种变形形式,例如:
在n=2时,该算式也可以写成:A1*M+A2;
在n=3时,该算式也可以写成:(A1*M+A2)*M+A3;
在n大于3时,以此类推。
下面使用一个更具体的实例进行说明:假设上述的用户标识是4523,则第一个字符值是4,第二个字符值是5,第三个字符是2,第四个字符是3,预定放大倍数为597,则可以进行下列处理得到哈希值:
步骤1,先将4放大597倍,然后与第二个字符值5相加,即4*597+5=2393;
步骤2,先将步骤1的处理结果2393放大597倍,然后与第三个字符值2相加,即2393*597+2=1428623;
步骤3,先将步骤2的处理结果1428623放大597倍,然后与第四个字符值3相加,即1428623*597+3=852887934,最后得到的结果即为用于确定目录分支的哈希值。
优选地,在根据哈希值确定目录分支时,还可以采用根据由标识中的多个字符值中的一个或多个字符值分别确定目录分支的每一级目录的目录号,并根据这些目录号确定该目录分支。例如:根据n=N时算式的结果,确定存储数据的第N级的目录号,其中1≤N≤n;根据确定的n个目录号,确定目录分支。
下面使用一个优选的实施例进行说明:以上述步骤1、步骤2、步骤3为例,通过步骤1得到的2393确定第一级目录的目录号,通过步骤2得到的1428623确定第二级目录的目录号,通过步骤3得到的852887934确定第三级目录的目录号,最后根据这三个目录号确定该数据存储的目录分支。
优选地,上述的分布式文件系统包括:轻量级目录访问协议(LightweightDirectory AccessProtocol,简称为LDAP)文件系统。LDAP是为了使每个人能定位组织、个体和其他诸如网络中的文件和设备等资源的软件协议,不论是在公共的互联网或者在同一个公司的内部网里。
本发明实施例还提供了一种数据存储装置,该装置用于实现上述数据存储的方法。并且在该装置中涉及的对应功能也能结合上述方法所对应的描述进行结合描述和说明,在下面的装置实施例中将不再赘述。
图2是根据本发明实施例的数据存储装置的结构框图,如图2所示,该装置可以包括:获取模块22、确定模块24和存储模块26,其中,获取模块22,用于获取待存储的数据的标识;确定模块24耦合至获取模块22,用于根据标识,确定用于存储数据的目录分支,其中,目录分支位于分布式文件系统中;存储模块26耦合至确定模块24,用于根据确定的目录分支,将数据存储到分布式文件系统中。
通过上述装置,解决了无法将海量用户数据均匀存储到分布式文件结构中的问题,实现了数据在分布式存储结构中的均匀存储。
本实施例中所涉及到的模块、单元可以通过软件的方式实现,也可以通过硬件的方式来实现。本实施例中的所描述的模块、单元也可以设置在处理器中,例如,可以描述为:一种处理器包括获取模块22、确定模块24和存储模块26。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,获取模块还可以被描述为“用于获取待存储的数据的标识的模块”。
需要说明的是,下文中提到的“第一确定子单元”、“第二确定子单元”等类似描述中的“第一”、“第二”等描述仅用于对该模块或者单元的标识,并不应理解为这些单元或者模块之间存在顺序方面的限定。
图3是根据本发明实施例的数据存储装置的优选结构框图一,如图3所示,优选地,确定模块24包括:处理单元242,用于根据预定的哈希算法,对标识进行处理;确定单元244,用于根据处理得到的哈希值,确定用于存储数据的目录分支。
图4是根据本发明实施例的数据存储装置的优选结构框图二,如图4所示,优选地,确定单元244包括:第一确定子单元2442,用于确定可用于存储数据的目录分支的数目;第二确定子单元2444,用于根据目录分支的数目和哈希值,确定目录分支。
优选地,处理单元242还用于在标识包括多个字符值的情况下,根据预定的哈希算法,对标识的多个字符值进行处理。
优选地,标识为A1A2…An,n≥2,其中An表示标识的多个字符值中的第n个字符值,哈希算法包括下列算式:(A1×Mn-1)+(A2×Mn-2)+…+(An-1×M1)+An,其中,M为正整数,算式的结果为哈希值。
图5是根据本发明实施例的数据存储装置的优选结构框图三,如图5所示,优选地,确定单元244包括:第三确定子单元2446,用于根据n=N时算式的结果,确定存储数据的第N级的目录号,其中1≤N≤n;第四确定子单元2448,用于根据确定的n个目录号,确定目录分支。
优选地,分布式文件系统包括:LDAP文件系统。
下面结合优选实施例进行说明。
在本优选实施例中,提出了一种将海量用户数据均匀存储到分布式文件结构中的算法。本优选实施例中的算法可以结合哈希(HASH)算法、LDAP技术、数据库存储技术以及noSQL技术进行应用。
通过本优选实施例,可以在分布式存储海量用户信息的LDAP文件系统结构中,使用本优选实施例提出的均匀分布算法,可以把不同的用户信息均匀分布到不同的LDAP文件系统组织结构中。上述的均匀分布算法是根据用户名或者用户标识,将用户的信息均匀的分配到文件系统存储结构中的。
本优选实施例采用的方案是:通过用户的用户ID进行HASH运算,计算出每个用户所在的组织ID,每个用户的组织ID均匀分配,并且每处理多个用户循环一次。
下面对上述的方案进行进一步说明:
通过LDAP分布式目录进行用户信息的数据存储,参照LDAP v3的标准对象类型,以dc为节点目录存储数据。
通过本优选实施例的方案,将用户标识或者用户名通过哈希算法均匀的散列在不同的根目录结构下,这样用户信息可以分布在不同的目录分支下。并且可以根据用户标识找到其对应的分支,这样就实现了分布式数据的处理规则引擎。
在本优选实施例中采用的HASH算法包括如下步骤:
步骤1,读取第一个UserID(用户标识)字符值;
步骤2,将字符值与597相乘后于第二个字符值相加;
步骤3,循环所有UserID的字符,然后将相加的值与分支的HASH数取模运算;
步骤4,得到HASH值。
通过该算法,能够很好地避免HASH冲突,并且使得数据能够均匀的分布。
此外,通过将用户散列在不同分布式目录结构上达到了下列的效果:
第一,通过分支处理,满足了用户查询信息快。即,通过分支处理后,用户根据数据的用户标识就能够定位到需要查询的分支,从而能够对高效的查询提供支持。
第二,尽可能将数据平均分配到了所有节点中。
第三,如果新的节点加入进来,只需要移动那些需要移动的数据,不需要移动的数据可以不移动。例如,在添加LDAP新的节点目录时,只需要增加对应的新加的节点的目录结构既可,不需要再移动之前的目录结构,并将存储的数据重新分布既可。
图6是根据本发明优选实施例的文件目录结构树示意图。如图6所示,下面对该文件目录结构树做简要的说明。
1、同一用户目录信息树以dc=ucenter作为后缀,即根节点为dc=ucenter;
2、dc=ucenter目录下存在多个节点:dc=分区1,dc=分区2;可以按照分区算法将用户分到不同的节点下;
3、dc=分区x下存在多个用户属性节点,下面对这些用户属性节点进行说明:
(1)ou=users,存放用户的节点。所有用户信息都存放在ou=users节点下,用户以uid来标识,如uid=zhangsan,dc=分区1,dc=ucenter,表示用户张三的信息;uid规范参考附录:用户编码规范;用户的objectClass为:ucenter-person;
(2)ou=organization,存放组织结构信息的节点。组织信息都存放在ou-organization节点下;组织以o来标识,如o=xhrd,dc=分区1,dc=ucenter,表示组织xhrd的信息;o规范参考附录:组织结构编码规范;组织的objectClass为:ucenter-organization;
(3)ou=group,存放用户组的节点。所有用户组都存放到ou=group节点下;用户组以cn来标识,如cn=admin,dc=分区1,dc=ucenter,表示用户组admin的信息;用户组的objectClass为:ucenter-group;
(4)ou=application,存放应用信息的节点,所有应用信息都存放到ou=application节点下;应用以cn来标识,如cn=ucenter,dc=分区1,dc=ucenter表示应用ucenter的信息;应用的objectClass为:ucenter-application。
在本优选实施例中还提供了一种通过HASH算法建立文件系统目录结构的方法。例如,要分配10个节点,可以先通过HASH算法计算出对应的HASH值加上“ucenter”字符得到用户的节点名称。图7是根据本发明优选实施例的数据目录配置文件示意图,如图7所示,是根据上述方法生成的数据目录配置文件信息。
将该配置文件导入到LDAP服务中既可生成如图6所示的类似的文件系统目录。
本优选实施例还提供了一种通过HASH算法建立规则引擎分别操作对应分支的方法,例如,在进行LDAP操作时,采用图8示出的规则引擎查找方式,即,首先通过HASH算法算出用户的目录分支,然后根据LDAP的分支号进行数据的各种处理操作。
其中,图8所示的流程包括如下步骤:
步骤1,客户机发出查询请求,其中携带有数据的个人码(Personal Key,简称为PK)(相当于根据标识计算出的哈希值),图8中的PK值为4;
步骤2,规则引擎使用一定规则,例如取模的方式,确定存储所查询的数据的数据节点(Data Base,简称为DB),图8中示出了在存储该数据的DB数为3的情况下,规则引擎将PK=4对3取模,得到的值为1,则确定查询的DB为DB1。
综上所述,根据本发明的上述实施例、优选实施例和优选实施方式,可以将用户ID或者用户名通过HASH算法均匀的散列在不同的dc目录结构下,这样用户信息可以分布在不同的目录分支下,并且可以根据用户ID或用户名找到其对应的分支,这样就实现了分布式数据的处理规则引擎。从而解决了无法将海量用户数据均匀存储到分布式文件结构中的问题,实现了数据在分布式存储结构中的均匀存储。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。