一种参数加载方法和系统转让专利

申请号 : CN201210301990.3

文献号 : CN103631610B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 杨帆

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

摘要 :

本发明提供一种参数加载方法以及系统。该参数加载方法包括在数据库中设置参数更新标志位和令牌状态标志位,其中参数更新标志位标识数据库中的参数的状态,所述状态包括参数无变化和参数已变化;将参数更新标志位初始化为标识参数无变化和将令牌状态标志位初始化为1;修改参数;以及加载参数。利用本发明,可以实现参数的加载。

权利要求 :

1.一种参数加载方法,其特征在于,所述方法包括:在数据库中设置参数更新标志位和令牌状态标志位,其中参数更新标志位标识数据库中的参数的状态,所述状态包括参数无变化和参数已变化;

将参数更新标志位初始化为标识参数无变化和将令牌状态标志位初始化为1;

修改参数;以及

加载参数;

其中所述修改参数包括:

A1第一进程发出参数修改请求;

A2 确定所述参数更新标志位是否标识参数无变化,如果为是,则执行步骤A3,否则禁止修改;

A3 第一进程修改所述数据库中的参数;

A4 将所述参数更新标志位设置为标识参数已变化;

所述加载参数包括:

B1 第二进程发出加载参数请求;

B2 确定发出加载参数请求的进程的数量n并设定进程的运行编号;

B3 确定所述参数更新标志位是否标识参数已变化,如果为是,则执行步骤B4,否则禁止加载参数;

B4 将所述参数更新标志位设置为标识参数无变化;

B5 将数据库中的参数加载至其运行编号与所述令牌标志位相一致的第二进程的堆栈;

B6 确定所述令牌标志位是否等于n,如果为是,则将所述令牌标志位设置为1,否则将所述令牌标志位加1并返回步骤B5。

2.如权利要求1所述的参数加载方法,其特征在于,步骤B4包括:将所述参数更新标志位设置为标识参数无变化;以及所述修改参数。

3.一种参数加载系统,其特征在于,所述系统包括数据库、参数加载模块、参数修改模块、第一进程和第二进程,其中数据库中设置有参数更新标志位和令牌状态标志位,其中参数更新标志位标识数据库中的参数的状态,所述状态包括参数无变化和参数已变化,其中参数更新标志位的初始值为标识参数无变化和令牌状态标志位初始值为1,其中第一进程发出参数修改请求至参数修改模块;

参数修改模块确定所述参数更新标志位是否标识参数无变化,如果为是,则返回允许修改应答至第一进程,否则返回禁止修改应答至第一进程;

第一进程在收到返回允许修改应答时,经参数修改模块修改所述数据库中的参数;

参数修改模块在修改参数完成后将所述参数更新标志位设置为标识参数已变化;

第二进程发出加载参数请求至参数加载模块;

参数加载模块被配置为:

确定发出加载参数请求的进程的数量n并设定进程的运行编号;

确定所述参数更新标志位是否标识参数已变化,如果为是,则将所述参数更新标志位设置为标识参数无变化;

将数据库中的参数加载至其运行编号与所述令牌标志位相一致的第二进程的堆栈;以及确定所述令牌标志位是否等于n,如果为是,则将所述令牌标志位设置为1,否则重复执行将所述令牌标志位加1和将数据库中的参数加载至其运行编号与所述令牌标志位相一致的第二进程的堆栈直至所述令牌标志位等于n,否则返回禁止加载应答至第二进程。

4.如权利要求3所述的参数加载系统,其特征在于,其中参数修改模块在修改数据库之前发送正在修改消息至参数加载模块并在修改数据库完成之后发送修改完成消息至参数加载模块;

所述参数加载模块在将数据库中的参数加载至其运行编号与所述令牌标志位相一致的第二进程的堆栈时收到正在修改消息,则暂停参数加载直至收到修改完成消息。

说明书 :

一种参数加载方法和系统

技术领域

[0001] 本发明涉及数据处理领域,尤其涉及一种参数加载方法和系统。

背景技术

[0002] 现有实现多进程加载相同参数的技术包括:
[0003] (1)多进程附接共享内存区
[0004] 将参数数据写入到共享内存区,多个进程在运行中需要参数时直接读取共享内存数据,负责修改参数数据的其他进程直接修改内存区。缺点是,应用开发者需要设计出可靠互斥的PV操作,但会造成读写和运行效率的降低和死锁风险,修改参数的进程也要考虑解决将内存数据如何持久化何时持久化的问题,所以该方法在读写数据同步性效果很难保障。
[0005] (2)多进程各自装载堆栈区
[0006] 通过某个状态位来标识参数是否变动需加载,外部修改进程修改完参数数据后并变化标志位,多进程各自读取标志位后进行参数加载。缺点是,无法保证多进程加载参数一致,该机制也会导致在外部进程频繁修改参数的情况下丢失某次修改请求。

