一种主键分配方法、装置、服务器及存储介质与流程

文档序号:21821137发布日期:2020-08-11 21:37阅读:127来源:国知局
一种主键分配方法、装置、服务器及存储介质与流程
本发明涉及通信
技术领域
,特别是涉及一种主键分配方法、装置、服务器及存储介质。
背景技术
:服务器中业务数据的主键分配是分布式系统的数据管理中尤为重要的一部分。传统的主键分配方法是在服务器中存在待被分配主键的业务数据时,通过访问数据库中的主键配置信息来获取主键。这种传统主键分配方法会频繁的操作数据库中主键配置信息,频繁的操作数据库中的主键配置信息会严重的消耗分布式系统的性能。现有的主键分配方法是由服务器操作数据库根据数据库中的主键配置信息读取一段主键序列并将其加载到内存,进而当该服务器存在待被分配主键的业务数据时,根据内存中的主键序列为业务数据分配主键。这种现有的主键分配方式,虽然通过操作一次数据库便可实现对服务器中多个业务数据的主键分配,避免对数据库的频繁操作,进而减少分布式系统的性能消耗。但是,当服务器发生意外宕机时,服务器内存中当前存储的主键序列被删除,若服务器重新启动,会从数据库重新读取一段主键序列,那么在服务器以外宕机时,内存中的主键序列中未被分配的主键便会浪费。技术实现要素:有鉴于此,本申请实施例提供一种主键分配方法、装置、服务器及存储介质,以实现减少分布式系统的性能消耗,以及提高主键的利用率为目的。技术方案如下:本发明第一方面公开了一种主键分配方法,包括:当存在待被分配主键的业务数据时,读取本地存储的第一配置文件,所述第一配置文件中包括主键分配服务停止时内存缓存的主键序列中未被分配的主键;检测所述第一配置文件中是否存储有未被分配的主键;如果所述第一配置文件中未存储有未被分配的主键,检测当前所述内存缓存的主键序列中是否存在未被分配的主键;若当前所述内存缓存的主键序列中存在未被分配的主键,从当前所述内存缓存的主键序列中确定为所述业务数据分配的主键;若当前所述内存缓存的主键序列中不存在未被分配的主键,从数据库读取主键序列加载到所述内存,并从当前加载到所述内存的主键序列中确定为所述业务数据分配的主键。可选的,所述方法还包括:若所述第一配置文件中存储有未被分配的主键,从所述第一配置文件的未被分配的主键中确定为所述业务数据分配的主键。可选的,所述从数据库读取主键序列加载到所述内存,包括:读取所述数据库中存储的与所述业务数据相关的第一主键、第二主键和步长;将所述第一主键和所述步长的和作为第三主键;比较所述第二主键和所述第三主键;若所述第三主键不大于所述第二主键,将所述第一主键作为主键序列的起始主键且将所述第三主键作为所述主键序列的结束主键,将所述数据库中所述第一主键更新为所述第三主键,并将所述主键序列加载到所述内存;若所述第三主键大于所述第二主键,返回错误信息。可选的,所述方法还包括:当检测到主键分配服务停止时,判断所述内存缓存中的主键序列中是否存在未被分配的主键;若所述内存缓存中的主键序列中存在未被分配的主键,将所述内存缓存中的主键序列中未被分配的主键存储至所述第一配置文件。可选的,当存在待被分配主键的业务数据,包括:当应用进程存在待被分配主键的业务数据,该方法还包括:读取第二配置文件,所述第二配置文件包括所述应用进程当前的状态信息;检测所述状态信息是否表征所述应用进程处于停止运行状态;所述读取本地存储的第一配置文件,包括:若所述状态信息表征所述应用程序未处于停止运行状态,读取本地存储的第一配置文件。可选的,所述方法还包括:当接收到数据库注册请求时,获取至少一个服务器中每个服务器的第一数量、第二数量和总工作时长,所述第一数量为所述服务器中已被分配主键的业务数量的总数量,所述第二数量为所述服务器中待被分配主键的业务数据的总数量;根据所述服务器的第一数量、第二数量和总工作时长,计算所述服务器与所述服务注册请求的匹配度;将所述数据库注册请求分配给所述至少一个服务器中与所述数据库注册请求匹配度最高的目标服务器。可选的,所述方法还包括:读取第二配置文件,所述第二配置文件包括所述目标服务器当前的状态信息;若所述状态信息表征所述目标服务器处于运行状态,获取与所述目标服务器相关的基础信息,所述基础信息用于记录所述目标服务器当前待被分配主键的业务数据;控制所述目标服务器为所述当前待被分配的业务数据进行主键分配。本发明第二方面公开了一种主键分配装置,包括:第一读取单元,用于当存在待被分配主键的业务数据时,读取本地存储的第一配置文件,所述第一配置文件中包括主键分配服务停止时内存缓存的主键序列中未被分配的主键;第一检测单元,用于检测所述第一配置文件中是否存储有未被分配的主键;第二检测单元,用于如果所述第一配置文件中未存储有未被分配的主键,检测当前所述内存缓存的主键序列中是否存在未被分配的主键;第一确定单元,用于若当前所述内存缓存的主键序列中存在未被分配的主键,从当前所述内存缓存的主键序列中确定为所述业务数据分配的主键;第二确定单元,用于若当前所述内存缓存的主键序列中不存在未被分配的主键,从数据库读取主键序列加载到所述内存,并从当前加载到所述内存的主键序列中确定为所述业务数据分配的主键。本发明第三方面公开了一种服务器,包括:至少一个存储器和至少一个处理器;所述存储器存储有程序,所述处理器调用所述存储器存储的程序,所述程序用于实现如上述本发明第一方面任意一项公开的主键分配方法。本发明第四方面公开了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机可执行指令,所述计算机可执行指令用于执行如上述本发明第一方面任意一项公开的主键分配方法。本申请提供一种主键分配方法、装置、服务器及存储介质,当存在被分配主键的业务数据时,检测本地存储的第一配置文件中是否存储有主键分配服务停止时内存缓存的主键序列中未被分配的主键,若第一配置文件中未存储有未被分配的主键,检测当前内存缓存的主键序列中是否存在未被分配的主键;若当前内存缓存的主键序列中存储有未被分配的主键,从当前内存缓存的主键序列中确定为该业务数据分配的主键;若当前内存缓存的主键序列中未存储有未被分配的主键,从数据库读取主键序列加载到该内存,并从当前加载到内存的主键序列中确定为该业务数据分配的主键。这种主键分配方法通过在本地中预先设置第一配置文件来存储主键分配服务停止时内存缓存的主键序列中未被分配的主键,可以有效的避免主键的浪费。并且通过在检测到本地存储的第一配置文件中未存储有未被分配的主键,以及当前的内存缓存中的主键序列中也未存储有未被分配的主键的情况下,才去数据库中读取主键序列,避免了对数据库的频繁操作,进而减少分布式系统的性能消耗。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1为本发明实施例提供的一种主键分配方法的流程示意图;图2为本发明实施例提供的一种从数据库读取主键序列加载到内存的方法的流程示意图;图3为本发明实施例提供的另一种主键分配方法的流程示意图;图4为本发明实施例提供的一种数据库注册请求分配方法的流程示意图;图5为本发明实施例提供的一种主键分配装置的结构示意图;图6为本发明实施例提供的一种服务器的结构框图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。如图1所示,本发明提供一种主键分配方法,该方法适用于服务器。该主键分配方法具体包括以下步骤:s101:当存在待被分配主键的业务数据时,读取本地存储的第一配置文件,第一配置文件中包括主键分配服务停止时内存缓存的主键序列中未被分配的主键;在本申请实施例中,针对分布式系统中的每个服务器而言,预先在该服务器的本地设置第一配置文件,在服务器本地设置的第一配置文件初始为空,当服务器的主键分配服务停止时,用于将当前该服务器内存中缓存的主键序列中未被分配的主键存储至该服务器本地的第一配置文件中。当服务器存在待被分配主键的业务数据时,读取本地存储的第一配置文件,以便于判断第一配置文件中是否存储有未被分配的主键,进而根据检测结果执行相应的操作。s102:检测第一配置文件中是否存储有未被分配的主键;若第一配置文件中未存储有未被分配的主键,执行步骤s103;若第一配置文件中存储有未被分配的主键,执行步骤s106。在具体执行步骤s102的过程中,当读取到第一配置文件后,检测所读取到的第一配置文件中是否存储有未被分配的主键,若第一配置文件中未存储有未被分配的主键,检测服务器当前的内存缓存的主键序列中是否存在未被分配的主键;若第一配置文件中存储有未被分配的主键,则直接从第一配置文件中确定为业务数据分配的主键。若第一配置文件中未存储有未被分配的主键,检测当前内存缓存的主键序列中是否存在未被分配的主键,进而根据检测结果执行相应的操作。s103:检测当前内存缓存的主键序列中是否存在未被分配的主键;若当前内存缓存的主键序列中存在未被分配的主键;执行步骤s104;若当前内存缓存在主键序列中不存在未被分配的主键,执行步骤s105。在具体执行步骤s103的过程中,当第一配置文件中未存储有未被分配的主键时,检测服务器当前的内存缓存的主键序列中是否存在未被分配的主键,若当前内存缓存的主键序列中存在未被分配的主键,从当前内存缓存的主键序列中确定为业务数据分配的主键;若当前内存缓的主键序列中不存在未被分配的主键,从数据库中读取主键序列加载到内存,并从当前加载到内存在主键序列中确定为业务数据分配的主键。s104:从当前内存缓存的主键序列中确定为业务数据分配的主键;在具体执行步骤s104的过程中,当检测到当前内存缓存的主键序列中存在未被分配的主键时,从当前内存缓存的主键序列中确定为业务数据分配的主键。s105:从数据库中读取主键序列加载到内存,并从当前加载到内存在主键序列中确定为业务数据分配的主键;参见图2,示出了本发明实施例提供的一种从数据库读取主键序列加载到内存的方法的流程示意图,该方法具体包括以下步骤:s201:读取数据库中存储的与业务数据相关的第一主键、第二主键和步长;在本申请实施例中,当检测到当前内存缓存的主键序列中不存在未被分配的主键时,读取数据库中存储的与业务数据相关的数据表和第二主键。其中,数据表包括第一主键和步长;与业务数据相关的第一主键为数据库中当前已分配给服务器的最大主键值,第二主键为数据库中存储的可以分配给服务器的主键最大限值,步长为需要从数据库中读取主键序列主键的数量。需要说明的是,读取到的数据库中存储的与业务数据相关的数据表如下所示:表名t当前已分配给服务器的最大主键值m步长s需要说明的是,在本申请实施例中,在读取数据库中存储的与业务数据相关的第一主键、第二主键和步长之前,可以将数据库中的主键记录(主键记录用于记录数据库中已被分配过的主键)进行加锁,可以避免在从数据库读取主键序列时,读取到已被分配过的主键。s202:将第一主键和步长的和作为第三主键;在具体执行步骤s202的过程中,在从数据库中读取到与业务相关的第一主键和步长后,将第一主键和步长相加,进而将第一主键和步长进行相加得到的结果作为第三主键。比如,从数据库读取到与业务数据相关的第一主键为1000,即数据库中当前已被分配的主键的主键数量为1000;读取到的步长为100,即需要从数据库读取由100个主键构成的主键序列;将第一主键和步长相加,即1000+100,得到1100,将第一主键和步长进行相加得到的结果作为第三主键,即第三主键等于1100。s203:判断第三主键是否大于第二主键;若第三主键不大于第二主键,执行步骤s204;若第三主键大于第二主键,执行步骤s205。在具体执行步骤s203的过程中,在将第一主键和步长的和作为第三主键后,将第二主键和第三主键进行比较,若第三主键不大于第二主键,说明数据库中的未被分配的主键还足够被申请,即可以从数据库中读取主键序列;若第三主键大于第二主键,说明数据库中的未被分配的主键不足够被申请,即无法从数据库中读取主键序列,则输出错误信息,用于提示当前无法从数据库中读取主键序列。比如,当第三主键为1100时,若从数据库读取到与业务数据相关的第二主键为10000,说明第三主键不大于第二主键,进而说明可以从数据库中读取主键序列;若从数据库读取到与业务数据相关的第二主键为1090,说明第三主键大于第二主键,进而说明无法从数据库中读取主键序列,输出错误信息,提示当前无法从数据库中读取主键序列。s204:将第一主键作为主键序列的起始主键且将第三主键作为主键序列的结束主键,将数据库中第一主键更新为第三主键,并将主键序列加载到内存;在具体执行步骤s204的过程中,在第三主键不大于第二主键的情况下,即可以从数据库中读取主键序列的情况下,将第一主键为主键序列的起始主键,将第三主键作为主键序列的结束主键,从数据库中读取主键序列,并将读取到的主键序列加载到内存中。在本申请实施例中,在从数据库中读取到主键序列后,将数据库中的第一主键更新为第三主键,以便于记录数据库中当前已被分配的主键的情况。比如,当从数据库读取到与业务数据相关的第一主键为1000,即数据库中当前已被分配的主键的主键数量为1000;读取到步长为100,即需要从数据库读取由100个主键构成的主键序列时。若第三主键小于第二主键的,将1000作为主键序列的起始主键,将1100作为主键序列的结束主键,从数据库中读取主键序列(1000-1100),将读取到的主键序列加载到内存中并将第一主键更新为第三主键,即将第一主键的数值1000更新为第三主键的数值1100,更新后的第一主键的数值为1100。需要说明的是,在将第一主键更新为第三主键后,将之前加锁的主键记录进行释放锁。s205:返回错误信息。在本申请实施例中,当检测到当前内存缓存的主键序列中不存在未被分配的主键时,读取数据库中存储的与业务数据相关的第一主键、第二主键和步长,将第一主键和步长的和作为第三主键,进而可以通过比较第三主键和第二主键的大小来判断是否可以从数据库中读取主键序列。若第三主键大于第二主键,则说明不可以从数据库中读取主键序列,返回错误信息,提示当前无法从数据库中读取主键序列。s106:从第一配置文件的未被分配的主键中确定为业务数据分配的主键;在具体执行步骤s106的过程中,当检测到第一配置文件中存储有未被分配的主键时,从第一配置文件的未被分配的主键中确定为业务数据分配的主键。在本申请实施例中,当检测到第一配置文件中存储有未被分配的主键时,从第一配置文件的未被分配的主键中确定为业务数据分配的主键。可以大大不同节点同时访问数据更新主键时的等待,提高主键的分配效率。s107:当检测到主键分配服务停止时,判断内存缓存中的主键序列中是否存在未被分配的主键;若内存缓存中的主键序列中存在未被分配的主键,执行步骤s108。在本申请实施例中,当检测主键分配服务停止时,通过检测内存缓存中的主键序列是否存在未被分配的主键,若内存缓存中的主键序列中存在未被分配的主键,将内存缓存中的主键序列中未被分配的主键存储至第一配置文件。可以在当存在待被分配主键的业务数据时,直接通过第一配置文件中存储的未被分配的主键来为该业务数据分配主键,不仅可以提高主键的分配效率,还可以有效的避免主键的浪费。需要说明的是,在关闭服务器,或者,接收到用户发送的主键分配服务停止请求,或者服务器发生意外(如服务器发生意外宕机)时,均可以认为是服务器的主键分配服务停止,此时可以判断内存缓存中的主键序列是否存在未被分配的主键,若内存缓存中的主键序列中存在未被分配的主键,将内存缓存中的主键序列中未被分配的主键存储至第一配置文件,进而避免主键的浪费。并且,现有技术是通过使用数据库来记录服务器当前的主键的使用情况的,需要每增加一个服务器就需要在数据库中增加一条维护该服务器的主键配置信息,这样会给分布式系统的可扩展性造成一定的难度。因此,本发明针对分布式系统中的每个服务器而言,预先设置与改服务器相关的第一配置信息,进而可以利用第一配置文件记录服务器当前的主键使用情况。利用第一配置文件记录服务器当前的主键使用情况这样可以避免使用数据库保存服务器当前的主键的使用情况。s108:将内存缓存中的主键序列中未被分配的主键存储至第一配置文件。本发明提供的主键分配方法,当存在被分配主键的业务数据时,检测本地存储的第一配置文件中是否存储有主键分配服务停止时内存缓存的主键序列中未被分配的主键,若第一配置文件中存储有未被分配的主键,则直接从第一配置文件中确定为该业务数据分配的主键;若第一配置文件中未存储有未被分配的主键,检测当前内存缓存的主键序列中是否存在未被分配的主键;若当前内存缓存的主键序列中存储有未被分配的主键,从当前内存缓存的主键序列中确定为该业务数据分配的主键;若当前内存缓存的主键序列中未存储有未被分配的主键,从数据库读取主键序列加载到该内存,并从当前加载到内存的主键序列中确定为该业务数据分配的主键;当检测到内存缓存的主键序列存在未被分配的主键时,将内存缓存的主键序列中未被分配的存储至第一配置文件中,当又存在待被分配主键的业务数据时,直接通过第一配置文件中存储的未被分配的主键来为该业务数据分配主键,不仅可以提高主键的分配效率,还可以有效的避免主键的浪费。并且,这种主键分配方法通过在检测到本地存储的第一配置文件中未存储有未被分配的主键,以及当前的内存缓存中的主键序列中也未存储有未被分配的主键的情况下,才去数据库中读取主键序列,避免了对数据库的频繁操作,进而减少分布式系统的性能消耗。进一步的,当存在待分配主键的业务数据,包括:当应用进程存在待被分配主键的业务数据时,如图3所示,本发明实施例提供的另一种主键分配方法的流程示意图。该主键分配方法具体包括以下步骤:s301:读取第二配置文件,第二配置文件包括应用进程当前的状态信息;在本申请实施例中,针对至少一个服务器中的每个服务器而言,预先设置与该服务器对应的第二配置文件,该第二配置文件包括该服务器上的应用进程当前的状态信息。其中,应用进程当前的状态信息可以为正在运行状态,或者为停止运行状态。在具体执行步骤s301的过程中,当服务器上的应用进程存在待被分配主键的业务数据时,读取第二配置文件,进而通过检测第二配置文件中该应用进程当前的状态信息来执行相应的操作。s302:检测状态信息是否表征应用进程未处于停止运行状态;若状态信息表征应用进程未处于停止运行状态,执行步骤s303。在具体执行步骤s302的过程中,当读取到第二配置文件时,检测第二配置文件中的状态信息是否表征该应用进程未处于停止运行状态;若该状态信息表征该应用进程未处于停止运行状态,即该应用进程处于正在运行状态,读取本地存储的第一配置文件。若该状态信息表征该应用进程处于停止运行状态,则结束本次的主键分配服务。s303:读取本地存储的第一配置文件,所述第一配置文件中包括主键分配服务停止时内存缓存的主键序列中未被分配的主键;s304:检测第一配置文件中是否存储有未被分配的主键;若第一配置文件中未存储有未被分配的主键,执行步骤s305;若第一配置文件中存储有未被分配的主键,执行步骤s308。s305:检测当前内存缓存的主键序列中是否存在未被分配的主键;若当前内存缓存的主键序列中存在未被分配的主键;执行步骤s306;若当前内存缓存在主键序列中不存在未被分配的主键,执行步骤s307。s306:从当前内存缓存的主键序列中确定为业务数据分配的主键;s307:从数据库中读取主键序列加载到内存,并从当前加载到内存在主键序列中确定为业务数据分配的主键;s308:从第一配置文件的未被分配的主键中确定为业务数据分配的主键;s309:当检测到主键分配服务停止时,判断内存缓存中的主键序列中是否存在未被分配的主键;若内存缓存中的主键序列中存在未被分配的主键,执行步骤s310。s310:将内存缓存中的主键序列中未被分配的主键存储至第一配置文件。在具体执行步骤s303至步骤s310的过程中,步骤s303至步骤s310的具体实现原理和执行过程与上述图1公开的步骤s101至步骤s108的具体实现原理和执行过程相同,可参见上述图1公开的相应部分,这里不再进行赘述。在本申请实施例中,当应用进程存在待被分配主键的业务数据时,在读取第一配置文件之前先读取第二配置文件;并检测第二配置文件中包括的应用进程当前的状态信息是否表征应用进程未处于停止状态;在该状态信息表征应用进程未处于停止运行状态的情况下,读取第一配置文件;若该状态信息表征应用进程处于停止运行状态,则结束本次的主键分配服务,可以避免不必要的主键申请。进一步的,在上述公开的各个主键分配方法的基础上,如图4所示,具体还包括以下步骤:s401:当接收到数据库注册请求时,获取至少一个服务器中每个服务器的第一数量、第二数量和总工作时长;在本申请实施例中,分布式系统中包括至少一个服务器,分布式系统中的每个服务器均可以被设置为任务分发服务器。当任务分发服务器接收到数据库注册请求后,获取至少一个服务器中除任务分发服务器外的每个服务器的第一数量、第二数量和总工作时长。其中,第一数量为该服务器中已被分配主键的业务数据的总数量,第二数量为该服务器中待被分配主键的业务数据的总数量,总工作时长为该服务器处理已被分配主键的业务数据的总数量的工作时间。需要说明的是,至少一个服务器中的每个服务器均可作为任务分发服务器。s402:根据服务器的第一数量、第二数量和总工作时长,计算服务器与数据库注册请求的匹配度;在本申请实施例中,针对至少一个服务器中的每个服务器而言,在获取到该服务器的第一数量、第二数量和总工作时长后,根据服务器的第一数量、第二数量和总工作时长,计算服务器与数据库注册请求的匹配度,在本申请实施例中,针对至少一个服务器中的每个服务器而言,根据服务器的第一数量、第二数量和总工作时长,计算服务器与注册请求的匹配度的方式可以为:第一数量/总工作时长/第二数据量。具体如下公式所示:match_rate=amt1/time/atm2其中,match_rate为服务器与数据库注册请求的匹配度,amt1为第一数量,time为总工作时长,atm2为第二数量。由上述公式可知,针对至少一个服务器中的每个服务器而言,该服务器的第一数量/总工作时长越大,该服务器被分配到数据库注册请求的概率越大;该服务器的第二数量越小,该服务器被分配到数据库注册请求的概率也越大。s403:将数据库注册请求分配给至少一个服务器中与数据库注册请求匹配度最高的目标服务器;在具体执行步骤s403的过程中,在计算出至少一个服务器中每个服务器与该数据库注册请求的匹配度后,将计算得到的各个服务器与该数据库注册请求的匹配度从高到低进行排序,将至少一个服务器中与数据库注册请求匹配度最高服务器作为目标服务,进而将数据库注册请求分配给目标服务器。在本申请实施例中,当接收到数据库注册请求时,获取至少一个服务器中每个服务器的第一数量、第二数量和总工作时长,针对至少一个服务器中的每个服务器而言,根据该服务器的第一数量、第二数量和总工作时长,计算服务器与数据库注册请求的匹配度,将数据库注册请求分配给至少一个服务器中与数据库注册请求匹配度最高的目标服务器,进而达到服务器性能的负载均衡的目的。s404:读取第二配置文件,第二配置文件包括目标服务器当前的状态信息;在本申请实施例中,针对至少一个服务器中的每个服务器而言,预先设置与该服务器对应的第二配置文件,该第二配置文件包括该服务器当前的状态信息。其中,服务器当前的状态信息可以为正在运行状态,或者为停止运行状态。在本申请实施例中,在将数据库注册请求分配给目标服务器后,可以进一步读取第二配置文件,以便于通过检测第二配置文件中的目标服务器当前的状态信息来执行相应的操作。s405:检测状态信息是否表征目标服务器处于运行状态;若状态信息表征目标服务器处于运行状态,执行步骤s406;在具体执行步骤s405的过程中,在读取到目标服务器的第二配置文件后,检测该第二配置文件中目标服务器的状态信息是目标服务器处于运行状态;若状态信息表征目标服务器处于运行状态,获取与目标服务器当前的待被分配主键的业务数据,进而控制目标服务器为当前待被分配主键的业务数据进行主键分配。s406:获取与目标服务器相关的基础信息,基础信息用于记录目标服务器当前待被分配主键的业务数据;s407:控制目标服务器为当前待被分配的业务数据进行主键分配。在本申请实施例中,在将数据库注册请求分配给目标服务器后,可以进一步读取第二配置文件,以便于通过检测第二配置文件中的目标服务器当前的状态信息,若目标服务器当前的状态信息表征目标服务器处于运行状态,获取与目标服务器当前的待被分配主键的业务数据,控制目标服务器为当前待被分配的业务数据进行主键分配,以便于目标服务器将当前存在的待被分配主键的业务数据处理完。参见图5,示出了本发明实施例提供的一种主键分配装置的结构示意图,该主键分配装置包括:第一读取单元51,用于当存在待被分配主键的业务数据时,读取本地存储的第一配置文件,第一配置文件中包括主键分配服务停止时内存缓存的主键序列中未被分配的主键;第一检测单元52,用于检测第一配置文件中是否存储有未被分配的主键;第二检测单元53,用于如果第一配置文件中未存储有未被分配的主键,检测当前内存缓存的主键序列中是否存在未被分配的主键;第一确定单元54,用于若当前内存缓存的主键序列中存在未被分配的主键,从当前内存缓存的主键序列中确定为业务数据分配的主键;第二确定单元55,用于若当前内存缓存的主键序列中不存在未被分配的主键,从数据库读取主键序列加载到内存,并从当前加载到内存的主键序列中确定为业务数据分配的主键。上述本发明实施例公开的主键分配装置中各个单元具体的原理和执行过程,与上述本发明实施例公开的主键分配方法相同,可参见上述本发明实施例公开的主键分配方法中相应的部分,这里不再进行赘述。本申请提供一种主键分配装置,当存在被分配主键的业务数据时,检测本地存储的第一配置文件中是否存储有主键分配服务停止时内存缓存的主键序列中未被分配的主键,若第一配置文件中未存储有未被分配的主键,检测当前内存缓存的主键序列中是否存在未被分配的主键;若当前内存缓存的主键序列中存储有未被分配的主键,从当前内存缓存的主键序列中确定为该业务数据分配的主键;若当前内存缓存的主键序列中未存储有未被分配的主键,从数据库读取主键序列加载到该内存,并从当前加载到内存的主键序列中确定为该业务数据分配的主键。这种主键分配方法通过在本地中预先设置第一配置文件来存储主键分配服务停止时内存缓存的主键序列中未被分配的主键,可以有效的避免主键的浪费。并且通过检测本地存储的第一配置文件,以及在给第一配置文件中未存储有未被分配的主键时,再去检测当前的内存缓存中的主键序列中是否存储有未被分配的主键序列,若当前的内存缓存中的主键序列中也未存储有未被分配的主键,才去数据库中读取主键序列,避免了对数据库的频繁操作,进而减少分布式系统的性能消耗。进一步的,本申请实施例提供的主键分配装置,还包括:第三确定单元,用于若第一配置文件中存储有未被分配的主键,从第一配置文件的未被分配的主键中确定为业务数据分配的主键。在本申请实施例中,从数据库读取主键序列加载到内存,第二确定单元,包括:第二读取单元,用于读取数据库中存储的与业务数据相关的第一主键、第二主键和步长;第三主键确定单元,用于将第一主键和步长的和作为第三主键;比较单元,用于比较第二主键和第三主键;主键序列读取单元,用于若第三主键不大于第二主键,将第一主键作为主键序列的起始主键且将第三主键作为主键序列的结束主键,将数据库中第一主键更新为第三主键,并将主键序列加载到内存;返回单元,用于若第三主键大于第二主键,返回错误信息。进一步的,本申请实施例提供的主键分配装置,还包括:判断单元,用于当检测到主键分配服务停止时,判断内存缓存中的主键序列中是否存在未被分配的主键;存储单元,用于若内存缓存中的主键序列中存在未被分配的主键,将内存缓存中的主键序列中未被分配的主键存储至第一配置文件。进一步的,本申请实施例提供的主键分配装置,当存在待被分配主键的业务数据,包括:当应用进程存在待被分配主键的业务数据,该装置还包括:第三读取单元,用于读取第二配置文件,第二配置文件包括应用进程当前的状态信息;第三检测单元,用于检测状态信息是否表征应用进程处于停止运行状态;相应的,第一读取单元还用于:若状态信息表征应用程序未处于停止运行状态,读取本地存储的第一配置文件。进一步的,本申请实施例提供的主键分配装置,还包括:第一获取单元,用于当接收到数据库注册请求时,获取至少一个服务器中每个服务器的第一数量、第二数量和总工作时长,第一数量为服务器中已被分配主键的业务数量的总数量,第二数量为服务器中待被分配主键的业务数据的总数量;计算单元,用于根据服务器的第一数量、第二数量和总工作时长,计算服务器与服务注册请求的匹配度;分配单元,用于将数据库注册请求分配给至少一个服务器中与数据库注册请求匹配度最高的目标服务器。进一步的,本申请实施例提供的主键分配装置,还包括:第四读取单元,用于读取第二配置文件,第二配置文件包括目标服务器当前的状态信息;第二获取单元,用于若状态信息表征目标服务器处于运行状态,获取与目标服务器相关的基础信息,基础信息用于记录目标服务器当前待被分配主键的业务数据;控制单元,用于控制目标服务器为当前待被分配的业务数据进行主键分配。下面以主键分配方法应用于服务器为例,对本申请实施例提供的一种主键分配方法所适用于的服务器的硬件结构进行详细说明。本申请实施例提供的一种主键分配方法可应用于服务器,该服务器可以是网络侧为用户提供服务的服务设备,其可能是多台服务器组成的服务器集群,也可能是单台服务器。可选的,图6示出了本申请实施例提供的一种主键分配方法所适用于的服务器的硬件结构框图,参照图6,服务器的硬件结构可以包括:处理器61,存储器62,通信接口63和通信总线64;在本发明实施例中,处理器61、存储器62、通信接口63、通信总线64的数量均可以为至少一个,且处理器61、存储器62、通信接口63通过通信总线64完成相互间的通信;处理器61可能是一个中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路等;存储器62可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory)等,例如至少一个磁盘存储器;其中,存储器存储有程序,处理器可调用存储器存储的程序,程序用于:当存在待被分配主键的业务数据时,读取本地存储的第一配置文件,第一配置文件中包括主键分配服务停止时内存缓存的主键序列中未被分配的主键;检测第一配置文件中是否存储有未被分配的主键;如果第一配置文件中未存储有未被分配的主键,检测当前内存缓存的主键序列中是否存在未被分配的主键;若当前内存缓存的主键序列中存储有未被分配的主键,从当前内存缓存的主键序列中确定为业务数据分配的主键;若当前内存缓存的主键序列中未存储有未被分配的主键,从数据库读取主键序列加载到内存,并从当前加载到内存的主键序列中确定为业务数据分配的主键。有关程序的功能可参见上文对本申请实施例提供的一种主键分配方法的详细描述,在此不做赘述。进一步的,本申请实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机可执行指令,该计算机可执行指令用于执行上述主键分配方法。有关计算机可执行指令的具体内容可参见上文对本申请实施例提供的一种主键分配方法的详细描述,在此不做赘述。以上对本发明所提供的一种主键分配方法、装置、服务器及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备所固有的要素,或者是还包括为这些过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1