一种用于防止RAC实例间数据访问发生冲突的方法及系统技术方案

技术编号:21832521 阅读:44 留言:0更新日期:2019-08-10 17:57
本发明专利技术公开了一种用于防止数据库RAC实例间数据访问发生冲突的方法:基于组织ID创建业务表的列表分区,将客户的组织ID作为业务表的索引字段;通过路由规则将组织ID和客户端IP进行关联;获取提出访问请求的客户端IP,按照路由规则确定客户端IP所关联的组织ID对应的相同列表分区;获取客户端针对相同的列表分区的访问请求,通过反向代理服务器将相同的列表分区的访问请求发送至对应的应用服务器的相同数据库实例。将同一个表的任意一个分区数据只会缓存到一个实例的缓存中,实例间的业务表不需要数据互相传输,不同分区间也不存在锁争用现象,从而避免了实例间的访问冲突,提高了系统的性能和处理能力,解决了利用Oracle架构的难题。

A Method and System for Preventing Data Access Conflict between RAC Instances

【技术实现步骤摘要】
一种用于防止RAC实例间数据访问发生冲突的方法及系统
本专利技术涉及数据库应用
,更具体地,涉及一种用于防止RAC实例间数据访问发生冲突的方法及系统。
技术介绍
OracleRAC是一种提高系统高可用性的技术架构,同时也是一种集群技术,集群中节点的数量为2个及以上。许多计算机系统的后台数据库都采用了OracleRAC,大型企业或者集团级别的系统尤其如此。但困扰数据库设计和运维人员的主要难题是RAC实例间数据的访问冲突问题。Oracle数据库提供了冲突检测的方法和实例间数据共享的机制,但数据库架构的设计仍然至关重要,这是因为数据库设计决定了冲突发生的数量,从而决定了系统的性能。业界的广泛做法是业务分离或读写分离,然而,一方面读写分离开发难度大和开发周期长,另一方面如果单节点提供不了业务所需的处理能力,则只能选用更高档次的服务器了。Oracle分区技术是一种将大表转化为若干个小表的分而治之的技术,支持的分区方式包括范围分区、哈希分区、列表分区等。将大表分成小表后,逻辑上仍是一个表,对开发人员透明,同时又能提高系统的性能。现有技术(CN201610258541.3《一种减小RAC节点间GC请求的方法及装置》),公开了一种减小RAC节点间GC请求的方法,包括:接收客户端发送的业务操作请求,业务操作请求包含SQL语句。根据SQL语句解析SQL语句对应的表名称,判断SQL语句对应的表名称是否存在于表信息内存区的业务表中。如果是,根据业务表的访问规则接通SQL语句对应的子连接池和与子连接池对应的访问路径;如果否,则为SQL语句分配访问路径,然后接通SQL语句对应的子连接池和与子连接池对应的访问<171964I-BJ>路径。现有技术公开的一种减小RAC节点间GC请求的技术,提高了SQL语句的执行效率。然而,现有技术并不能解决实例间数据的相互传输,以及实例间数据访问冲突的问题。因此,需要一种技术,以实现用于防止RAC实例间数据访问发生冲突的技术。
技术实现思路
本专利技术提供了一种用于防止RAC实例间数据访问发生冲突的方法及系统,以解决RAC实例间数据访问发生冲突的问题。为了解决上述问题,本专利技术提供了一种用于防止数据库RAC实例间数据访问发生冲突的方法,所述方法包括:基于组织ID创建业务表的列表分区,将客户的组织ID作为业务表的索引字段;通过所述路由规则将组织ID和客户端IP进行关联;获取提出访问请求的客户端的客户端IP,按照所述路由规则确定所述客户端IP所关联的组织ID对应的相同的列表分区;获取所述客户端针对所述相同的列表分区的访问请求,通过反向代理服务器将所述相同的列表分区的访问请求发送至对应的应用服务器的相同数据库实例。优选地,所述业务表的每个列表分区中,存储至少一个组织ID的数据。优选地,所述每个列表分区的数据,只缓存在一个数据库实例中。优选地,还包括:对于第一次发出请求的客户端,将所述客户端针对所述相同的列表分区的访问请求,通过所述反向代理服务器根据轮询算法将所述相同列表分区的访问请求发送至对应的应用服务器的节点。优选地,还包括:对于不是第一次发出请求的客户端,将所述客户端针对所述相同的列表分区的访问请求,通过所述反向代理服务器将所述相同列表分区的访问请求发送至所述客户端第一次发出请求时对应的应用服务器的节点。优选地,还包括:不同的数据库实例缓存所述业务表中所述不同的列表分区的数据。优选地,还包括:所述每个应用服务器对应一个可用的数据库实例。基于本专利技术的另一方面,提供一种用于防止数据库RAC实例间数据访问发生冲突的系统,所述系统包括:分区单元,用于基于组织ID创建业务表的列表分区,将客户的组织ID作为业务表的索引字段;规则单元,用于通过所述路由规则将组织ID和客户端IP进行关联;确定单元,用于获取提出访问请求的客户端的客户端IP,按照所述路由规则确定所述客户端IP所关联的组织ID对应的相同的列表分区;执行单元,用于获取所述客户端针对所述相同的列表分区的访问请求,通过反向代理服务器将所述相同的列表分区的访问请求发送至对应的应用服务器的相同数据库实例。优选地,所述分区单元还用于:所述业务表的每个列表分区中,存储至少一个组织ID的数据。优选地,所述分区单元还用于:所述每个列表分区的数据,只缓存在一个数据库实例中。优选地,所述执行单元还用于:对于第一次发出请求的客户端,将所述客户端针对所述相同的列表分区的访问请求,通过所述反向代理服务器根据轮询算法将所述相同列表分区的访问请求发送至对应的应用服务器的节点。优选地,所述执行单元还用于:对于不是第一次发出请求的客户端,将所述客户端针对所述相同的列表分区的访问请求,通过所述反向代理服务器将所述相同列表分区的访问请求发送至所述客户端第一次发出请求时对应的应用服务器的节点。优选地,所述执行单元中,不同的数据库实例缓存所述业务表中所述不同的列表分区的数据。优选地,所述执行单元中,所述每个应用服务器对应一个可用的数据库实例。本专利技术技术方案采用Oracle分区表存储超过4GB的业务表,将相关的数据表根据组织ID进行分区,通过前端反向代理服务器Nginx及应用服务器将相关请求路由到相应数据库实例,而不是表的分区。本专利技术技术方案只是将不同表的访问请求路由到不同的数据库实例。本专利技术技术方案将业务表分区后,将大表拆成了小表,而且在表关联查询时也不存在读取其它实例数据的需求,避免了数据库实例间数据块的相互传输,进而有效避免了OracleRAC实例数据访问冲突,提高系统的响应速度和处理能力。附图说明通过参考下面的附图,可以更为完整地理解本专利技术的示例性实施方式:图1为根据本专利技术实施方式的用于防止RAC实例间数据访问发生冲突的方法流程图;图2为根据本专利技术实施方式的用于防止RAC实例间数据访问发生冲突的系统架构图;图3为根据本专利技术实施方式的业务表访问流程图;图4为根据本专利技术实施方式的Oracle数据库实例结构示意图;图5为根据本专利技术实施方式的Oracle集群数据缓存实例结构示意图;以及图6为根据本专利技术实施方式的用于防止RAC实例间数据访问发生冲突的系统结构图。具体实施方式现在参考附图介绍本专利技术的示例性实施方式,然而,本专利技术可以用许多不同的形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全地公开本专利技术,并且向所属
的技术人员充分传达本专利技术的范围。对于表示在附图中的示例性实施方式中的术语并不是对本专利技术的限定。在附图中,相同的单元/元件使用相同的附图标记。除非另有说明,此处使用的术语(包括科技术语)对所属
的技术人员具有通常的理解含义。另外,可以理解的是,以通常使用的词典限定的术语,应当被理解为与其相关领域的语境具有一致的含义,而不应该被理解为理想化的或过于正式的意义。图1为根据本专利技术实施方式的一种用于防止RAC实例间数据访问发生冲突的方法流程图。本专利技术实施方式公开一种有效避免OracleRAC实例间数据访问冲突的方法,本申请既利用Oracle分区技术,也利用了Nginx反向代理服务器的自定义路由规则及业务系统中组织ID与客户端IP地址的对应关系,将可能产生过多RAC实例间访问冲突的大表按照组织ID创建列表分区,通过反向代理服务器Nginx路由,不同的本文档来自技高网
...