发明内容

[0007] 有鉴于此,本发明提供一种参数加载方法和系统,用于实现参数加载。
[0008] 本发明提供一种参数加载方法,所述方法包括:
[0009] 在数据库中设置参数更新标志位和令牌状态标志位,其中参数更新标志位标识数据库中的参数的状态,所述状态包括参数无变化和参数已变化;
[0010] 将参数更新标志位初始化为标识参数无变化和将令牌状态标志位初始化为1;
[0011] 修改参数;以及
[0012] 加载参数;
[0013] 其中所述修改参数包括:
[0014] A1第一进程发出参数修改请求;
[0015] A2 确定所述参数更新标志位是否标识参数无变化,如果为是,则执行步骤A3,否则禁止修改;
[0016] A3 第一进程修改所述数据库中的参数;
[0017] A4 将所述参数更新标志位设置为标识参数已变化;
[0018] 所述加载参数包括:
[0019] B1 第二进程发出加载参数请求
[0020] B2 确定发出加载参数请求的进程的数量n并设定进程的运行编号;
[0021] B3 确定所述参数更新标志位是否标识参数已变化,如果为是,则执行步骤B4,否则禁止加载参数;
[0022] B4 将所述参数更新标志位设置为标识参数无变化;
[0023] B5 将数据库中的参数加载至其运行编号与所述令牌标志位相一致的第二进程的堆栈;
[0024] B6 确定所述令牌标志位是否等于n,如果为是,则将所述令牌标志位设置为1,否则将所述令牌标志位加1并返回步骤B5。
[0025] 优选地,在本发明的参数加载方法中,步骤B4包括:
[0026] 将所述参数更新标志位设置为标识参数无变化;以及
[0027] 所述修改参数。
[0028] 本发明提供一种参数加载系统,所述系统包括数据库、参数加载模块、参数修改模块、第一进程和第二进程,其中数据库中设置有参数更新标志位和令牌状态标志位,其中参数更新标志位标识数据库中的参数的状态,所述状态包括参数无变化和参数已变化,其中参数更新标志位的初始值为标识参数无变化和令牌状态标志位初始值为1,其中[0029] 第一进程发出参数修改请求至参数修改模块;
[0030] 参数修改模块确定所述参数更新标志位是否标识参数无变化,如果为是,则返回允许修改应答至第一进程,否则返回禁止修改应答至第一进程;
[0031] 第一进程在收到返回允许修改应答时,经参数修改模块修改所述数据库中的参数;
[0032] 参数修改模块在修改参数完成后将所述参数更新标志位设置为标识参数已变化;
[0033] 第二进程发出加载参数请求至参数加载模块;
[0034] 参数加载模块被配置为:
[0035] 确定发出加载参数请求的进程的数量n并设定进程的运行编号;
[0036] 确定所述参数更新标志位是否标识参数已变化,
[0037] 如果为是,则将所述参数更新标志位设置为标识参数无变化;
[0038] 将数据库中的参数加载至其运行编号与所述令牌标志位相一致的第二进程的堆栈;以及
[0039] 确定所述令牌标志位是否等于n,如果为是,则将所述令牌标志位设置为1,否则重复执行将所述令牌标志位加1和将数据库中的参数加载至其运行编号与所述令牌标志位相一致的第二进程的堆栈直至所述令牌标志位等于n,
[0040] 否则返回禁止加载应答至第二进程。
[0041] 优选地,在本发明的参数加载系统中,其中参数修改模块在修改数据库之前发送正在修改消息至参数加载模块并在修改数据库完成之后发送修改完成消息至参数加载模块;所述参数加载模块在将数据库中的参数加载至其运行编号与所述令牌标志位相一致的第二进程的堆栈时收到正在修改消息,则暂停参数加载直至收到修改完成消息。
[0042] 利用本发明的参数加载方法和系统,可以实现参数加载。用于多个进程对在实时变化的同一个参数表数据实现以相同状态数据加载的一种有效机制与方法。该机制确保在多个进程对参数表数据做到近似并发加载的同时存在外部其他进程对该参数表数据进行实时修改的场景下,所有读取进程均能成功加载参数表数据到内存,可确保每一轮加载后每个进程的参数内存均完全一致,也不会导致外部进程修改该表的请求丢失。

