实战课堂 | DMS企业版教你用一条SQL搞定跨实例查询
背景
数据管理DMS企业版提供了安全、高效地管理大规模数据库的服务。面对多元的数据库实例,为了更方便地查询被“散落”在各个地方的业务数据,我们在DMS企业版中提供了跨数据库实例查询服务。
什么是跨实例查询
跨实例查询服务支持通过标准SQL进行跨同异构数据库的实时查询。
对于您在企业版中的实例,无论它们是关系型数据库MySQL、PolarDB、DRDS、SQLServer、PostgreSQL,还是非关系型数据库Redis,您都可以通过一条SQL轻松完成跨数据库实例的查询。

如何进行跨实例查询
每当您在企业版中注册一个跨库查询支持的实例,系统就将自动为其创建DBLink,您可以为其命名。您可以将DBLink名称认为是该数据库实例的别名。
对于您在企业版中已有的实例或者您批量导入的实例,系统将自动为其命名,您后续可以对该名字进行修改。
有了DBLink名称,您就可以用DBLink名称指代您希望进行查询的实例。通过DBLinkName.DatabaseName.TableName的格式,您就可以进行跨库查询操作了。
应用案例
案例1 垂直拆分后的跨数据库查询
DMS企业版的用户某电商公司由于业务发展迅猛,访问量极速增长,导致数据库容量及性能遭遇瓶颈,因此用户决定将会员、商品、订单数据分别存放在三个数据库实例中。用户将订单库所在的实例A取名为buyer_db,订单所在的库为buyer,订单表为order_list,将商品库所在的实例B取名为seller_db,商品所在的库为commodity,商品表为commodity。此时,公司的数据分析人员想要获取某个品类商品的实时售卖订单量,需要变成跨两个数据库实例A和B的查询,怎么办?
有了跨库查询,无需数据迁移、数据汇集、ETL,即可直接完成多个在线数据库之间的关联查询。
一条SQL,用户即可解决上述难题:

案例2 水平拆分后的跨数据库查询
DMS企业版的用户某酒店在多个城市都有对应的门店,其数据库在每个城市也会单独部署一套,业务上有对多个城市全局数据查询的诉求。同样,现在越来越多的互联网行业开始引入单元化架构,在每个城市会单独部署机房和数据库,进行多单元数据汇总查询的需求也越来越强。为了满足云上这些跨单元、跨region的数据库查询需求,跨库查询服务打通region之间的屏障,用户通过一条SQL就能实现这些需求。

案例3 异构数据库的关联查询
DMS企业版的用户某公司考虑成本和未来可扩展性,正在将业务数据从SQLServer迁移到MySQL上。在这期间,必然存在某些业务子系统仍然在SQLServer上,另外一些业务子系统已经全部迁移到MySQL上,这时两个子系统之间的联合查询,就可以借助跨库查询实现。不仅如此,在迁移过程中,还可以通过DSQL,来校验SQLServer和MySQL上的数据是否一致。
案例4 混合云场景的关联查询
DMS企业版的用户某游戏公司,由于各种原因,在DMS企业版中同时保有阿里云、腾讯、UCloud、AWS等环境的数据库实例,同时在自己自建的IDC也部署了部分数据库。业务的数据如此分散,单是统计一下当前游戏在线用户数,都要分别到各个环境去查询一遍再做汇总。借助跨库查询服务,一条SQL就能实现跨云厂商和IDC之间的关联查询。

案例5 关系型与非关系型数据库的关联查询
DMS企业版的用户某游戏客户将用户积分排行榜存储在redis zset中,而将用户元信息维护在MySQL user表中。用户希望在游戏APP中能实时刷新用户的积分排行榜,通过跨库查询服务,就可以实现跨MySQL及Redis查询的需求。
用户在Redis Score Set中存储用户积分情况、用户ID及score。key的名称为user_score, value为用户ID, score为用户积分。
样例数据如下表:
| key | value | score |
|---|---|---|
| user_score | 100 | 10 |
| user_score | 200 | 35 |
| user_score | 300 | 45 |
用户在MySQL User表中存储用户的基本信息,包括user_id, user_name, province, city, gmt_create等。
样例数据如下表:
| user_id | user_name | province | city | gmt_create |
|---|---|---|---|---|
| 100 | 张三 | 浙江 | 杭州 | 2019-8-11 11:11:11 |
| 200 | 李四 | 广东 | 深圳 | 2019-7-11 12:11:01 |
用户只需要一条SQL,将redis中的用户ID跟MySQL中的user_id进行关联,就可以方便地查询用户的积分排行榜。

