备库关联查询的设计思考(r7笔记第41天)

作者: admin 分类: 公众号存档            0 次浏览 发布时间: 2015-12-08 23:39

公众号:杨建荣的学习笔记 · 作者:杨建荣 · 发布:2015-12-08 23:39:47 · 原文链接

现在有一个需求,目前在开发的同学需要做一些查询,但是涉及的两个表在两个不同的数据库里面。就是下面的形式。从他们的反馈来看还需要做表关联,是统计业务相关,对于数据的实时性要求不是很高。

所以这个需求看起来是需要直接用db link来做关联了,但是两个表都还比较大,一个local,一个remote还是有不少的潜在风险,表的数据量在百万,千万级,所以对于这种关联的统计查询,我是不主张直接在主库用的。所以首先向到了备库。
因为是11g的adg,所以这个问题其实也算是一个不错的思路。
于是实现方式就类似下面的形式。

在db1的备库中创建一个同义词指向db2,使用db link的形式。这种方式看起来还行,但是一个潜在的风险就是这种关联查询在db2中会很可能有较高的负载。
所以这部分压力可以分担开来直接指向db2的备库,类似下面的形式。

基本的读取压力解决了,来看看安全问题。
现在的问题是,目前的这种需求我的主张是不让开发的同学在主库上运行这种查询,从而避免更多的误操作和潜在风险。
那么怎么来实现呢。可以看看下面这个完整的图。

在 这种实现方式中,基本都是备库之间的事儿了,app直接指向两个备库,以db1为基准节点做表关联查询,防火墙在db1,db2之间都是彼此不通的,只在 备库之间开,那么在db1的主库创建了db link之后,因为备库的网路互通,主库网络不互通,所以db link其实只在备库生效。然后在主库创建同义词的ddl会同步到备库去,这样就间接同步了这种结构。
所以备库之间做关联查询大体来看是没有问题的,那么开发的同事需要做什么查询对于DBA来说还是需要做一些改进和审核的,我们也可以提供不少的改进经验进来。

admin

杨建荣,《Oracle DBA工作笔记》《MySQL DBA工作笔记》作者,dbaplus社群发起人之一,腾讯云TVP,现任竞技世界系统部经理,拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注