附图说明

[0043] 图1为根据本发明的参数加载方法的示意性流程图;
[0044] 图2为图1中的修改参数步骤的示意性流程图;
[0045] 图3为图1中的加载参数步骤的示意性流程图;
[0046] 图4为图1中的加载参数步骤的另一示意性流程图;以及
[0047] 图5为根据本发明的参数加载系统的示意性结构图。

具体实施方式

[0048] 下面将结合附图详细描述本发明的优选实施例,在附图中相同的参考标号表示相同的元件。
[0049] 图1为根据本发明的参数加载方法的示意性流程图。如图1所述,在步骤101,在数据库中设置参数更新标志位change_st和令牌状态标志位token_st,参数更新标志位change_st用于标识数据库中的参数的状态。change_st=0时,表示参数无变化,change_st=1,表示参数已变化。应当理解,change_st的值的设定仅为示例性。
[0050] 在步骤102,初始化change_st=0和token_st=1;
[0051] 在步骤103,修改参数。
[0052] 在步骤104,加载参数。
[0053] 图2为图1中的修改参数步骤的示意性流程图。如图2所示,在步骤201,收到参数修改请求。在步骤202,确定change_st是否等于0,如果为是,则在步骤203,修改数据库中的参数,否则在步骤204,禁止修改数据库中的参数。
[0054] 之后,在步骤205,将change_st设为1。
[0055] 图3为图1中的加载参数步骤的示意性流程图。如图3所示,在步骤301,收到参数加载请求。在步骤302,确定发出加载参数请求的进程的数量n。在步骤303,设定进程的运行编号。在步骤304,确定change_st是否等于1。如果为是,则在步骤305,将change_st设为0。否则,在步骤306,禁止加载数据库中的参数。
[0056] 在步骤307,将数据库中的参数加载至其运行编号与令牌标志位相一致的第二进程的堆栈。在步骤308,确定token_st是否等于n,如果为是,则执行步骤310,否则执行步骤309。
[0057] 在步骤309,将token_st加1,之后返回步骤307。
[0058] 在步骤310,将token_st设为1。
[0059] 图4为图1中的加载参数步骤的另一示意性流程图。与图3相比,区别在于,在步骤306和307存在步骤103。
[0060] 在前一轮参数加载的瞬间过程中,如果新的参数变化请求又发起,先修改数据库中的参数,从而确保将新的参数加载至进程堆栈。
[0061] 图5为根据本发明的参数加载系统的示意性结构图。如图5所示,所述系统包括数据库1、参数加载模块2、参数修改模块3、第一进程4和第二进程51-5n,其中数据库中设置有参数更新标志位change_st和令牌状态标志位token_st,参数更新标志位change_st用于标识数据库中的参数的状态。change_st=0时,表示参数无变化,change_st=1。
[0062] 第一进程41发出参数修改请求至参数修改模块3。参数修改模块3确定change_st是否为0,如果为是,则返回允许修改应答至第一进程41,否则返回禁止修改应答至第一进程41。
[0063] 第一进程41在收到返回允许修改应答时,经参数修改模块3修改所述数据库中的参数;
[0064] 参数修改模块3在修改参数完成后将change_st设为1。
[0065] 第二进程51-5n发出加载参数请求至参数加载模块2;
[0066] 参数加载模块2被配置为:
[0067] 确定发出加载参数请求的进程的数量n并设定进程的运行编号;
[0068] 确定change_st是否等于1,
[0069] 如果为是,则将change_st设置为0;
[0070] 将数据库中的参数加载至其运行编号与所述令牌标志位相一致的第二进程的堆栈;以及
[0071] 确定token_st是否等于n,如果为是,则将token_st设置为1,否则重复执行将token_st加1和将数据库中的参数加载至其运行编号与所述令牌标志位相一致的第二进程的堆栈直至token_st等于n,否则返回禁止加载应答至第二进程。
[0072] 优选地,参数修改模块3在修改数据库之前发送正在修改消息至参数加载模块2并在修改数据库完成之后发送修改完成消息至参数加载模块2;
[0073] 所述参数加载模块3在将数据库中的参数加载至其运行编号与所述令牌标志位相一致的第二进程的堆栈时如果收到正在修改消息,则暂停参数加载直至收到修改完成消息。
[0074] 鉴于这些教导,熟悉本领域的技术人员将容易想到本发明的其它实施例、组合和修改。因此,当结合上述说明和附图进行阅读时,本发明仅仅由权利要求限定。