【技术保护点】
1.一种用于防止数据库RAC实例间数据访问发生冲突的方法,所述方法包括:基于组织ID创建业务表的列表分区,将客户的组织ID作为业务表的索引字段;通过所述路由规则将组织ID和客户端IP进行关联;获取提出访问请求的客户端的客户端IP,按照所述路由规则确定所述客户端IP所关联的组织ID对应的相同的列表分区;获取所述客户端针对所述相同的列表分区的访问请求,通过反向代理服务器将所述相同的列表分区的访问请求发送至对应的应用服务器的相同数据库实例。

【技术特征摘要】
1.一种用于防止数据库RAC实例间数据访问发生冲突的方法,所述方法包括:基于组织ID创建业务表的列表分区,将客户的组织ID作为业务表的索引字段;通过所述路由规则将组织ID和客户端IP进行关联;获取提出访问请求的客户端的客户端IP,按照所述路由规则确定所述客户端IP所关联的组织ID对应的相同的列表分区;获取所述客户端针对所述相同的列表分区的访问请求,通过反向代理服务器将所述相同的列表分区的访问请求发送至对应的应用服务器的相同数据库实例。2.根据权利要求1所述的方法,所述业务表的每个列表分区中,存储至少一个组织ID的数据。3.根据权利要求1所述的方法,所述每个列表分区的数据,只缓存在一个数据库实例中。4.根据权利要求1所述的方法,还包括:对于第一次发出请求的客户端,将所述客户端针对所述相同的列表分区的访问请求,通过所述反向代理服务器根据轮询算法将所述相同的列表分区的访问请求发送至对应的应用服务器的节点。5.根据权利要求4所述的方法,还包括:对于不是第一次发出请求的客户端,将所述客户端针对所述相同的列表分区的访问请求,通过所述反向代理服务器将所述相同的列表分区的访问请求发送至所述客户端第一次发出请求时对应的应用服务器的节点。6.根据权利要求1所述的方法,还包括:不同的数据库实例缓存所述业务表中所述不同的列表分区的数据。7.根据权利要求1所述的方法,还包括:所述每个应用服务器对应一个可用的数据库实例。8.一种用于防止数据库RAC实例间数据访问发生冲突的系统,所述系统包括:...

【专利技术属性】
技术研发人员:王恒峰
申请(专利权)人:航天信息股份有限公司
类型:发明
国别省市:北京,11

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

1