基于数据库系统的流水号生成方法转让专利

申请号 : CN201210219713.8

文献号 : CN103514216B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘宾冀乃庚李筑埭傅宜生

申请人 : 中国银联股份有限公司

摘要 :

本发明公开了一种基于数据库系统的流水号生成方法,所述流水号用于区分与所述数据库进行通信的多个单机中的业务,所述流水号生成方法包括:在接收到访问所述数据库的流水号请求进程提出的流水号分配请求时,将当前第一个可用流水号为首的一段连续的流水号分配给流水号服务进程;以及将分配给所述流水号服务进程的流水号从当前可用流水号中清除。通过使用本发明,可以提高系统的性能并且在数据库系统发生问题时仍然提供稳定的服务。

权利要求 :

1. 一种基于数据库系统的流水号生成方法,所述流水号用于区分与所述数据库进行通信的多个单机中的业务,所述流水号生成方法包括:在接收到访问所述数据库的流水号请求进程提出的流水号分配请求时,将当前第一个可用流水号为首的一段连续的流水号分配给流水号服务进程;以及将分配给所述流水号服务进程的流水号从当前可用流水号中清除,

其中,所述数据库包括主用数据库和备用数据库,并且在正常情况下由主用数据库提供服务,当主用数据库出现问题并因而由备用数据库提供服务时,第一个访问所述备用数据库的流水号服务进程将以现有的流水号段为基础,跳过一段范围后作为下一段流水号的起始可用值,同时更新所述备用数据库中的当前第一个可用流水号。

2.如权利要求1所述的流水号生成方法,其中,分配给所述流水号服务进程的流水号的数目小于所述数据库中流水号总范围的一半除以流水号服务进程的数目的结果。

3.如权利要求2所述的流水号生成方法,其中,流水号服务进程一次申请得到的流水号的数目大于每秒钟的业务峰值数除以流水号服务进程的数目的结果。

4.如权利要求1所述的流水号生成方法,其中所述业务是金融交易系统中发生的交易。

5.一种基于数据库系统的流水号生成方法,所述流水号用于区分与所述数据库进行通信的多个单机中的业务,所述流水号生成方法包括:由流水号请求进程访问所述数据库并且提出流水号分配请求;

获得所述数据库中当前第一个可用流水号为首的一段连续的流水号;以及在所获得的一段连续的流水号分配完之前,只将已经获得的流水号依次分配给业务而不再访问数据库,其中,所述数据库包括主用数据库和备用数据库,并且在正常情况下由主用数据库提供服务,当主用数据库出现问题并因而由备用数据库提供服务时,第一个访问所述备用数据库的流水号服务进程将以现有的流水号段为基础,跳过一段范围后作为下一段流水号的起始可用值,同时更新所述备用数据库中的当前第一个可用流水号。

6.如权利要求5所述的流水号生成方法,其中,当所述数据库操作失败时,对流水号请求进程在上一次向所述数据库申请到的流水号重新使用一次。

7.如权利要求5所述的流水号生成方法,其中,所述流水号服务进程一次分配到的流水号的数目小于所述数据库中流水号总范围的一半除以流水号服务进程的数目的结果。

8.如权利要求7所述的流水号生成方法,其中所述流水号服务进程获得的流水号的数目大于每秒钟的业务峰值除以流水号服务进程的数目的结果。

说明书 :

基于数据库系统的流水号生成方法

技术领域

[0001] 本发明总体上涉及数据库系统,尤其涉及对与数据库进行通信的单机中的业务分配流水号的技术。

背景技术

[0002] 在由数据库和多个与该数据库交互并独立地处理业务的单机组成的分布式计算机系统中,为了区别各个单机中进行的多个业务的目的,需要为每一笔业务分配唯一的流水号,流水号的取值在一定范围内循环反复,且在一定的时间范围内不重复出现。为保持系统的高可靠性以及高并发处理能力,目前的大多数这样的分布式计算机系统采用分布式并行的系统架构,但其中的流水号分配仍需按整体统一的方式生成。这种情况下,现有方案存在以下缺点:
[0003] 1、在多机、多应用的情况下,集中分配流水号对系统性能产生较大的不利影响;
[0004] 2、缺乏在系统主备切换过程中保持系统流水号一致性的能力;
[0005] 3、当系统从主机或数据库导致的故障中恢复后,系统流水号容易重复。
[0006] 目前尚没有能够很好地解决上述问题的方案。

发明内容

