一种序列号的处理方法及设备技术

技术编号:8834273 阅读:179 留言:0更新日期:2013-06-22 20:30
本申请提出一种序列号的处理方法及设备,当服务器需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,读取选择的数据库中的序列表,以及从读取的序列表中获取N个可用序列号,并使用可用序列号将所述数据记录写入数据库中。由于服务器可以按查询顺序从多个数据库中选择一个数据库的序列表来获取序列号,并不局限于某一个数据库中序列表来获取序列号,有效的弱化了序列表和数据库之间的依赖关系,实现了序列号的共享,即使出现某一数据库中的序列号耗尽或数据库故障的情况,服务器仍然可以从其他数据库中获取序列号,克服了由于部分数据库中的序列号耗尽后,就无法向该数据库继续写入数据记录的问题。

【技术实现步骤摘要】

本申请涉及计算机
,尤其涉及一种序列号的处理方法及设备
技术介绍
序列表是用于创建唯一连续整数值的数据库对象,其典型的用途是创建全局唯一的序列号,以标识数据表中的一条数据记录。在数据表中的数据记录条数较少时,可直接在存放该数据表的数据库中创建一张序列表,在新增数据记录时,服务器从该序列表中获取序列号,并利用该序列号标识新增的数据记录。若数据库中需要记录的数据记录数量达到或超过一定规模后(如1000万),随着数据记录条数的继续增加,如果所有的数据记录都记录在同一数据表中,则对该数据表中的数据记录进行读、写操作的性能将会明显下降。因此,可将数据记录记载在多个数据表中,并将多个数据表存放于一个或多个数据库中,且为每个数据记录分配一个序列号。具体地,当有一个新增的数据记录需要写入数据库时,从序列表中获取一个序列号分配给当前新增的数据记录,完成数据记录的写入操作。具体地,从序列表中获取分配给数据记录的序列号的方式包括以下两种:第一种方式:在存储数据表的多个数据库中选择一个数据库,用于建立并存储序列表,所述序列表中有一个设定字段。当服务器需要获取序列号向数据库中写入数据记录时,从所述序列表中获取一个可用的序列号。在第一种序列号的获取方式下,存在单点风险,即当负责建立并存储序列表的数据库出现故障时,序列号的获取操作将无从进行,导致数据记录的写入操作也将无法进行。第二种方式:分别在每个数据库中建立一张序列表,并为该序列表分配一段序列号区间,在系统运行时,当服务器需要向某一数据库中写入数据记录时,则从该数据库中的序列表中获取序列号,也就是说,一个数据库中序列表内的序列号分配给同一数据库中的数据记录。在第二种序列号的获取方式下,可以避免单点风险,但由于为每个数据库分配了固定的序列号区间,这些序列号只能分配给同一数据库中的数据记录,因此,可能会出现部分数据库中的序列号耗尽,但部分数据库中序列号使用率较低的情况。另外,在对数据库进行扩展时,可能需要将一个数据库拆分为多个数据库,同时也要将拆分前数据库的序列表拆分为多个,此时,若在拆分前序列表中的部分序列号已被使用过,则可能导致拆分后的序列表无法合理分配给各拆分后的数据库。例如:数据库I的序列表I中的序列号为O 999,其中,O 300的序列号已被使用过,则数据库I被拆分为数据库11和数据库12时,若序列表I也拆分为序列表11和序列表12,且序列表11中的序列号为O 499,序列表12中的序列号为500 999,则由于序列表11中的部分序列号已被使用过,导致数据库的扩展效果较差。
技术实现思路
本申请实施例提供一种序列号的处理方法及设备,用以解决现有技术中由于部分数据库中的序列号耗尽后,就无法向该数据库继续写入数据记录的问题。—种序列号的处理方法,包括:服务器在需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,并读取选择的数据库中的序列表;服务器从读取的序列表中获取N个可用序列号,所述N为正整数;服务器根据获取的可用序列号将所述数据记录写入数据库中。一种序列号的处理设备,包括:选择模块,用于在需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,并读取选择的数据库中的序列表;获取模块,用于从读取的序列表中获取N个可用序列号,所述N为正整数;写入模块,用于根据获取的可用序列号将所述数据记录写入数据库中。本申请有益效果如下:在本申请实施例提供的方案中,当服务器需要向数据库中写入数据记录时,由于服务器可以按查询顺序从多个数据库中选择一个数据库的序列表来获取序列号,并不局限于某一个数据库中序列表来获取序列号,有效的弱化了序列表和数据库之间的依赖关系,实现了序列号的共享,即使出现某一数据库中的序列号耗尽或数据库故障的情况,服务器仍然可以从其他数据库中获取序列号,克服了由于部分数据库中的序列号耗尽后,就无法向该数据库继续写入数据记录的问题。附图说明图1为本申请实施例一序列号的处理方法步骤示意图;图2为本申请实施例二序列号的处理方法步骤示意图;图3为本申请实施例三序列号的处理设备结构示意图。具体实施例方式为实现本申请目的,本申请实施例提出一种序列号的处理方案,当服务器需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,读取选择的数据库中的序列表,以及从读取的序列表中获取N(N为正整数)个可用序列号,并使用可用序列号将所述数据记录写入数据库中。由于服务器可以按查询顺序从多个数据库中选择一个数据库的序列表来获取序列号,并不局限于某一个数据库中序列表来获取序列号,有效的弱化了序列表和数据库之间的依赖关系,实现了序列号的共享,即使出现某一数据库中的序列号耗尽或数据库故障的情况,服务器仍然可以从其他数据库中获取序列号,克服了由于部分数据库中的序列号耗尽后,就无法向该数据库继续写入数据记录的问题。下面结合说明书附图对本申请实施例的方案进行详细描述。实施例一如图1所示,其为本申请实施例一中序列号的处理方法步骤示意图,所述方法包括以下步骤:步骤101:服务器在需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,并读取选择的数据库中的序列表。通常情况下,一个数据库架构中可以包含多个服务器和多个数据库,任一一个服务器可以对属于同一数据库架构中的各数据库进行数据记录的查询、写入、删除等操作;较优的,考虑到在实际过程中,当业务系统启动时,可能会出现多个服务器同时从某一数据库的序列表中获取序列号的情况,会造成序列号抢占冲突,为了降低出现序列号抢占冲突的概率,服务器按照设定的数据库查询顺序,从多个数据库中选择一个数据库的方式具体可以为:若服务器首次向数据库中写入数据记录,则从所述多个数据库中随机选择一个数据库;若服务器不是首次向数据库中写入数据记录,则确定上一次选择的数据库,并根据所述数据库查询顺序,确定当前选择的数据库,例如:将数据库按照命名或其他方式进行排列,在确定上一次选择的数据库后,将与上一次选择的数据库相邻的下一数据库作为当前选择的数据库,若上一次选择的是排列在最后的一个数据库,则可将排列在第一位的数据库作为当前选择的数据库。所述首次向数据库中写入数据记录是指,业务系统启动后,服务器上电后第一次执行数据记录写入操作。在本步骤101的方案中,服务器在需要向任一数据库中写入数据记录时,都可以按照本步骤101的方案执行。本实施例中的序列表是在创建数据库时,利用诸如数据库结构化查询语言(SQL)等计算机语言创建的。序列表可以用来存放序列号以及序列号的生成信息,在服务器对数据库进行一条数据记录的写入操作时,需要从序列表中获取一个序列号,以标识该条数据记录。在本实施例的方案中,包括但不限于以下三种方式在序列表中生成序列号:第一种方式:根据为每个数据库中设置的标号来确定数据库中序列表的初始序列号,进而按照一定的增长步长增长同一序列表中的其他序列号,具体可以为:第一步,按照标号从小到大的顺序,依次为各数据库设置标号。第二步,将数据库的标号作为该数据库中序列表的初始序列号,并判断所述多个数据库的数量D是否为2的指数倍,所述D为大于I的正整数,若是,则执行第三步,若否,则执行本文档来自技高网
...

【技术保护点】
一种序列号的处理方法,其特征在于,包括:服务器在需要向数据库中写入数据记录时,按照设定的数据库查询顺序,从多个数据库中选择一个数据库,并读取选择的数据库中的序列表;服务器从读取的序列表中获取N个可用序列号,所述N为正整数;服务器根据获取的可用序列号将所述数据记录写入数据库中。

【技术特征摘要】
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_step X N其中,Current_next_value_new为更新后的下一可用序列号,increase_step为增长步长,N为序列表中从Current_next_value起连续获取的序列号的个数; 服务器判断Current_next_value_new是否能够回写至序列表中; 若是,则将所述Current_next_value_new回写至序列表,并将从...

【专利技术属性】
技术研发人员:谢智永
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1