一种用于数据库的写入互斥方法及装置的制造方法

文档序号:9687473阅读:411来源:国知局
一种用于数据库的写入互斥方法及装置的制造方法
【技术领域】
[0001]本申请涉及数据库领域,具体涉及一种用于数据库的写入互斥方法。本申请同时提供一种用于数据库的写入互斥装置。
【背景技术】
[0002]MySQL是一个开放源码的关系型数据库管理系统,通常采用主从同步的架构方式,即:一台主服务器负责处理写入操作和少量的读操作,一台或者多台从服务器(或称备用服务器)负责处理读操作,从而实现负载均衡,缩短对用户访问请求的响应时间。针对上述主从同步的架构方式,MySQL数据库系统提供了采用二进制日志文件Binlog来实现主、从数据库之间的数据复制功能。
[0003]然而随着数据库技术以及数据库业务的发展,上述主从复制功能已无法满足多变的用户需求,例如,有的数据库业务只需要将MySQL数据库中的部分库或者表中的数据同步到目标MySQL数据库中;有的业务则需要把其他关系型数据库,甚至nosql数据库中的数据同步到目的MySQL数据库中。基于这些需求,出现了采用外部程序实现数据库之间数据同步的实现方式。
[0004]通过外部程序实现数据库之间的同步时,通常由一个进程负责两个数据库的同步,即:从源数据库中读取数据,经过必要的处理后,再通过与目标数据库之间建立的一条或者多条连接将数据写入目标数据库中。为了保障数据同步过程的顺利执行,通常还会启动一个负责容灾的模块(简称容灾模块),该模块通过侦听同步进程定期(例如每隔5秒或者10秒)发送的心跳数据包来监测同步进程的工作状态,当容灾模块在预先设定的一段时间内(例如I分钟)没有收到同步进程的心跳数据包,则认为同步进程出现故障,容灾模块会启动一个新的同步进程来接管当前的数据同步过程,从而使得数据同步过程依然正常进行。
[0005]上述实现方式,通常可以保证数据同步过程的顺利执行,然而在具体实现中,可能出现容灾模块发生误判的情况,例如,因为网络连接故障(网线断开),导致同步进程和容灾模块之间的网络通信被中断,容灾模块在预先设定的一段时间内没有接收到同步进程的心跳数据包,容灾模块会因此启动新的同步进程,在这种情况下,就会出现两个同步进程同时向同一个目标MySQL数据库写入数据的问题,从而导致目标MySQL数据库中的数据错误。

【发明内容】