小结
跨库查询服务为您提供了您在DMS企业版中的多个实例之间的关联查询。
详细使用文档您可以参考:使用文档
本文作者:Roin
本文为云栖社区原创内容,未经允许不得转载。
实战课堂 | DMS企业版教你用一条SQL搞定跨实例查询的更多相关文章
- 阿里云数据管理DMS企业版发布年度重大更新 多项功能全面升级
随着企业规模和人员扩充,您是否遇到这些问题:企业员工还在使用数据库账号直接操作数据库?人员流动导致运维人员频繁维护数据库账号密码?所有数据库变更还在等DBA集中执行,导致研发效率日益低下. 2月27日 ...
- 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...
原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...
- 教你怎么半天搞定Docker
首先,不要把docker想的那么高大,它不就是先做个镜像,然后通过docker像虚拟机一样跑起来嘛...docker其实在真实业务场景中还是非常有局限性的.Dockerfile脚本也没那么好写,有些应 ...
- SQL总结(七)查询实战
SQL总结(七)查询实战 一.场景 给定一个场景,学生选课系统为例,大家很熟悉. 主要关系: 学生(学号.姓名.年龄.性别) 教师(教师ID,教师姓名) 课程(课程ID,课程名称,任教教师ID) 成绩 ...
- iOS开发——实用技术OC篇&8行代码教你搞定导航控制器全屏滑动返回效果
8行代码教你搞定导航控制器全屏滑动返回效果 前言 如果自定了导航控制器的自控制器的leftBarButtonItem,可能会引发边缘滑动pop效果的失灵,是由于 self.interactivePop ...
- Asp.Net Core 2.0 项目实战(6)Redis配置、封装帮助类RedisHelper及使用实例
本文目录 1. 摘要 2. Redis配置 3. RedisHelper 4.使用实例 5. 总结 1. 摘要 由于內存存取速度远高于磁盘读取的特性,为了程序效率提高性能,通常会把常用的不常变动的数 ...
- 手把手教你制作微信小程序,开源、免费、快速搞定
最近做了个"罗孚传车"的小程序 一时兴起,做了一个小程序,将个人收集的同汽车相关的行业资讯和学习资料,分享到小程序中,既作为历史资料保存,又提供给更多的人学习和了解,还能装一下:) ...
- Scala入门教程---《chang哥教你一天搞定Scala》
<chang哥教你一天搞定Scala> /** * <chang哥教你一天搞定Scala> * scala是一门多范式编程语言,集成了面向对象编程和函数式编程等多种特性. * ...
- 【原型实战】分分钟搞定Unsplash网站原型设计
网站原型设计是我们在设计网页过程中必不可少的一步,激烈的市场竞争让我们不得不对产品进行快速迭代,如何高速有效的进行原型设计成为了设计师头疼的问题.本文将以unsplash网站为实例,教大家快速搞定we ...
随机推荐
- 一个mdl相关的问题
感觉挺有意义的,细节问题 http://www.kernelmode.info/forum/viewtopic.php?f=14&t=4318这个人代码到底犯了什么错误 I want to p ...
- 帝国cms学习
手册地址1 手册地址2 入门 安装: 将下载的upload里的文件上传到网站更目录 然后 域名/e/install/index.php Warning: Use of undefined consta ...
- Django问题2
接触django是从上个月开始,学习python时间也不长,但我经常在社区看看别人发表的文章,早上看到一篇不错的博客,却一直不能访 问,最终从bing的缓存里找到,因为害怕丢失和忘掉,所以顺便翻译过来 ...
- P++ 1.0.5
#include<bits/stdc++.h> #define begin { #define end } #define while while( #define if if( #def ...
- @Component 和 @Bean 的区别
Spring帮助我们管理Bean分为两个部分,一个是注册Bean,一个装配Bean.完成这两个动作有三种方式,一种是使用自动配置的方式.一种是使用JavaConfig的方式,一种就是使用XML配置的方 ...
- localStorage,sessionStorage,cookie区别
localStorage:HTML5新增的在浏览器端存储数据的方法.设置和获取localStorage的方法: 设置: localStorage.name = 'zjj'; 获取: localStor ...
- dp练习集
动态规划(DP) // 以下题目来自牛客网 删括号 f[i][j][k] 表示序列s的前i个匹配序列t的前j个,序列s删除部分左括号与右括号数量差为k的情况是否可行 答案为 f[sl][tl][0] ...
- 「loj#6261」一个人的高三楼
题目 显然存在一个这样的柿子 \[S^{(k)}_i=\sum_{j=1}^iS^{(k-1)}_j\] 我们可以视为\(S^{(k)}\)就是由\(S^{(k-1)}\)卷上一个长度为\(n\)全是 ...
- js如何往数组Array中添加元素 (2013-09-04 10
unshift:将参数添加到原数组开头,并返回数组的长度 pop:删除原数组最后一项,并返回删除元素的值:如果数组为空则返回undefined push:将参数添加到原数组末尾,并返回数组的长度 co ...
- MFC ,List使用
出自http://www.cnblogs.com/yuehui/archive/2012/06/15/2550449.html List容器双向线性表list容器 list类定义了双向的线性表.V ...