[0007] 为了至少解决上述问题的一个方面,本发明提出了一种基于数据库系统的流水号生成方法,所述流水号用于区分与所述数据库进行通信的多个单机中的业务,所述流水号生成方法包括:在接收到访问所述数据库的流水号请求进程提出的流水号分配请求时,将当前第一个可用流水号为首的一段连续的流水号分配给流水号服务进程;以及将分配给所述流水号服务进程的流水号从当前可用流水号中清除。
[0008] 根据本发明的一个方面的流水号生成方法中,一次分配给所述流水号服务进程的流水号的数目小于所述数据库中流水号总范围的一半除以流水号服务进程的数目的结果。
[0009] 根据本发明的一个方面的流水号生成方法中,流水号服务进程一次申请得到的流水号的数目大于每秒钟的业务峰值数除以流水号服务进程的数目的结果。
[0010] 根据本发明的一个方面的流水号生成方法中所述业务是金融交易系统中发生的交易。
[0011] 本发明提出了一种基于数据库系统的流水号生成方法,所述流水号用于区分与所述数据库进行通信的多个单机中的业务,所述流水号生成方法包括:由流水号请求进程访问所述数据库并且提出流水号分配请求;获得所述数据库中当前第一个可用流水号为首的一段连续的流水号;以及在所获得的一段连续的流水号分配完之前,只将已经获得的流水号依次分配给业务而不再访问数据库。
[0012] 根据本发明的一个方面的基于数据库系统的流水号生成方法,其中,所述数据库包括主用数据库和备用数据库,并且在正常情况下由主用数据库提供服务,当主用数据库出现问题并因而由备用数据库提供服务时,第一个访问所述备用数据库的流水号请求进程将以现有的流水号段为基础,跳过一段范围后作为下一段流水号的起始可用值,同时更新所述备用数据库中的当前第一个可用流水号。
[0013] 根据本发明的一个方面的流水号生成方法,其中,当所述数据库操作失败时,对流水号服务进程在上一次向所述数据库申请到的流水号重新使用一次。
[0014] 根据本发明的一个方面的流水号生成方法,其中,所述流水号服务进程一次分配到的流水号的数目小于所述数据库中流水号总范围的一半除以流水号服务进程的数目的结果。
[0015] 根据本发明的一个方面的流水号生成方法,其中所述流水号服务进程获得的流水号的数目大于每秒钟的业务峰值除以流水号服务进程的数目的结果。
[0016] 通过使用本发明,可以提高系统的性能并且在数据库系统发生问题时仍然提供稳定的服务。

附图说明

[0017] 为便于理解,下面参照附图通过非限定性例子来描述本发明的实施例。图中:
[0018] 图1示出了根据本发明的一个实施例的数据库系统的流水号生成方法的基本流程;
[0019] 图2示出了数据库系统的流水号生成方法在金融交易系统中的一个应用。

具体实施方式