[0006]本申请提供一种用于数据库的写入互斥方法,以解决两个执行同一写入任务的进程同时向目标数据库写入数据而导致数据错误的问题。本申请另外提供一种用于数据库的写入互斥装置。
[0007]本申请提供一种用于数据库的写入互斥方法,所述方法在向同一个目标数据库执行同一写入任务的进程中实施,包括:
[0008]采用为所述进程预先指定的统一的用户名创建用于向目标数据库写入数据的连接,所述目标数据库为每个与其建立的连接分配唯一的连接标识;
[0009]获取已创建连接的连接标识,作为本地连接标识;
[0010]获取所述目标数据库中采用所述用户名的所有连接的连接标识列表;
[0011]判断所述连接标识列表中是否存在不同于所述本地连接标识的其他连接标识;
[0012]若是,关闭已创建的连接;若否,使用已创建的连接向所述目标数据库写入数据。
[0013]可选的,所述目标数据库为MySQL数据库。
[0014]可选的,所述采用为所述进程预先指定的统一的用户名创建用于向目标数据库写入数据的连接,采用如下方式实现:
[0015]调用MySQL C API提供的mysql_connect O函数,并将该函数的用户名参数的值设置为所述预先指定的统一的用户名。
[0016]可选的,所述获取所述目标数据库中采用所述用户名的所有连接的连接标识列表,采用如下方式实现:
[0017]执行SQL语句从PROCESSLIST表中查询采用所述用户名的所有连接的连接标识列表,所述PROCESSLIST表存储在目标MySQL数据库的informat1n_schema库中。
[0018]可选的,所述创建用于向目标数据库写入数据的连接是指,按照预先设定的连接数目,依次创建用于向目标数据库写入数据的多条连接。
[0019]可选的,所述获取已创建连接的连接标识作为本地连接标识是指,依次获取已创建的每条连接的连接标识,组成本地连接标识列表。
[0020]可选的,所述判断所述连接标识列表中是否存在不同于所述本地连接标识的其他连接标识是指,判断是否存在满足下列条件的连接标识:该连接标识包含在从所述目标数据库获取的连接标识列表中、但是未包含在本地连接标识列表中。
[0021]可选的,当所述判断所述连接标识列表中是否存在不同于所述本地连接标识的其他连接标识的输出为“否”时,在执行所述使用已创建的连接向所述目标数据库写入数据的步骤之前,执行下述操作:
[0022]判断已创建的连接数目是否小于预先设定的连接数目;
[0023]若是,按照预先设定的连接数目,依次创建用于向目标数据库写入数据的多条连接;相应的,所述使用已创建的连接向所述目标数据库写入数据是指,使用已创建的多条连接向所述目标数据库写入数据。
[0024]相应的,本申请还提供一种用于数据库的写入互斥装置,所述装置部署在向同一个目标数据库执行同一写入任务的设备中,包括:
[0025]连接创建单元,用于采用预先指定的统一的用户名创建用于向目标数据库写入数据的连接,所述目标数据库为每个与其建立的连接分配唯一的连接标识;
[0026]本地标识获取单元,用于获取已创建连接的连接标识,作为本地连接标识;
[0027]标识列表获取单元,用于获取所述目标数据库中采用所述用户名的所有连接的连接标识列表;
[0028]连接标识判断单元,用于判断所述连接标识列表中是否存在不同于所述本地连接标识的其他连接标识;
[0029]连接关闭单元,用于当所述连接标识判断单元的输出为“是”时,关闭已创建的连接;
[0030]数据写入单元,用于当所述连接标识判断单元的输出为“否”时,使用已创建的连接向所述目标数据库写入数据。
[0031 ] 可选的,所述目标数据库为MySQL数据库。
[0032]可选的,所述连接创建单元具体用于,调用MySQL C API提供的mysql_connect O函数来创建向目标数据库写入数据的连接,并且在调用该函数时将用户名参数的值设置为所述预先指定的统一的用户名。
[0033]可选的,所述标识列表获取单元具体用于,执行SQL语句从PROCESSLIST表中查询采用所述用户名的所有连接的连接标识列表,所述PROCESSLIST表存储在目标MySQL数据库的 informat1n_schema 库中。
[0034]可选的,所述连接创建单元具体用于,按照预先设定的连接数目,依次创建用于向目标数据库写入数据的多条连接。
[0035]可选的,所述本地标识获取单元具体用于,依次获取已创建的每条连接的连接标识,组成本地连接标识列表。
[0036]可选的,所述连接标识判断单元具体用于,判断是否存在满足下列条件的连接标识:该连接标识包含在从所述目标数据库获取的连接标识列表中、但是未包含在本地连接标识列表中。
[0037]可选的,所述装置还包括:
[0038]连接数目判断单元,用于当所述连接标识判断单元的输出为“否”时,判断已创建的连接数目是否小于预先设定的连接数目;
[0039]连接循环创建单元,用于当所述连接数目判断单元的输出为“是”时,按照预先设定的连接数目,依次创建用于向目标数据库写入数据的多条连接;相应的,所述数据写入单元具体用于,使用所述连接循环创建单元创建的多条连接向所述目标数据库写入数据。
[0040]与现有技术相比,本申请具有以下优点:
[0041]本申请提供的一种用于数据库的写入互斥方法,采用预先指定的统一的用户名创建用于向目标数据库执行写入操作的连接并获取对应的连接标识,然后判断目标数据库中采用同一用户名的连接标识列表中是否存在不同于上述连接标识的其他连接标识,若是,关闭已创建的连接;若否,使用已创建的连接向所述目标数据库写入数据。采用上述方法,充分利用了目标数据库为每个连接分配唯一标识的特性,通过对连接标识的校验,可以获知是否已经存在其他进程创建的向目标数据库执行写入操作的连接,从而实现了互斥检测功能,避免两个进程同时
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1