一种序列号的处理方法及设备的制作方法

文档序号:6440925阅读:248来源:国知局

专利名称::一种序列号的处理方法及设备的制作方法
技术领域
:本申请涉及计算机
技术领域
,尤其涉及一种序列号的处理方法及设备。
背景技术
:序列表是用于创建唯一连续整数值的数据库对象,其典型的用途是创建全局唯一的序列号,以标识数据表中的一条数据记录。在数据表中的数据记录条数较少时,可直接在存放该数据表的数据库中创建一张序列表,在新增数据记录时,服务器从该序列表中获取序列号,并利用该序列号标识新增的数据记录。若数据库中需要记录的数据记录数量达到或超过一定规模后(如1000万),随着数据记录条数的继续增加,如果所有的数据记录都记录在同一数据表中,则对该数据表中的数据记录进行读、写操作的性能将会明显下降。因此,可将数据记录记载在多个数据表中,并将多个数据表存放于一个或多个数据库中,且为每个数据记录分配一个序列号。具体地,当有一个新增的数据记录需要写入数据库时,从序列表中获取一个序列号分配给当前新增的数据记录,完成数据记录的写入操作。具体地,从序列表中获取分配给数据记录的序列号的方式包括以下两种:第一种方式:在存储数据表的多个数据库中选择一个数据库,用于建立并存储序列表,所述序列表中有一个设定字段。当服务器需要获取序列号向数据库中写入数据记录时,从所述序列表中获取一个可用的序列号。在第一种序列号的获取方式下,存在单点风险,即当负责建立并存储序列表的数据库出现故障时,序列号的获取操作将无从进行,导致数据记录的写入操作也将无法进行。第二种方式:分别在每个数据库中建立一张序列表,并为该序列表分配一段序列号区间,在系统运行时,当服务器需要向某一数据库中写入数据记录时,则从该数据库中的序列表中获取序列号,也就是说,一个数据库中序列表内的序列号分配给同一数据库中的数据记录。在第二种序列号的获取方式下,可以避免单点风险,但由于为每个数据库分配了固定的序列号区间,这些序列号只能分配给同一数据库中的数据记录,因此,可能会出现部分数据库中的序列号耗尽,但部分数据库中序列号使用率较低的情况。另外,在对数据库进行扩展时,可能需要将一个数据库拆分为多个数据库,同时也要将拆分前数据库的序列表拆分为多个,此时,若在拆分前序列表中的部分序列号已被使用过,则可能导致拆分后的序列表无法合理分配给各拆分后的数据库。例如:数据库I的序列表I中的序列号为O999,其中,O300的序列号已被使用过,则数据库I被拆分为数据库11和数据库12时,若序列表I也拆分为序列表11和序列表12,且序列表11中的序列号为O499,序列表12中的序列号为500999,则由于序列表11中的部分序列号已被使用过,导致数据库的扩展效果较差。
发明内容本申请实施例提供一种序列号的处理方法及设备,用以解决现有技术中由于部分数据库中的序列号耗尽后,就无法向该数据库继续写入数据记录的问题。—种序列号的处理方法,包括:服务器在需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,并读取选择的数据库中的序列表;服务器从读取的序列表中获取N个可用序列号,所述N为正整数;服务器根据获取的可用序列号将所述数据记录写入数据库中。一种序列号的处理设备,包括:选择模块,用于在需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,并读取选择的数据库中的序列表;获取模块,用于从读取的序列表中获取N个可用序列号,所述N为正整数;写入模块,用于根据获取的可用序列号将所述数据记录写入数据库中。本申请有益效果如下:在本申请实施例提供的方案中,当服务器需要向数据库中写入数据记录时,由于服务器可以按查询顺序从多个数据库中选择一个数据库的序列表来获取序列号,并不局限于某一个数据库中序列表来获取序列号,有效的弱化了序列表和数据库之间的依赖关系,实现了序列号的共享,即使出现某一数据库中的序列号耗尽或数据库故障的情况,服务器仍然可以从其他数据库中获取序列号,克服了由于部分数据库中的序列号耗尽后,就无法向该数据库继续写入数据记录的问题。图1为本申请实施例一序列号的处理方法步骤示意图;图2为本申请实施例二序列号的处理方法步骤示意图;图3为本申请实施例三序列号的处理设备结构示意图。具体实施例方式为实现本申请目的,本申请实施例提出一种序列号的处理方案,当服务器需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,读取选择的数据库中的序列表,以及从读取的序列表中获取N(N为正整数)个可用序列号,并使用可用序列号将所述数据记录写入数据库中。由于服务器可以按查询顺序从多个数据库中选择一个数据库的序列表来获取序列号,并不局限于某一个数据库中序列表来获取序列号,有效的弱化了序列表和数据库之间的依赖关系,实现了序列号的共享,即使出现某一数据库中的序列号耗尽或数据库故障的情况,服务器仍然可以从其他数据库中获取序列号,克服了由于部分数据库中的序列号耗尽后,就无法向该数据库继续写入数据记录的问题。下面结合说明书附图对本申请实施例的方案进行详细描述。实施例一如图1所示,其为本申请实施例一中序列号的处理方法步骤示意图,所述方法包括以下步骤:步骤101:服务器在需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,并读取选择的数据库中的序列表。通常情况下,一个数据库架构中可以包含多个服务器和多个数据库,任一一个服务器可以对属于同一数据库架构中的各数据库进行数据记录的查询、写入、删除等操作;较优的,考虑到在实际过程中,当业务系统启动时,可能会出现多个服务器同时从某一数据库的序列表中获取序列号的情况,会造成序列号抢占冲突,为了降低出现序列号抢占冲突的概率,服务器按照设定的数据库查询顺序,从多个数据库中选择一个数据库的方式具体可以为:若服务器首次向数据库中写入数据记录,则从所述多个数据库中随机选择一个数据库;若服务器不是首次向数据库中写入数据记录,则确定上一次选择的数据库,并根据所述数据库查询顺序,确定当前选择的数据库,例如:将数据库按照命名或其他方式进行排列,在确定上一次选择的数据库后,将与上一次选择的数据库相邻的下一数据库作为当前选择的数据库,若上一次选择的是排列在最后的一个数据库,则可将排列在第一位的数据库作为当前选择的数据库。所述首次向数据库中写入数据记录是指,业务系统启动后,服务器上电后第一次执行数据记录写入操作。在本步骤101的方案中,服务器在需要向任一数据库中写入数据记录时,都可以按照本步骤101的方案执行。本实施例中的序列表是在创建数据库时,利用诸如数据库结构化查询语言(SQL)等计算机语言创建的。序列表可以用来存放序列号以及序列号的生成信息,在服务器对数据库进行一条数据记录的写入操作时,需要从序列表中获取一个序列号,以标识该条数据记录。在本实施例的方案中,包括但不限于以下三种方式在序列表中生成序列号:第一种方式:根据为每个数据库中设置的标号来确定数据库中序列表的初始序列号,进而按照一定的增长步长增长同一序列表中的其他序列号,具体可以为:第一步,按照标号从小到大的顺序,依次为各数据库设置标号。第二步,将数据库的标号作为该数据库中序列表的初始序列号,并判断所述多个数据库的数量D是否为2的指数倍,所述D为大于I的正整数,若是,则执行第三步,若否,则执行第四步。第三步,针对任一数据库中的序列表,将该序列表中的初始序列号依次以D为增长步长,得到的序列号与该初始序列号一起作为该序列表中的序列号,此时,完成序列号的生成操作。第四步,确定小于D且距离D最近的2的指数倍数值X。第五步,针对标号不小于D-X且小于X的数据库中的序列表,将该序列表中的初始序列号依次以X为增长步长,得到的序列号作为该序列表中的序列号;针对剩余数据库中的序列表,将该序列表中的初始序列号依次以2X为增长步长,得到的序列号作为该序列表中的序列号。例如,假设数据库数目D为4,也就是数据库的数量D是2的指数倍的情况,此时,可设定各数据库标号为0、1、2、3,各数据库中序列表的初始序列号分别为0、1、2、3。针对标号为O的数据库,其中序列表的初始序列号为0,并以4为增长步长,得到的序列号4、8、12、16,...与O—起作为标号为O的数据库中序列表的序列号。针对其他数据库中序列表的序列号生成过程类似。再例如,假设数据库数目D为5,也就是数据库的数量D不是2的指数倍的情况,此时,仍可设定各数据库标号为0、1、2、3、4,各数据库中序列表的初始序列号分别为0、1、2、3、4。与5最接近的2的指数倍数值X为4。标号不小于D-X且小于X的数据库为数据库1、数据库2和数据库3,以数据库I为例,该数据库I中初始序列号为1,并以4为增长步长,得到的序列号5、9、13、17、...与I一起作为标号为I的数据库中序列表的序列号;针对数据库2和数据库3,其做法与针对数据库I的做法相同。剩余的标号为O和4的数据库,以标号为O的数据库为例,该数据库O中初始序列号为0,并以8为增长步长,得到的序列号8、16、24、32、...与O—起作为标号为O的数据库中序列表的序列号;针对数据库4,其做法与针对数据库O的做法相同。需要说明的是,在第一种方式下,数据库的标号是默认从O开始依次增加I的数字命名方式来设定的,本实施例也不限于其他利用数字命名方式(如从I开始)来为数据库设定标号。通过上述第一种方式,由于是针对2的指数倍数值来确定增长步长,因此,可简便地实现对数据库以及数据库中序列表的拆分。例如,当某一数据库需要拆分为K个子数据库时,所述数据库中的序列表也可拆分为K个子序列表,其中:所述K个子序列表中的任一子序列表的初始序列号为:拆分前序列表中可用的最小K个序列号中的一个序列号,且任意两个子序列表的初始序列号不相同,同时,任一子序列表中序列号间的增长步长为拆分前序列表中序列号间步长的K倍。例如,假设拆分前数据库I中序列表I的序列号分别为0、4、8、12、16、20、....,其初始序列号为0,增长步长为4。当该数据库I拆分为数据库11和数据库12时,针对数据库11的序列表11中序列号为:0、8、16、24、...,其初始序列号为0,步长为8;针对数据库12的序列表12中序列号为:4、12、20、28...,其初始序列号为4,步长为8。第二种方式:第一步,按照标号从小到大的顺序,依次为各数据库设置标号。第二步,将数据库的标号作为该数据库中序列表的初始序列号。第三步,针对任一序列表,将该序列表中的初始序列号依次以D为增长步长,得到的序列号作为该序列表中的序列号。例如,假设数据库的数目D为5,设定各数据库标号为0、1、2、3、4,各数据库中序列表的初始序列号分别为0、1、2、3、4。针对标号为O的数据库,其中序列表的初始序列号为0,并以5为增长步长,得到的序列号5、10、15、20、...与O—起作为标号为O的数据库中序列表的序列号。针对其他数据库中序列表的序列号生成过程类似。第三种方式:为各数据库中的序列表设定序列号区间。步骤102:服务器从读取的序列表中获取N个可用序列号,所述N为正整数。本步骤102的具体实现方式包括但不限于以下两种方式:第一种方式:服务器从数据库的序列表中查找还没有使用过的序列号,并从还没有使用过的序列号中选择N个序列号作为本步骤102中的N个可用序列号。第二种方式:为了避免多个服务器从同一数据库中同时获取序列号导致抢占冲突的问题,第二种方式对第一种方式进行优化,具体如下:第一步,服务器读取选择的数据库中序列表的下一可用序列号Current_next_Value0在本实施例的方案,服务器每当从序列表中获取N个序列号后,可将该序列表中与本次获取的N个序列号中最后一个序列号相邻的下一个没有使用过的序列号作为Current—next_value。例如,某一序列表中序列号为:0、4、8、12、16、20、...,服务器某次获取的4个序列号为0、4、8、12,则将16作为Current_next_value回写至该序列表中。第二步,服务器根据公式(I)更新读取的Current_next_value:Current_next_value_new=Current_next_value+increase_stepXN(I)其中,Current_next_value_new为更新后的下一可用序列号,increase_step为增长步长,N为序列表中从Current_next_value起连续获取的序列号的个数。第三步,服务器判断Current_next_value_new是否能够回写至序列表中,若是,则执行第四步;若否,则执行第五步。由于可能出现多个服务器同时从同一数据库获取序列号的情况,因此,当服务器I将Current_next_value_new回写至序列表时,若已有其他服务器2抢先从该数据库获取了序列表,也就是说,服务器2已先于服务器I按照上述公式(I)计算出Current_neXt_value_new并回写至序列表中,因此,服务器I将无法再次写入相同内容或是数值较小的Current_next_value_new;若此时没有其他服务器2抢先获取序列表,则服务器I根据公式(I)计算出的Current_next_value_new大于序列表中当前已存储的Current_next_value,因此,服务器I可从该序列表中获取可用的序列号。第四步,服务器将所述Current_next_value_new回写至序列表,此时,序列表中的Current_next_value的内容更新为Current_next_value_new的内容,并将从序列表中读取的从Current_next_value起连续的N个序列号作为获取的N个可用的序列号。例如,某一序列表中序列号增长步长为4,内容分别为:0、4、8、12、16、20、24、28、32,...,服务器每次获取的序列号数量N为4。若在第一步获取的某次获取的Current_next_value为16,则通过公式(I)计算出的Current_next_value_new为32,此时,该Current_next_value_new为32的值能够回写至序列表,服务器可将16、20、24、28作为获取的4个可用的序列号。第五步,服务器按照数据库查询顺序读取下一个数据库,并针对所述下一个数据库跳转重新开始执行第一步,直至获取N个可用的序列号。步骤103:服务器根据获取的可用序列号将所述数据记录写入数据库中。步骤104:服务器再次需要向数据库中写入数据记录时,判断已获取的N个可用序列号是否都已使用过,若是,则执行步骤105;若否,则执行步骤106。步骤105:重新执行按照设定的数据库查询顺序,跳转至步骤101。步骤106:从所述已获取的N个可用序列号中选择还没有使用过的可用序列号,并根据选择的所述可用序列号将数据记录写入数据库中。本实施例方案应用在SQL数据库系统、Oracel数据库系统或其他数据库系统中,可以但不局限于利用SQL语言来实现。实施例二考虑到服务器在获取序列号时的避免抢占冲突及确保各服务器获取的序列号的唯一性,确保数据库的一致性和完整性,本实施例二结合锁技术来详细描述本实施例一的优选实现方案。如图2所示,其为本申请实施例二中序列号的处理方法步骤示意图,所述方法包括以下步骤:步骤201:服务器获取同步锁。所述同步锁锁定的粒度为数据组表。所述数据组表为所述多个数据库中的每个数据库中记录同一业务的数据表的总称,组成数据组表的数据表中的每条数据记录均需获得全局唯一的可用序列号。在本步骤201中获取同步锁可避免多个服务器发起的请求并发问题,在一个时间点只允许一个线程尝试获取一个数据库中的序列号。较优的,本方案若用编程来实现,则其核心数据结构可以为下述形式:tabIe_group_name//需要使用全局唯一序列号的数据组表的名称,每个分//组之间相互独立,相同table_group_name的序列表记Il录负责维护同一组数据表的序列号,该序列号字段在//序列表中需要确保唯一性current_next_value//当前下一个有效的值,每次程序申领序列号时,都会Il将本批有效序列号的最大值的下一个有效值更新到//current_next_value中increase_step//每个序列号增长的步长,在本申请的实施例中其值为//X或2Xtake_patch//系统每次批量获取的有效序列号的个数,在本申请的//实施例中其值为N步骤202:服务器判断本地是否有可用序列号,若是,则利用该可用序列号进行数据记录的写入操作,否则,执行步骤203。若本步骤202是服务器上首次发出的获取可用序列号的请求,则可按照实施例一中步骤102的方式从随机选择的数据库中获取N个可用序列号;否则,服务器判断上一次从数据库中获取的N个可用序列号是否已用尽,若是,则执行步骤203,继续从数据库中获取N个可用序列号,否则,直接使用本地已存储的还没有使用过的可用序列号。步骤203:服务器等待发出获取可用序列号的请求。步骤204:服务器向数据库发出获取可用序列号的请求,从该数据库中获取序列表中的Current_next_value步骤205:服务器可采用宽松的加锁方式(乐观锁方式),避免发生更新冲突,以及根据所述Current_next_value计算出Current_next_value_new,并判断Current_next_value_new能否回写至序列表,若能,则执行步骤206;否则,执行步骤207。步骤206:服务器将所述Current_next_value_new回写至序列表,并将从序列表中读取的从Current_next_value起连续的N个序列号作为获取的N个可用的序列号,写入本地缓存,并利用该可用序列号进行数据记录的写入操作,并释放同步锁和乐观锁。在本实施例的方案中,服务器当前处理的序列表可称之为当前序列表,因此,在本步骤206中,服务器可预先设定下一数据库中的序列表作为当前序列表,以便于下一次获取N个可用序列号使用。步骤207:服务器按照数据库查询顺序读取下一个数据库,并跳转至步骤204。在本实施例的方案中,服务器当前处理的序列表可称之为当前序列表,因此,在本步骤207中,服务器将下一数据库中的序列表作为当前序列表,重新从中获取N个可用序列号。通过本实施例二的方式不论是否能够获取可用的N个序列号,只要退出条件满足(如退出时间到达或无可用序列号),就退出本实施例的方案,结束针对序列号的获取操作。实施例三本申请实施例三提出一种与实施例一相同构思下的序列号处理设备,如图3所示,包括:选择模块11、获取模块12和写入模块13,其中:选择模块11,用于在需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,并读取选择的数据库中的序列表;获取模块12,用于从读取的序列表中获取N个可用序列号,所述N为正整数;写入模块13,用于根据获取的可用序列号将所述数据记录写入数据库中。具体的,所述选择模块11,包括:第一选择单元21,用于若首次向数据库中写入数据记录,则从所述多个数据库中随机选择一个数据库。第二选择单元22,用于若不是首次向数据库中写入数据记录,则确定上一次选择的数据库,并根据所述数据库查询顺序,确定当前选择的数据库。较优的,所述设备还包括:标号设置模块14,用于为所述多个数据库中的每个数据库按照标号从小到大的顺序依次设置标号。序列号生成模块15,用于针对任一数据库中的序列表,通过以下方式生成序列表中的序列号:将数据库的标号作为该数据库中序列表的初始序列号,并判断所述多个数据库的数量D是否为2的指数倍,所述D为大于I的正整数;若是,针对任一数据库中的序列表,将该序列表中的初始序列号依次以D为增长步长得到的序列号作为该序列表中的序列号;若否,确定小于D且距离D最近的2的指数倍数值X;针对标号不小于D-X且小于X的数据库中的序列表,将该序列表中的初始序列号依次以X为增长步长得到的序列号作为该序列表中的序列号;针对剩余数据库中的序列表,将该序列表中的初始序列号依次以2X为增长步长得到的序列号作为该序列表中的序列号。较优的,所述设备还包括:拆分模块16,用于当任一数据库需要拆分为K个子数据库时,所述数据库中的序列表也拆分为K个子序列表,所述K为大于I的正整数;其中:所述K个子序列表中的任一子序列表的初始序列号为:拆分前序列表中可用的最小K个序列号中的一个序列号,且任意两个子序列表的初始序列号不相同,任一子序列表中序列号间的增长步长为拆分前序列表中序列号间步长的K倍。较优的,所述获取模块12具体包括:读取单元31,用于读取选择的数据库中序列表的下一可用序列号Current_next_Value0更新单元32,用于根据以下公式更新读取的Current_next_value:Current_next_value_new=Current_next_value+increase_stepXN其中,Current_next_value_new为更新后的下一可用序列号,increase_step为增长步长,N为序列表中从Current_next_value起连续获取的序列号的个数。判断单元33,用于判断Current_next_value_new是否能够回写至序列表中。获取单元34,用于当判断单元判断结果为是时,将所述Current_next_value_new回写至序列表,并将从序列表中读取的从Current_next_value起连续的N个序列号为获取的N个可用的序列号。跳转单元35,用于当判断单元判断结果为否时,按照数据库查询顺序读取下一个数据库中序列表的Current_next_value,并跳转至更新单元32。较优的,所述设备还包括:判断模块17,用于再次需要向数据库中写入数据记录时,判断从所述获取模块12获取的N个可用序列号是否都已使用过。第一跳转模块18,用于当判断模块的结果为是时,跳转至选择模块11。第二跳转模块19,用于当判断模块的结果为否时,跳转至写入模块13。通过本申请实施例一、实施例二及实施例三提供的序列号处理的方法及设备,由于服务器可以按查询顺序从多个数据库中选择一个数据库的序列表来获取序列号,并不局限于某一个数据库中序列表来获取序列号,有效的弱化了序列表和数据库之间的依赖关系,实现了序列号的共享,即使出现某一数据库中的序列号耗尽或数据库故障的情况,服务器仍然可以从其他数据库中获取序列号,克服了由于部分数据库中的序列号耗尽后,就无法向该数据库继续写入数据记录的问题;优选地,在为各个数据库中的序列表生成序列号时,以2的指数倍为基础,使数据库的拆分以及数据库中序列表的拆分更加便利;再优选地,本实施例的方案在获取N个可用序列号的过程中,使用了同步锁和乐观锁,避免了因多个服务器同时从某一数据库的序列表中获取可用序列号引起的序列号抢占冲突及在序列号更新过程中的抢占冲突,确保了数据库的一致性和完整性。本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。权利要求1.一种序列号的处理方法,其特征在于,包括:服务器在需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,并读取选择的数据库中的序列表;服务器从读取的序列表中获取N个可用序列号,所述N为正整数;服务器根据获取的可用序列号将所述数据记录写入数据库中。2.如权利要求1所述的序列号的处理方法,其特征在于,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,具体包括:若服务器首次向数据库中写入数据记录,则从所述多个数据库中随机选择一个数据库;若服务器不是首次向数据库中写入数据记录,则确定上一次选择的数据库,并根据所述数据库查询顺序,确定当前选择的数据库。3.如权利要求1所述的序列号的处理方法,其特征在于,在服务器需向数据库中写入数据记录之前,所述方法还包括:为所述多个数据库中的每个数据库按照标号从小到大的顺序依次设置标号;针对任一数据库中的序列表,通过以下方式生成序列表中的序列号:将数据库的标号作为该数据库中序列表的初始序列号,并判断所述多个数据库的数量D是否为2的指数倍,所述D为大于I的正整数;若是,针对任一数据库中的序列表,将该序列表中的初始序列号依次以D为增长步长得到的序列号作为该序列表中的序列号;若否,确定小于D且距离D最近的2的指数倍数值X;针对标号不小于D-X且小于X的数据库中的序列表,将该序列表中的初始序列号依次以X为增长步长得到的序列号作为该序列表中的序列号;针对剩余数据库中的序列表,将该序列表中的初始序列号依次以2X为增长步长得到的序列号作为该序列表中的序列号。4.如权利要求3所述的序列号的处理方法,其特征在于,所述方法还包括:当任一数据库需要拆分为K个子数据库时,所述数据库中的序列表也拆分为K个子序列表,所述K为大于I的正整数;其中:所述K个子序列表中的任一子序列表的初始序列号为:拆分前序列表中可用的最小K个序列号中的一个序列号,且任意两个子序列表的初始序列号不相同,任一子序列表中序列号间的增长步长为拆分前序列表中序列号间步长的K倍。5.如权利要求3所述的序列号的处理方法,其特征在于,服务器通过以下方式获取N个可用序列号:服务器读取选择的数据库中序列表的下一可用序列号Current_next_value;服务器根据以下公式更新读取的Current_next_value:Current_next_value_new=Current_next_value+increase_stepXN其中,Current_next_value_new为更新后的下一可用序列号,increase_step为增长步长,N为序列表中从Current_next_value起连续获取的序列号的个数;服务器判断Current_next_value_new是否能够回写至序列表中;若是,则将所述Current_next_value_new回写至序列表,并将从序列表中读取的从Current_next_value起连续的N个序列号为获取的N个可用的序列号;若否,服务器按照数据库查询顺序读取下一个数据库中序列表的Current_neXt_value,并重复执行根据所述公式得到Current_next_value_new,以及判断Current_next_value_new是否能够回写至序列表的操作。6.如权利要求1所述的序列号的处理方法,其特征在于,所述方法还包括:服务器再次需要向数据库中写入数据记录时,判断已获取的N个可用序列号是否都已使用过;若是,则重新执行按照设定的数据库查询顺序,从多个数据库中选择一个数据库的操作;若否,从所述已获取的N个可用序列号中选择还没有使用过的可用序列号,并根据选择的所述可用序列号将数据记录写入数据库中。7.—种序列号的处理设备,其特征在于,包括:选择模块,用于在需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,并读取选择的数据库中的序列表;获取模块,用于从读取的序列表中获取N个可用序列号,所述N为正整数;写入模块,用于根据获取的可用序列号将所述数据记录写入数据库中。8.如权利要求7所述的序列号的处理设备,其特征在于,所述选择模块,具体包括:第一选择单元,用于若首次向数据库中写入数据记录,则从所述多个数据库中随机选择一个数据库;第二选择单元,用于若不是首次向数据库中写入数据记录,则确定上一次选择的数据库,并根据所述数据库查询顺序,确定当前选择的数据库。9.如权利要求7所述的序列号的处理设备,其特征在于,所述设备还包括:标号设置模块,用于为所述多个数据库中的每个数据库按照标号从小到大的顺序依次设置标号;序列号生成模块,用于针对任一数据库中的序列表,通过以下方式生成序列表中的序列号:将数据库的标号作为该数据库中序列表的初始序列号,并判断所述多个数据库的数量D是否为2的指数倍,所述D为大于I的正整数;若是,针对任一数据库中的序列表,将该序列表中的初始序列号依次以D为增长步长得到的序列号作为该序列表中的序列号;若否,确定小于D且距离D最近的2的指数倍数值X;针对标号不小于D-X且小于X的数据库中的序列表,将该序列表中的初始序列号依次以X为增长步长得到的序列号作为该序列表中的序列号;针对剩余数据库中的序列表,将该序列表中的初始序列号依次以2X为增长步长得到的序列号作为该序列表中的序列号。10.如权利要求9所述的序列号的处理设备,其特征在于,所述设备还包括:拆分模块,用于当任一数据库需要拆分为K个子数据库时,所述数据库中的序列表也拆分为K个子序列表,所述K为大于I的正整数;其中:所述K个子序列表中的任一子序列表的初始序列号为:拆分前序列表中可用的最小K个序列号中的一个序列号,且任意两个子序列表的初始序列号不相同,任一子序列表中序列号间的增长步长为拆分前序列表中序列号间步长的K倍。全文摘要本申请提出一种序列号的处理方法及设备,当服务器需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,读取选择的数据库中的序列表,以及从读取的序列表中获取N个可用序列号,并使用可用序列号将所述数据记录写入数据库中。由于服务器可以按查询顺序从多个数据库中选择一个数据库的序列表来获取序列号,并不局限于某一个数据库中序列表来获取序列号,有效的弱化了序列表和数据库之间的依赖关系,实现了序列号的共享,即使出现某一数据库中的序列号耗尽或数据库故障的情况,服务器仍然可以从其他数据库中获取序列号,克服了由于部分数据库中的序列号耗尽后,就无法向该数据库继续写入数据记录的问题。文档编号G06F17/30GK103164418SQ201110412749公开日2013年6月19日申请日期2011年12月12日优先权日2011年12月12日发明者谢智永申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1