[0020] 除非另加具体说明,正如从以下论述中也可以认识到的那样,在本说明书的通篇中,利用诸如“分配”、“获得”、“更新”之类术语的论述表示使用诸如计算机或类似电子计算装置之类的特定设备的动作或过程。在本说明书的上下文中,计算机或者类似电子计算装置能够操纵或变换信号。这些信号在计算机或类似电子计算装置的存储器、寄存器或者其它信息存储装置、传输装置或者显示装置中通常表示为物理电子或磁量。例如,电子计算装置可以包括执行一个或更多的特定功能的一个或更多的处理器。
[0021] 如图1所示,在本发明中,当系统接收到来自单机的流水号服务进程的流水号分配请求时,系统会给其分配从当前第一个可用的流水号开始的一段连续的流水号。然后,数据库更新其自身当前可用的流水号。这里,对流水号的分配请求只是在未分配或已分配的流水号段用完时才会发出。
[0022] 假设在某一时间点上,系统中可用的流水号为xxx01至xxx99,其中x表示一个0-9中的数字。当某一与该数据库通信的单机发来流水号分配请求时,该系统将从xxx01开始的一段例如20个流水号分配给该单机。该次分配过程中被分配的流水号将为xxx01-xxx20。然后,系统将其当前可用的流水号更新为xxx21至xxx99。当下一个单机发来流水号分配请求时,其获得的第一个流水号将为xxx21。
[0023] 单机在发出流水号分配请求时,可能遇到之前提供服务的主用数据库出现问题并因而转由备用数据库提供服务的情况。此时,该单机将以其流水号服务进程的内存中现有的流水号段为基础,跳过一段范围后的值作为下一段流水号的起始可用值,同时将所述备用数据库中的当前第一个可用流水号更新为所述起始可用值。
[0024] 由于分布式系统中存在多进程并发操作,因此,来自一个单机的一个进程会首先完成这个操作,为避免后续各个进程都以自身当前内存中使用的流水号段为准去更新数据库中的下一段可用流水号,进程更新数据库中的下一段可用流水号时,将根据时间戳先后的原则进行更新,即只有数据库中的数据更新时间比当前进程获取流水号段时的时间戳旧时,进程才会以自身当前的数据为准去更新数据库中的下一段可用流水号,否则,流水号服务进程仍以数据库中的当前数据为准获取得到一段可用的流水号范围,同时,更新数据库中的数据,产生下一段可用流水号。
[0025] 单机在发出流水号分配请求时,可能遇到的另一个情况是数据库操作失败,此时,可以对流水号服务进程在上一次向所述数据库申请到的流水号重新使用一次。
[0026] 为了既保证有效地降低单位时间内流水号分配请求的数目,又保证在数据库从主份到备份的切换过程中不至于出现问题,一次分配给所述流水号服务进程的流水号的数目可以设置为小于所述数据库中流水号总范围的一半除以流水号服务进程的数目的结果,并且大于每秒钟的业务峰值数除以流水号服务进程的数目的结果。
[0027] 上面已经对本发明的具体实施方式作出了详细的描述,本领域的技术人员已经可以充分了解实现本发明的优选方式。以下再对本发明在金融领域数据处理业务中的应用举一个例子。
[0028] 金融交易系统中广泛应用的一个系统是POS收单系统。其包括主用数据库、备用数据库,以及多个独立机构。正常情况下,独立机构和主用数据库通信。在主用数据库出现异常的情况下,由备用数据库接管主用数据库的工作。在交易处理时,多个机构的交易从数据库中分配到流水号,各机构间流水号可以重复,但一个机构内部的流水号分配需要保持唯一。
[0029] 如图2所示,在开始步骤S201之后,首先在步骤S202中获取机构代码。在步骤S203中,根据机构代码在独立机构系统的内存中查询机构的流水号。在步骤S204中检查内存中是否存在上述流水号。如果是,即说明之前曾经成功地从数据库中获取过一段流水号,则转向步骤S205,其中判断当前流水号是否大于当前区段最大值。如果判断的结果是“否”,即说明当前仍然有流水号可用,无须与数据库通信,则转向步骤S206,其中取机构当前可用流水号给请求者,并且在步骤S207中将内存中该机构当前可用流水号的数字加一。至此,当前可用的流水号已经是刚刚分配给请求者的流水号后的下一个流水号。
[0030] 如果在步骤S204中检查的结果是否,或者在步骤S205中判断的结果为“是”,则转向步骤S208。前者说明系统之前从未从数据库中获取到过流水号,后者则说明之前分配的流水号已经被用完。在步骤S208中要尝试从数据库获取此机构下一段的流水号。然后在步骤S209中判断数据库是否存在此机构的流水号信息,如果结果是“是”,则转向步骤S210,判断内存是否为空或者数据库记录新时间比内存中的新。如果是,则转向步骤S212,其中取用数据库中的流水号。如果在步骤S210中判断的结果是否,则转向步骤S211,在其中从内存中构造下一段可用流水号。然后转向步骤S213,更新数据库中下一段流水号段。同样,步骤S212后也转至步骤S213。步骤S213后转至步骤S206,其在上文中已经进行了介绍。
[0031] 如果在步骤S209中判断的结果为“否”,则转向步骤S214,其中判断内存中是否有可用流水号,如果有,则转向步骤S216,从内存中构造下一段可用流水号。如果步骤S214判断的结果是没有,则转向步骤S215,即新构造一段可用流水号。步骤S215和步骤S216之后都转向步骤S217,在其中根据之前构造的流水号向数据库插入一条新记录。然后转向步骤S218,在其中检查插入的新记录是否与现有的记录有冲突,如果有,则再次转向步骤S208,如果没有,则转至步骤S206,其具体内容已经在上文中介绍过。
[0032] 这里所述的方法可按照特定特征或示例至少部分根据应用通过各种方式来实现。例如,这种方法可通过硬件、固件、软件或者它们的任何组合来实现。在硬件实现中,例如,装置可在一个或更多的专用集成电路(ASICs)、数字信号处理器(DSPs)、数字信号处理装置(DSPDs)、可编程逻辑器件(PLDs)、现场可编程门阵列(FPGAs)、处理器、控制器、微控制器、微处理器、电子装置或者设计成执行诸如这里所述的功能的其它装置单元或者它们的任何组合中实现。
[0033] 同样,在一些实施例中,方法可采用执行这里所述功能或者它们的任何组合的模块来实现。例如,有形地具体化指令的任何机器可读介质可在实现这类方法中使用。在一实施例中,例如,软件或代码可存储在存储器中并且由处理单元来运行。存储器可在处理单元中和/或处理单元外部来实现。这里所使用的术语“存储器”表示任何类型的长期、短期、易失性、非易失性或者其它存储器,并且并不局限于存储器的任何特定类型或者存储器的数量或者存储介质的类型。
[0034] 存储介质可包括可由计算机、计算平台、计算装置等等来访问的任何可用介质。作为举例而不是限制,计算机可读介质可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或者其它磁存储装置,或者可用于携带或存储采取指令或数据结构形式的期望的程序代码并且可由计算机、计算平台或计算装置来访问的其它任何介质。
[0035] 虽然上文已经示出了当前被认为是示例特征的内容,但是本领域的技术人员将会理解,在不背离要求保护的主题的情况下,可以对本发明中所描述的具体实施例进行各种修改。因此,要求保护的主题并不局限于所公开的特定示例,相反,其包括了落入所附权利要求的范围之内的所有内容。