CN102968457B - 数据库间切换方法和系统 - Google Patents
数据库间切换方法和系统 Download PDFInfo
- Publication number
- CN102968457B CN102968457B CN201210426087.XA CN201210426087A CN102968457B CN 102968457 B CN102968457 B CN 102968457B CN 201210426087 A CN201210426087 A CN 201210426087A CN 102968457 B CN102968457 B CN 102968457B
- Authority
- CN
- China
- Prior art keywords
- database
- available
- operation layer
- instance
- connection
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 74
- 230000008569 process Effects 0.000 claims abstract description 36
- 238000000151 deposition Methods 0.000 claims abstract description 4
- 238000012545 processing Methods 0.000 claims description 11
- 230000010076 replication Effects 0.000 claims description 11
- 238000001514 detection method Methods 0.000 claims description 10
- 238000010586 diagram Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 7
- 230000008901 benefit Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 239000002699 waste material Substances 0.000 description 5
- 238000009826 distribution Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 230000005059 dormancy Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000000116 mitigating effect Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000035484 reaction time Effects 0.000 description 1
- 230000009897 systematic effect Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库间切换方法和系统,其中的系统具体包括关联式容器;第一连接建立模块;实例选取模块;第二连接建立模块;及标志修改模块;适于获取所述关联式容器中存储的服务的数据库实例的容器实例获取模块;所述容器实例获取模块包括:服务实例获取子模块,适于在服务启动时,依据操作系统环境变量获取服务的数据库实例;数据库连接池,适于存放所获取数据库实例及相应的连接。本发明能够提高数据库系统的处理和并发效率,以及,降低系统开销和资源浪费。
Description
技术领域
本发明涉及数据库技术领域,具体涉及一种数据库间切换方法和系统。
背景技术
数据库本身提供的一些数据备份技术,通常是指数据库本身提供一种管理、监测和自动运行的体系结构,适于创建和维护一个或多个备份数据库。一般是在物理级和逻辑级,通过传输和运行数据库日志文件,来保持生产和备份数据库的数据一致性。一旦主数据库因某种情况而不可用时,备份数据库将切换为新的主数据库,以达到无数据库损失或最小化数据损失的目的。
现有一种数据库系统切换方法的流程具体可以包括:
步骤1、主用和备用机代理通过同时侦听以太网内广播的数据库操作数据包对各自数据库实例进行相同数据库操作完成复制;
步骤2、数据库实例向对应代理返回成功\失败标示;
步骤3、主用机代理接收失败标示而备用机代理接收成功标示,则由主用机代理通知备用机代理进行主备切换;
步骤4、利用消息确认机制和切换计时器来进行数据库系统主备切换。
现有技术具有如下缺陷:
1、以广播方式将数据库操作包发给主用和备用机代理完成数据复制,加重了系统分发负载,延长了系统处理流程,容易造成系统开销的浪费,影响系统的并发效率;
2、利用消息确认机制来进行数据库系统主备切换,容易造成在一定计时时间内消息拥堵排队,请求高峰期会造成大量请求等待,降低了系统的处理效率;
3、主备机各有自己的代理,实现功能类似,容易造成系统冗余和资源浪费。
总之,需要本领域技术人员迫切解决的一个技术问题就是:如何能够提高数据库系统的处理和并发效率,以及,降低系统开销和资源浪费。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据库间切换方法和系统。
依据本发明的一个方面,提供了一种数据库间切换方法,包括:
采用关联式容器存储服务的数据库实例,所述关联式容器中数据库实例在存储时的可用标志为可用;
在接收到业务层的调用请求时,建立主数据库与所述业务层的连接;
从所述关联式容器中选取可用标志为可用的数据库实例;
建立所选取数据库实例对应数据库与所述业务层的连接;
在捕获到数据库与所述业务层的连接异常次数大于第一阈值时,将所述关联式容器中相应数据库实例的可用标志修改为不可用;
通过如下步骤获取所述关联式容器中存储的服务的数据库实例:
在服务启动时,依据操作系统环境变量获取服务的数据库实例;
采用数据库连接池存放所获取数据库实例及相应的连接;
针对所述数据库连接池中连接正常的数据库实例,将其可用标志置为可用,并插入相应的关联式容器中。
可选地,所述方法还包括:
无限循环探测所述关联式容器中数据库实例的可用标志是否为可用,若为不可用,则发出报警提示,由数据库管理员依据所述报警提示对所述可用标志为不可用的数据库实例对应的数据库进行维护,并在维护完成后在数据库的检查表中将所述数据库的可用标志置为可用;所述检查表与数据库一一对应,适于存储数据库的可用标志;
针对所述可用标志为不可用的数据库实例,在检测到其对应数据库的检查表中数据库的可用标志为可用时,在所述关联式容器中将其可用标志修改为可用。
可选地,所述方法还包括:
针对数据库,记录其与所述业务层连接的数目;
在建立所选取数据库实例对应数据库与所述业务层的连接前,判断所述数据库与所述业务层连接的数目是否大于第二阈值,若是,则发出报警提示,否则,建立所述数据库与所述业务层的连接。
可选地,所述方法还包括:
在所述业务层所连接数据库进行当前事务的处理过程中,以所述业务层所连接数据库作为主数据库,将所述主数据库的更新数据复制至从数据库;
在所述主数据库等待多个从数据库中至少一者复制成功后,进行下一事务的处理。
可选地,所述方法还包括:
在等待时间大于超时时间阈值时,停止所述主数据库针对所述多个从数据库中至少一者复制成功的等待,并进行下一事务的处理。
根据本发明的另一方面,提供了一种数据库间切换系统,包括:
关联式容器,适于存储服务的数据库实例,所述关联式容器中数据库实例在存储时的可用标志为可用;
第一连接建立模块,适于在接收到业务层的调用请求时,建立主数据库与所述业务层的连接;
实例选取模块,适于从所述关联式容器中选取可用标志为可用的数据库实例;
第二连接建立模块,适于建立所选取数据库实例对应数据库与所述业务层的连接;及
标志修改模块,适于在捕获到数据库与所述业务层的连接异常次数大于第一阈值时,将所述关联式容器中相应数据库实例的可用标志修改为不可用;
适于获取所述关联式容器中存储的服务的数据库实例的容器实例获取模块;
所述容器实例获取模块包括:
服务实例获取子模块,适于在服务启动时,依据操作系统环境变量获取服务的数据库实例;
数据库连接池,适于存放所获取数据库实例及相应的连接;
插入子模块,适于对所述数据库连接池中连接正常的数据库实例,将其可用标志置为可用,并插入相应的关联式容器中。
可选地,所述系统还包括:
循环探测模块,适于循环探测所述关联式容器中数据库实例的可用标志是否为可用;
第一报警提示模块,适于在探测到所述关联式容器中数据库实例的可用标志为不可用时,发出报警提示,由数据库管理员依据所述报警提示对所述可用标志为不可用的数据库实例对应的数据库进行维护,并在维护完成后在数据库的检查表中将所述数据库的可用标志置为可用;所述检查表与数据库一一对应,适于存储数据库的可用标志;
检查表检测修改模块,适于针对所述可用标志为不可用的数据库实例,在检测到其对应数据库的检查表中数据库的可用标志为可用时,在所述关联式容器中将其可用标志修改为可用。
可选地,所述系统还包括:
连接数目记录模块,适于针对数据库,记录其与所述业务层连接的数目;
连接数目判断模块,适于在所述第二连接建立模块建立所选取数据库实例对应数据库与所述业务层的连接前,判断所述数据库与所述业务层连接的数目是否大于第二阈值;
第二报警提示模块,适于在所述数据库与所述业务层连接的数目大于第二阈值时,发出报警提示;
所述第二连接建立模块,还具体适于在所述数据库与所述业务层连接的数目小于等于第二阈值时,建立所述数据库与所述业务层的连接。
可选地,所述系统还包括:
主从复制模块,适于在所述业务层所连接数据库进行当前事务的处理过程中,以所述业务层所连接数据库作为主数据库,将所述主数据库的更新数据复制至从数据库;
等待模块,适于在所述主数据库等待多个从数据库中至少一者复制成功后,进行下一事务的处理。
可选地,所述系统还包括:
等待停止模块,适于在等待时间大于超时时间阈值时,停止所述主数据库针对所述多个从数据库中至少一者复制成功的等待,并进行下一事务的处理。
根据本发明的数据库间切换方法和系统取得了如下有益效果:
本发明在接收到业务层的调用请求时,默认建立主数据库与所述业务层的连接,并且,如果主数据库对应数据库实例的可用标志为不可用,则建立可用数据库实例对应数据库与所述业务层的连接;可见,本发明能够通过建立可用标志为可用的数据库实例对应数据库与所述业务层的连接,实现主从数据库的高效、实时切换;
1、现有技术中主备机各有自己的代理,实现功能类似,容易造成系统冗余和资源浪费;而本发明对服务的所有数据库实例进行统一代理,这样,本发明的数据库代理与主从库是剥离的,能够形成公用的数据库代理,因此能够节省系统资源;
2、现有技术以广播方式将数据库操作包发给主用和备用机代理完成数据复制,加重了系统分发负载,延长了系统处理流程,容易造成系统开销的浪费,影响系统的并发效率;而本发明依据业务层的调用请求建立数据库与业务层的连接,以实现业务层对数据库的操作,因此,本发明能够避免现有技术中广播方式带来的系统开销浪费和并发效率低的问题;
3、现有技术利用消息确认机制来进行数据库系统主备切换,容易造成在一定计时时间内消息拥堵排队,请求高峰期会造成大量请求等待,降低了系统的处理效率;而本发明通过建立可用标志为可用的数据库实例对应数据库与所述业务层的连接,实现主从数据库的高效、实时切换,能够避免多次消息确认带来的网络开销和大量的等待时间;
总之,本发明能够在保证正常容错的条件下,最大限度的降低网络和系统开销,提高系统的并发能力。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的数据库间切换方法流程图;
图2示出了根据本发明一个实施例的业务处理系统的结构图;
图3示出了根据本发明一个实施例的数据库间切换方法流程图;
图4示出了根据本发明一个实施例的数据库间切换方法流程图;
图5示出了根据本发明一个实施例的数据库间切换方法流程图;
图6示出了根据本发明一个实施例的半同步复制流程图;以及
图7示出了根据本发明一个实施例的数据库间切换系统结构图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
参照图1,示出了根据本发明一个实施例的数据库间切换方法流程图,具体可以包括:
步骤101、采用关联式容器存储服务的数据库实例,所述关联式容器中数据库实例在存储时的可用标志为可用;
服务为数据库领域内的公知技术,在此对其进行简单介绍。服务通常用于实现业务系统中一个功能,服务具体可以包括数据库实例和数据库。其中,数据库实例就是指计算机内存中处于运行状态的数据库程序,以及为这些程序分配的一些内存空间;数据库实例是位于内存中的,只在数据库处于运行状态时才存在;数据库实例负责实现给用户提供网络连接、读写数据文件等等各种功能。数据库就是实际上的磁盘上的文件(数据文件、日志文件、控制文件等),负责保存数据。通常,一个数据库实例对应一个数据库,且该数据库实例可操作对应数据库的数据,一个数据库可能对应一个或多个数据库实例。服务、数据库实例和数据库均具有唯一的名称,分别为服务名、数据库实例名和数据库名。
在本发明的一种实施例中,可以通过如下步骤获取所述关联式容器中存储的服务的数据库实例:
步骤S101、在服务启动时,依据操作系统环境变量获取服务的数据库实例;
操作系统环境变量用于和操作系统交互,也即,在操作系统中要想得到数据库实例名,应使用操作系统环境变量;操作系统环境变量通常被用于定义数据库参数文件的名称,而数据库参数文件包含有数列和数据库配置信息,其中的数据库配置信息中就包括服务的全部主从数据库的信息。
这样,在服务启动时,可通过操作系统环境变量获取数据库参数文件的路径,打开数据库参数文件即可读取服务的全部主从数据库的信息,进而可以得到服务的数据库实例。
步骤S102、采用数据库连接池存放所获取数据库实例及相应的连接;
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
步骤S103、针对所述数据库连接池中连接正常的数据库实例,将其可用标志置为可用,并插入相应的关联式容器中。
本发明实施例中,数据库实例与数据库之间可以为一一对应的关系;数据库实例的连接可用于表示服务所在服务器与数据库实例对应数据库的连接,连接正常还是异常可根据服务所在服务器的返回值判定。
在实际应用中,可以检测数据连接池内各数据库实例是否连接正常,如果连接异常,则认为主从库初始化有误,服务退出;如果连接正常则将连接池中的数据库实例插入相应的关联式容器中,并将其可用标志置为可用。
本发明的关联式容器,观念上类似于内存中的一种关联式数据库:关联式容器中每笔数据都有一个键值(key)和一个实际值(value)。当元素被插入关联式容器时,内部机制可根据键值,按照一定的规则将元素置于特定的位置。关联式容器没有所谓头尾的概念(只有最大元素,最小元素)。
标准的STL(Standard Template Library,标准模板库)关联式容器可分为set和map两大类,以及这两大类的衍生体multiset和multimap。本领域技术人员可根据实际需要采用其中的任一,本发明对具体的关联式容器不加以限制。
步骤102、在接收到业务层的调用请求时,建立主数据库与所述业务层的连接;
本发明实施例中,数据库操作层与业务层剥离,具体而言,数据库操作层可依据业务层的调用请求进行数据库操作,以处理业务层的业务请求。
参照图2,示出了根据本发明一个实施例的业务处理系统的结构图,具体可以包括客户端201、网关系统202、账户系统服务端203、业务服务端204、业务层205、数据库操作层206,数据库操作层206进一步包括主数据库261和从数据库262。
图2所示业务处理系统处理业务请求的流程如下:
步骤S201、在接收到用户从页面发起的支付请求时,客户端201将该支付请求抛给网关系统202;
步骤S202、网关系统202在获取支付通路后将该支付请求转发给账户系统服务端203;
步骤S203、账户系统服务端203根据该支付请求的业务参数将其转发至具体的业务服务端204;
步骤S204、业务服务端204将该支付请求送至业务层205;
步骤S205、业务层205对该支付请求进行处理,在需要对数据库进行操作时,调用数据库操作层206。
本发明实施例中,在接收到业务层的调用请求时,默认建立数据库操作层206中主数据库261与所述业务层205的连接。
步骤103、从所述关联式容器中选取可用标志为可用的数据库实例;
本发明实施例中,关联式容器可用于存储服务的数据库实例,所述关联式容器中数据库实例在存储时的可用标志为可用,这样,所述关联式容器中所有数据库实例在服务启动时的可用标志均为可用。
但是,所述关联式容器中数据库实例的可用标志不是一成不变的,因为数据库实例对应的数据库的连接可能会出现故障,最常见的故障是连接故障。因此,本发明使用一定的连接故障条件作为更新可用标志的条件。
下面的步骤105描述了使用连接故障条件更新可用标志的过程;其中,连接故障条件可以为数据库与所述业务层的连接异常次数,在具体实现中可捕获数据库与所述业务层的连接异常,并采用计数器记录数据库与所述业务层的连接异常次数;所述第一阈值可由本领域技术人员依据实际需求确定,例如,第一阈值的一个例子为3等等。
在本发明的一种应用示例中,所述步骤103从所述关联式容器中选取可用标志为可用的数据库实例的实现过程可以包括:
步骤S301、初始默认所述关联式容器中第一个数据库实例为当前实例;
步骤S302、检测当前实例的可用标志,如果可用,则选取成功并执行步骤104,如果不可用,执行步骤S303;
步骤S303、检查当前已用的连接数,如果连接数不为0,则执行步骤C4,如果连接数为0则执行步骤S305;
步骤S304、认为当前数据库不可用,返回空;
步骤S305、获取数据库连接池中可用标志为可用的数据库实例的索引,若获取结果为空,则执行步骤S306,若获取结果不为空,则执行步骤S307;
步骤S306、报警退出;
步骤S307、从获取结果中选取一个可用标志为可用的数据库实例,并执行步骤104。
需要说明的是,本发明的报警可用于向数据库管理员发出提示,由管理员进行数据库的维护。
步骤104、建立所选取数据库实例对应数据库与所述业务层的连接;
步骤105、在捕获到数据库与所述业务层的连接异常次数大于第一阈值时,将所述关联式容器中相应数据库实例的可用标志修改为不可用。
本发明在接收到业务层的调用请求时,默认建立主数据库与所述业务层的连接,并且,如果主数据库对应数据库实例的可用标志为不可用,则建立可用数据库实例对应数据库与所述业务层的连接;可见,本发明通过建立可用标志为可用的数据库实例对应数据库与所述业务层的连接,实现主从数据库的高效、实时切换。
相对于现有技术,本发明实施例具有如下优点:
1、现有技术中主备机各有自己的代理,实现功能类似,容易造成系统冗余和资源浪费;而本发明对服务的所有数据库实例进行统一代理,这样,本发明的数据库代理与主从库是剥离的,能够形成公用的数据库代理,因此能够节省系统资源;
2、现有技术以广播方式将数据库操作包发给主用和备用机代理完成数据复制,加重了系统分发负载,延长了系统处理流程,容易造成系统开销的浪费,影响系统的并发效率;本发明依据业务层的调用请求建立数据库与业务层的连接,以实现业务层对数据库的操作,因此,本发明能够避免现有技术中广播方式带来的系统开销浪费和并发效率低的问题;
3、现有技术利用消息确认机制来进行数据库系统主备切换,容易造成在一定计时时间内消息拥堵排队,请求高峰期会造成大量请求等待,降低了系统的处理效率;而本发明通过建立可用标志为可用的数据库实例对应数据库与所述业务层的连接,实现主从数据库的高效、实时切换,能够避免多次消息确认带来的网络开销和大量的等待时间;
综上,本发明能够在保证正常容错的条件下,最大限度的降低网络和系统开销,提高系统的并发能力。
参照图3,示出了根据本发明一个实施例的数据库间切换方法流程图,具体可以包括:
步骤301、采用关联式容器存储服务的数据库实例,所述关联式容器中数据库实例在存储时的可用标志为可用;
步骤302、在接收到业务层的调用请求时,建立主数据库与所述业务层的连接;
步骤303、从所述关联式容器中选取可用标志为可用的数据库实例;
步骤304、建立所选取数据库实例对应数据库与所述业务层的连接;
步骤305、在捕获到数据库与所述业务层的连接异常次数大于第一阈值时,将所述关联式容器中相应数据库实例的可用标志修改为不可用;
步骤306、无限循环探测所述关联式容器中数据库实例的可用标志是否为可用,若为不可用,则发出报警提示,由数据库管理员依据所述报警提示对所述可用标志为不可用的数据库实例对应的数据库进行维护,并在维护完成后在数据库的检查表中将所述数据库的可用标志置为可用;
所述检查表与数据库一一对应,适于存储数据库的可用标志;
步骤307、针对所述可用标志为不可用的数据库实例,在检测到其对应数据库的检查表中数据库的可用标志为可用时,在所述关联式容器中将其可用标志修改为可用。
在具体实现中,可启动一个专门的线程无限循环探测所述关联式容器中数据库实例的可用标志。另外,为减轻系统负载,可以设置所述无限循环探测的周期N,如1s,2s等等,一个示例为可以在每次探测后通过slepp(N)等函数使计算机系统休眠;当然,本发明对具体的设置所述无限循环探测的周期N的方式不加以限制。
本发明的报警提示可用于向数据库管理员发出提示,由管理员进行数据库的维护;进一步,本发明可采用检查表存储数据库的可用标志,该检查表可由数据库管理员操作,例如,数据库管理员可以在接收到报警提示后,在相应数据库的检查表中将所述数据库的可用标志置为不可用,并在维护完成后在数据库的检查表中将所述数据库的可用标志置为可用,等等。
另外,本发明实施例针对所述可用标志为不可用的数据库实例,可以检测对应数据库的检查表中数据库的可用标志,并在检测结果为可用时,在所述关联式容器中将其可用标志修改为可用。
参照图4,示出了根据本发明一个实施例的数据库间切换方法流程图,具体可以包括:
步骤401、采用关联式容器存储服务的数据库实例,所述关联式容器中数据库实例在存储时的可用标志为可用;
步骤402、在接收到业务层的调用请求时,建立主数据库与所述业务层的连接;
步骤403、从所述关联式容器中选取可用标志为可用的数据库实例;
步骤404、针对数据库,记录其与所述业务层连接的数目;
步骤405、判断所选取数据库实例对应数据库与所述业务层连接的数目是否大于第二阈值,若是,则发出报警提示,否则,建立所述数据库与所述业务层的连接;
步骤406、在捕获到数据库与所述业务层的连接异常次数大于第一阈值时,将所述关联式容器中相应数据库实例的可用标志修改为不可用。
数据库通常会有性能瓶颈,如果不限制的在一台数据库上执行多种数据库操作,则容易降低数据库的反应时间,影响业务层的处理性能。
为了避免数据库达到性能瓶颈,本实施例的第二阈值用于表示数据库与业务层连接的数目的临界值,大于第二阈值则数据库很有可能达到性能瓶颈,于是发出报警提示。在实际中,第二阈值可由本领域技术人员根据实际需求得出,例如,数据库管理员可通过试验得到第二阈值等等,本发明对具体的设置第二阈值的方法不加以限制。
参照图5,示出了根据本发明一个实施例的数据库间切换方法流程图,具体可以包括:
步骤501、采用关联式容器存储服务的数据库实例,所述关联式容器中数据库实例在存储时的可用标志为可用;
步骤502、在接收到业务层的调用请求时,建立主数据库与所述业务层的连接;
步骤503、从所述关联式容器中选取可用标志为可用的数据库实例;
步骤504、建立所选取数据库实例对应数据库与所述业务层的连接;
步骤505、在捕获到数据库与所述业务层的连接异常次数大于第一阈值时,将所述关联式容器中相应数据库实例的可用标志修改为不可用;
步骤506、在所述业务层所连接数据库进行当前事务的处理过程中,以所述业务层所连接数据库作为主数据库,将所述主数据库的更新数据复制至从数据库;
步骤507、在所述主数据库等待多个从数据库中至少一者复制成功后,进行下一事务的处理。
现有技术中的主从复制为异步复制,异步复制可以提供最佳的性能,因为主数据库在将更新的数据写入它的二进制日志(Binlog)文件中后,无需等待验证更新数据是否已经复制到至少一台从数据库中,就可以自由处理其它事务。虽然异步复制具有处理速度快的优点,但也具有很高的风险:如果主数据库瞬间发生故障,而从数据库没来得及复制数据,会造成主数据库/从数据库数据的不一致,甚至造成数据丢失。这里,事务也即数据库事务(DatabaseTransaction),是指作为单个逻辑工作单元执行的一系列操作。
针对异步复制的风险,本发明采用半同步复制将所述主数据库的更新数据复制至从数据库,半同步复制的实施过程中,在等待多个从数据库中至少一者复制成功后,主数据库方可进行下一事务的处理;因此,能够确保主数据库和至少一台从数据库之间的数据一致性和冗余。
参照图6,示出了根据本发明一个实施例的半同步复制流程图,其中,主数据库和从数据库上均安装有半同步复制器;主数据库在将应用程序的更新数据写入它的二进制日志文件中后,等待多个从数据库中至少一者复制成功,在等待过程中不进行下一事务的处理;在将更新数据写入从数据库的中继二进制日志文件后,从数据库会向主数据库返回确认消息,所述确认消息代表复制成功。
当然,主数据库不能一直等待从数据库复制成功的,因为万一从数据库挂掉,那么主数据库将一直处于等待状态而不能处理事务。
因此,在本发明的一种优选实施例中,可以定义一个超时时间阈值,防止等待时间太长,单位通常ms;如果超过超时时间阈值,从数据库还没有响应,则可从半同步复制模式切换到异步复制模式。相应地,所述方法还可以包括:在等待时间大于超时时间阈值时,停止所述主数据库针对所述多个从数据库中至少一者复制成功的等待,并进行下一事务的处理。
参照图7,示出了根据本发明一个实施例的数据库间切换系统的结构图,具体可以包括:
关联式容器701,适于存储服务的数据库实例,所述关联式容器中数据库实例在存储时的可用标志为可用;
第一连接建立模块702,适于在接收到业务层的调用请求时,建立主数据库与所述业务层的连接;
实例选取模块703,适于从所述关联式容器中选取可用标志为可用的数据库实例;
第二连接建立模块704,适于建立所选取数据库实例对应数据库与所述业务层的连接;及
标志修改模块705,适于在捕获到数据库与所述业务层的连接异常次数大于第一阈值时,将所述关联式容器中相应数据库实例的可用标志修改为不可用。
在本发明的一种优选实施例中,所述系统还可以包括:
循环探测模块,适于循环探测所述关联式容器中数据库实例的可用标志是否为可用;
第一报警提示模块,适于在探测到所述关联式容器中数据库实例的可用标志为不可用时,发出报警提示,由数据库管理员依据所述报警提示对所述可用标志为不可用的数据库实例对应的数据库进行维护,并在维护完成后在数据库的检查表中将所述数据库的可用标志置为可用;所述检查表与数据库一一对应,适于存储数据库的可用标志;
检查表检测修改模块,适于针对所述可用标志为不可用的数据库实例,在检测到其对应数据库的检查表中数据库的可用标志为可用时,在所述关联式容器中将其可用标志修改为可用。
在本发明的另一种优选实施例中,所述系统还可以包括:
连接数目记录模块,适于针对数据库,记录其与所述业务层连接的数目;
连接数目判断模块,适于在所述第二连接建立模块建立所选取数据库实例对应数据库与所述业务层的连接前,判断所述数据库与所述业务层连接的数目是否大于第二阈值;
第二报警提示模块,适于在所述数据库与所述业务层连接的数目大于第二阈值时,发出报警提示;
所述第二连接建立模块,还具体适于在所述数据库与所述业务层连接的数目小于等于第二阈值时,建立所述数据库与所述业务层的连接。
在本发明的再一种优选实施例中,所述系统还可以包括:
主从复制模块,适于在所述业务层所连接数据库进行当前事务的处理过程中,以所述业务层所连接数据库作为主数据库,将所述主数据库的更新数据复制至从数据库;
等待模块,适于在所述主数据库等待多个从数据库中至少一者复制成功后,进行下一事务的处理。
在本发明实施例中,优选的是,所述系统还可以包括:
等待停止模块,适于在等待时间大于超时时间阈值时,停止所述主数据库针对所述多个从数据库中至少一者复制成功的等待,并进行下一事务的处理。
在本发明的一种优选实施例中,所述系统还可以包括:适于获取所述关联式容器中存储的服务的数据库实例的容器实例获取模块;
所述容器实例获取模块具体可以包括:
服务实例获取子模块,适于在服务启动时,依据操作系统环境变量获取服务的数据库实例;
数据库连接池,适于存放所获取数据库实例及相应的连接;
插入子模块,适于对所述数据库连接池中连接正常的数据库实例,将其可用标志置为可用,并插入相应的关联式容器中。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例中的一些或者全部部件的一些或者全部功能。本发明还可以实现为适于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
Claims (10)
1.一种数据库间切换方法,包括:
采用关联式容器存储服务的数据库实例,所述关联式容器中数据库实例在存储时的可用标志为可用;
在接收到业务层的调用请求时,建立主数据库与所述业务层的连接;
在所述业务层所连接数据库对应数据库实例的可用标志为不可用时,从所述关联式容器中选取可用标志为可用的数据库实例;
建立所选取数据库实例对应数据库与所述业务层的连接;
在捕获到数据库与所述业务层的连接异常次数大于第一阈值时,将所述关联式容器中相应数据库实例的可用标志修改为不可用;
通过如下步骤获取所述关联式容器中存储的服务的数据库实例:
在服务启动时,依据操作系统环境变量获取服务的数据库实例;
采用数据库连接池存放所获取数据库实例及相应的连接;
针对所述数据库连接池中连接正常的数据库实例,将其可用标志置为可用,并插入相应的关联式容器中。
2.如权利要求1所述的方法,还包括:
无限循环探测所述关联式容器中数据库实例的可用标志是否为可用,若为不可用,则发出报警提示,由数据库管理员依据所述报警提示对所述可用标志为不可用的数据库实例对应的数据库进行维护,并在维护完成后在数据库的检查表中将所述数据库的可用标志置为可用;所述检查表与数据库一一对应,适于存储数据库的可用标志;
针对所述可用标志为不可用的数据库实例,在检测到其对应数据库的检查表中数据库的可用标志为可用时,在所述关联式容器中将其可用标志修改为可用。
3.如权利要求1所述的方法,还包括:
针对数据库,记录其与所述业务层连接的数目;
在建立所选取数据库实例对应数据库与所述业务层的连接前,判断所述数据库与所述业务层连接的数目是否大于第二阈值,若是,则发出报警提示,否则,建立所述数据库与所述业务层的连接。
4.如权利要求1所述的方法,还包括:
在所述业务层所连接数据库进行当前事务的处理过程中,以所述业务层所连接数据库作为主数据库,将所述主数据库的更新数据复制至从数据库;
在所述主数据库等待多个从数据库中至少一者复制成功后,进行下一事务的处理。
5.如权利要求4所述的方法,还包括:
在等待时间大于超时时间阈值时,停止所述主数据库针对所述多个从数据库中至少一者复制成功的等待,并进行下一事务的处理。
6.一种数据库间切换系统,包括:
关联式容器,适于存储服务的数据库实例,所述关联式容器中数据库实例在存储时的可用标志为可用;
第一连接建立模块,适于在接收到业务层的调用请求时,建立主数据库与所述业务层的连接;
实例选取模块,适于在所述业务层所连接数据库对应数据库实例的可用标志为不可用时,从所述关联式容器中选取可用标志为可用的数据库实例;
第二连接建立模块,适于建立所选取数据库实例对应数据库与所述业务层的连接;及
标志修改模块,适于在捕获到数据库与所述业务层的连接异常次数大于第一阈值时,将所述关联式容器中相应数据库实例的可用标志修改为不可用;
适于获取所述关联式容器中存储的服务的数据库实例的容器实例获取模块;
所述容器实例获取模块包括:
服务实例获取子模块,适于在服务启动时,依据操作系统环境变量获取服务的数据库实例;
数据库连接池,适于存放所获取数据库实例及相应的连接;
插入子模块,适于对所述数据库连接池中连接正常的数据库实例,将其可用标志置为可用,并插入相应的关联式容器中。
7.如权利要求6所述的系统,还包括:
循环探测模块,适于循环探测所述关联式容器中数据库实例的可用标志是否为可用;
第一报警提示模块,适于在探测到所述关联式容器中数据库实例的可用标志为不可用时,发出报警提示,由数据库管理员依据所述报警提示对所述可用标志为不可用的数据库实例对应的数据库进行维护,并在维护完成后在数据库的检查表中将所述数据库的可用标志置为可用;所述检查表与数据库一一对应,适于存储数据库的可用标志;
检查表检测修改模块,适于针对所述可用标志为不可用的数据库实例,在检测到其对应数据库的检查表中数据库的可用标志为可用时,在所述关联式容器中将其可用标志修改为可用。
8.如权利要求6所述的系统,还包括:
连接数目记录模块,适于针对数据库,记录其与所述业务层连接的数目;
连接数目判断模块,适于在所述第二连接建立模块建立所选取数据库实例对应数据库与所述业务层的连接前,判断所述数据库与所述业务层连接的数目是否大于第二阈值;
第二报警提示模块,适于在所述数据库与所述业务层连接的数目大于第二阈值时,发出报警提示;
所述第二连接建立模块,还具体适于在所述数据库与所述业务层连接的数目小于等于第二阈值时,建立所述数据库与所述业务层的连接。
9.如权利要求6所述的系统,还包括:
主从复制模块,适于在所述业务层所连接数据库进行当前事务的处理过程中,以所述业务层所连接数据库作为主数据库,将所述主数据库的更新数据复制至从数据库;
等待模块,适于在所述主数据库等待多个从数据库中至少一者复制成功后,进行下一事务的处理。
10.如权利要求9所述的系统,还包括:
等待停止模块,适于在等待时间大于超时时间阈值时,停止所述主数据库针对所述多个从数据库中至少一者复制成功的等待,并进行下一事务的处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210426087.XA CN102968457B (zh) | 2012-10-30 | 2012-10-30 | 数据库间切换方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210426087.XA CN102968457B (zh) | 2012-10-30 | 2012-10-30 | 数据库间切换方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102968457A CN102968457A (zh) | 2013-03-13 |
CN102968457B true CN102968457B (zh) | 2015-09-30 |
Family
ID=47798595
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210426087.XA Expired - Fee Related CN102968457B (zh) | 2012-10-30 | 2012-10-30 | 数据库间切换方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102968457B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104462200A (zh) * | 2014-10-31 | 2015-03-25 | 北京思特奇信息技术股份有限公司 | 一种通过第三方数据库控制系统切换的方法及系统 |
CN106202075B (zh) * | 2015-04-29 | 2021-02-19 | 中兴通讯股份有限公司 | 一种数据库主备切换的方法及装置 |
CN106570021A (zh) * | 2015-10-10 | 2017-04-19 | 阿里巴巴集团控股有限公司 | 数据库连接建立方法及装置 |
CN107038077B (zh) * | 2016-11-17 | 2021-07-27 | 创新先进技术有限公司 | 消息蓄洪方法及装置 |
CN108415922B (zh) * | 2017-09-30 | 2021-10-22 | 平安科技(深圳)有限公司 | 数据库修改方法及应用服务器 |
CN109871370A (zh) * | 2019-01-08 | 2019-06-11 | 网联清算有限公司 | 数据库管理方法、装置、存储介质及计算机设备 |
CN113626095A (zh) * | 2021-06-29 | 2021-11-09 | 欧电云信息科技(江苏)有限公司 | 配置中心的切换方法、切换系统、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6202067B1 (en) * | 1998-04-07 | 2001-03-13 | Lucent Technologies, Inc. | Method and apparatus for correct and complete transactions in a fault tolerant distributed database system |
CN101408899A (zh) * | 2008-11-21 | 2009-04-15 | 北京中企开源信息技术有限公司 | 一种网站多数据源切换方法和装置 |
CN102194009A (zh) * | 2011-06-09 | 2011-09-21 | 北京新媒传信科技有限公司 | 一种数据库托管方法和一种数据库托管平台系统 |
CN102609467A (zh) * | 2012-01-16 | 2012-07-25 | 北京星网锐捷网络技术有限公司 | 数据库连接管理方法和装置 |
-
2012
- 2012-10-30 CN CN201210426087.XA patent/CN102968457B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6202067B1 (en) * | 1998-04-07 | 2001-03-13 | Lucent Technologies, Inc. | Method and apparatus for correct and complete transactions in a fault tolerant distributed database system |
CN101408899A (zh) * | 2008-11-21 | 2009-04-15 | 北京中企开源信息技术有限公司 | 一种网站多数据源切换方法和装置 |
CN102194009A (zh) * | 2011-06-09 | 2011-09-21 | 北京新媒传信科技有限公司 | 一种数据库托管方法和一种数据库托管平台系统 |
CN102609467A (zh) * | 2012-01-16 | 2012-07-25 | 北京星网锐捷网络技术有限公司 | 数据库连接管理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102968457A (zh) | 2013-03-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102955851B (zh) | 一种数据库的切换方法和装置 | |
CN102968457B (zh) | 数据库间切换方法和系统 | |
JP5102901B2 (ja) | データセンタにわたる複数データサーバ間のデータ完全性を保持する方法およびシステム | |
Hammer et al. | Reliability mechanisms for SDD-1: A system for distributed databases | |
CN111209142B (zh) | 跨数据库的事务管理方法、装置、设备及存储介质 | |
US8495635B2 (en) | Mechanism to enable and ensure failover integrity and high availability of batch processing | |
US20040078397A1 (en) | Disaster recovery | |
CN103608781A (zh) | 用于服务的恢复服务位置 | |
WO2002067111A2 (en) | Workflow engine and system | |
US20080126502A1 (en) | Multiple computer system with dual mode redundancy architecture | |
CN103414712A (zh) | 一种分布式虚拟桌面管理系统和方法 | |
CN109656742A (zh) | 一种节点异常处理方法、装置及存储介质 | |
CN108337315B (zh) | 监控系统的部署方法、装置、计算机设备及存储介质 | |
CN105162879A (zh) | 实现多机房数据一致性的方法、装置及系统 | |
US20090044186A1 (en) | System and method for implementation of java ais api | |
CN110162344A (zh) | 一种隔离限流的方法、装置、计算机设备及可读存储介质 | |
WO2018234265A1 (en) | SYSTEM AND APPARATUS FOR TREATMENT GUARANTEED EXACTLY ONCE OF AN EVENT IN AN ENVIRONMENT MANAGED BY A DISTRIBUTED EVENT | |
CN101176068A (zh) | 用于有助于企业信息系统和客户之间的通信的装置、系统和方法 | |
JP5154843B2 (ja) | クラスタシステム、計算機、および障害回復方法 | |
EP3811227B1 (en) | Methods, devices and systems for non-disruptive upgrades to a distributed coordination engine in a distributed computing environment | |
CN108270832A (zh) | 一种故障重放方法和装置 | |
CN112069160B (zh) | 一种基于cap数据清洗同步方法 | |
CN111752911A (zh) | 一种基于Flume的数据传输方法、系统、终端及存储介质 | |
CN102662702B (zh) | 设备管理系统、装置、基板管理装置及方法 | |
CN111666132A (zh) | 分布式事务实现方法、装置、计算机系统及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150930 |