教你用一条SQL搞定跨数据库查询难题

导读

日前,某电商用户由于业务发展迅猛,访问量极速增长,导致数据库容量及性能遭遇瓶颈。为降低数据库大小,提升性能,用户决定对架构进行垂直拆分。根据不同的表来进行拆分,对应用程序的影响也更小,拆分规则也会比较简单清晰。

该用户按照会员、商品、订单,将数据垂直拆分至三个数据库,分库后数据分布到不同的数据库实例,以达到降低数据量,增加实例数的扩容目的。然而前途是美好的,道路是曲折的。一旦涉及拆分,就逃不开“原本在同一数据库里的查询,要变成跨两个数据库实例”的查询问题

单库时,系统中很多列表和详情页所需数据可以简单通过SQL join关联表查询;而拆库后,拆分后的数据可能分布在不同的节点/实例上,不能跨库使用join,此时join带来的问题就很棘手了。


例如:业务中需要展示某个品类商品的售卖订单量,现在订单数据和商品数据分布在两个独立的数据库实例中,业务上要怎么进行关联查询?

用户首先想到的方法是,对现有业务代码进行重构,分别从两个数据库查询数据,然后在业务代码中进行join关联。那么问题来了,如果采用这个解决方案,业务上那么多查询改造起来,拆分难度极大,操作起来过于复杂。跨库join操作又没有非常高效的办法,需要各个分库迭代查询,查询效率也会有一定影响。

是不是光想想就一个头两个大?别担心,关于数据库拆分后的业务改造难题,其实用一条SQL就可轻松搞定。具体解法如下⬇️

解决思路

经沟通,我们发现用户遇到的其实就是典型的跨数据库实例查询问题。目前,阿里云DMS已经支持跨数据库实例SQL查询的能力,用户可以通过DMS,利用一条SQL即可解决上述难题。不仅能够满足“跨库Join”这一核心诉求,还能极大地简化用户的技术方案。



除了开篇介绍的客户案例,DMS跨数据库实例的查询功能可以解决我们业务中遇到的任意跨数据库查询的诉求。例如:跨线上库及历史库的join查询,快速获取全量数据;单元化架构下,join各个单元的数据库查询全局数据;游戏业务,可以join MySQL中的用户数据及MongoDB中的游戏装备数据等。

接下来,我们通过一个快速上手的实例,来看看用户如何写这条SQL。

商品库的信息

实例连接:198.12.13.1:3306 , 数据库名:seller
商品表名:commodity
包含部分字段的表结构:

create table commondity(
id BIGINT(20),  -- 商品ID
name varchar(100), -- 商品名称
create_time TIMESTAMP ,  -- 商品入库时间
catogary BIGINT(30), -- 商品类目
features text,  -- 商品描述
param text); -- 商品属性

订单库的信息

实例连接:198.12.13.2:3306 , 数据库名:buyer
订单表表名:order_list
包含部分字段的表结构:
单态)

create table order_list(
id BIGINT(20),  -- 订单ID
buyer_id BIGINT(30), -- 买家ID
create_time TIMESTAMP ,  -- 订单生成时间
seller_id BIGINT(30), -- 卖家ID
commodity_id BIGINT(30), -- 商品ID
status int(8) – 

创建DBLink

在编写查询SQL之前,需要先在DMS中配置卖家库和买家库的DBLink。

编写并运行跨库查询SQL

当DBLink配置完成后,即可开始在DMS中编写并运行SQL,实现查询某个商品的订单列表的需求。

SELECT comomndity.catogary,count(1)from buyer_db.buyer.order_list 
order,seller_db.seller.commondity commondity
where order.commodity_id= commondity.id
GROUP BY commondity.catogary;

这个SQL的语法完全兼容MySQL,只是在From的表名前面带上DBLink。
所以,业务方只需要使用DMS跨数据库查询SQL便可轻松解决拆库之后的跨库查询难题,业务基本无需改造。

什么是DMS跨数据库查询

 

SELECT * FROM oracle.dsqltest.b oracle inner join

mysql.dsqltest.a mysql on oracle.id = mysql.id 
WHERE oracle.id=1

DMS提供的跨数据库实例查询功能孵化于阿里巴巴集团,目前已服务超过5000名开发者,全面支撑阿里巴巴跨数据库实例的所有线上查询需求。DMS支持跨同异构数据库的在线查询,支持MySQL、SQLServer、PostgreSQL及Redis等数据源,为应用提供了一种数据全局查询的能力。用户无需通过数据汇集,即可通过标准SQL实现跨实例的交叉查询。

立即体验

  1. 请先登录DMS控制台。
  2. 从SQL操作中,进入跨实例SQL窗口。
  3. 创建DBlink,编写并运行SQL。


阿里云双十一1折拼团活动:满6人,就是最低折扣了!
【满6人】1核2G云服务器99.5元一年298.5元三年 2核4G云服务器545元一年 1227元三年
【满6人】1核1G MySQL数据库 119.5元一年
【满6人】3000条国内短信包 60元每6月
参团地址:http://click.aliyun.com/m/1000020293/


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漫画:什么是公有云、私有云和混合云?

戳蓝字“CSDN云计算”关注我们哦!作者 | 漫话编程 责编 | 阿秃为了方便大家理解,我们尽量用通俗的语言和举例子的方式讲解,并且文中还配备了漫画供大家参考学习。随着最近几年的云计算技术的主键发展和普及,越来越多的企业通过采用…

dell idrac 复位_DELL 服务器 装系统前初始化(恢复出厂、超线程、虚拟化、iDRAC设置)...

参考链接:一、初始化BIOS1、开机启动期间,按“F2 System Setup”(系统设置)2、按 重设 BIOS 或 UEFI 设置为其默认设置。二、CPU超线程设置:1、开机启动期间,按“F2 System Setup”(系统设置)2、选择“System BIOS”(BIOS设置)3…

PTS + ARMS打造性能和应用诊断利器

服务端的性能测试,尤其是业务性能测试,是用来评估性能容量、诊断性能瓶颈和应用错误,或是验证高可用的能力,以此达到降低成本、提升用户体验的目的。但是,当需要有进一步的定位和刨析时,这类性能测试就会显…

计算机如何玩二十四点游戏,数学二十四点游戏有什么技巧吗?

首先.电脑是不存在随机这样东西..因为电脑所用到的随机也不可能是完全的随机吧....怎么也是有个初始条件的吧..至于那个初始条件能不能模拟那就是另一回事了..纯粹数学上的话..应该把开了的区域和没开的区域分开..开了的区域和没开的区域之间的没开的第一行叫做他们的边界.这样…

mybatis 插入数据后返回自增id

useGeneratedKeys"true" keyProperty"id">sql全部内容&#xff1a; <insert id"insertSelective" parameterType"com.gblfy.mall.pojo.Shipping" useGeneratedKeys"true" keyProperty"id">insert into …

Envoy源码分析之Dispatcher

Dispatcher 在Envoy的代码中Dispatcher是随处可见的&#xff0c;可以说在Envoy中有着举足轻重的地位&#xff0c;一个Dispatcher就是一个EventLoop&#xff0c;其承担了任务队列、网络事件处理、定时器、信号处理等核心功能。在Envoy threading model这篇文章所提到的EventLoo…

这项技术厉害了!让旅行者 2 号从星际空间发首批数据!

限时8.3折&#xff0c;立即购票&#xff1a;https://dwz.cn/z1jHouwE物联网作为信息系统向物理世界的延伸&#xff0c;极大地拓展了人类认知和控制物理世界的能力&#xff0c;被称为继计算机和互联网之后的世界信息产业的第三次浪潮&#xff0c;正在深刻地改变着人类的生存环境…

修改文件 华为交换机_华为交换机系统文件管理配置命令大全(二)

11、解压文件&#xff08;unzip&#xff09;<Huawei>dirDirectory of flash:/Idx Attr Size(Byte) Date Time FileName0 drw- - Aug 07 2015 13:51:14 src1 drw- - Apr 02 2016 11:29:41 pmdata2 drw- - Apr 02 2016 11:29:52 dhcp3 -rw- 28 Apr 02 2016 11:29:53 privat…

从阿里云数据库入选Gartner谈数据库的演化

根据全球权威的IT咨询公司Gartner的最新研究报告&#xff0c;在2018年度数据库系统的魔力象限中&#xff0c;阿里云数据库被列入“远见者”象限&#xff0c;这是国产数据库首次进入Gartner魔力象限。Gartner的魔力四象限&#xff0c;描述了数据库厂商的产品能力和市场规模。四个…

申请美国计算机科学,美国计算机科学的申请特点

计算机科学官方定义&#xff1a;计算机科学是系统性研究信息与计算的理论基础以及它们在计算机系统中如何实现与应用的实用技术的学科。它通常被形容为对那些创造、描述以及转换信息的算法处理的系统研究&#xff0c;计算机科学专业的申请特点如下&#xff1a;申请难度中等学校…

mysql 插入数据时 自动设置创建时间和更新时间

一般除了配置表&#xff0c;表中都会有create_time &#xff0c;update_time 2个字段&#xff0c;而这个2个字段测处理方式雨2种&#xff1a; 1在代码中设置当前日期 2>mysq自动设置&#xff08;推荐使用&#xff09; 加入&#xff0c;已经设置好了&#xff0c;修改一下表结…

基于智能家居场景的POALRDB性能体验

Polardb 是阿里云研发的一种关系型数据库&#xff0c;与mysql完全兼容&#xff0c;而性能又是其6倍&#xff0c;具有高吞吐&#xff0c;低延迟等特性&#xff1b; 本测试通过模拟控制智能家居开关的终端场景&#xff0c;来体验polardb的性能&#xff1b; 1、环境搭建 1.1 po…

云计算软件生态圈:摸到一把大牌

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 老姜责编 | 阿秃出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;“我觉得我摸着了一把大牌。”软件领域的新锐企业——有赞公司创始人兼CEO白鸦在转向SaaS领域的一个细分市场时&#xff0c;曾对天使投资人…

箱梁终张拉后弹性上拱度计算_高速铁路预应力简支箱梁反拱预设分析

高速铁路预应力简支箱梁反拱预设分析关叶沆1&#xff0c;吴成龙1&#xff0c;王玲1【摘要】结合成贵铁路宜宾制梁场后张法预应力简支箱梁制作的具体情况&#xff0c;对梁体预设反拱理论计算及设置方法进行分析&#xff0c;并通过对箱梁梁体徐变及上拱度测量数据进行统计分析&am…

一体台式计算机名称,【一体台式电脑】一体台式电脑品牌推荐,台式一体机电脑哪款好_什么值得买...

1. Apple 苹果 MXWT2CH/A iMac(2019)27英寸一体机 8GB 2666MHZ DDR4 内存商品简介&#xff1a;Apple 苹果 iMac(2019)27英寸一体机保留了前代产品的27英寸5K屏幕(分辨率5120 x 2880&#xff0c;DCI-P3色域)对比上代Retina视网膜屏幕电脑&#xff0c;外观没有变化&#xff0c;主…

linux shell脚本 删除指定目录下文件夹(可指定文件夹名、时间)

情景&#xff1a;需要删除以201812开头的、6天前修改的文件夹&#xff08;文件夹里包含文件&#xff09;。鼓捣了好一会&#xff0c;开始用find /home/users/niu/test/log/ -name 201812* -type d -mtime 5 -exec rm -f {} \; 会报错&#xff1a;no such file or dire…

SLS机器学习介绍(02):时序聚类建模

文章系列链接 SLS机器学习介绍&#xff08;01&#xff09;&#xff1a;时序统计建模SLS机器学习介绍&#xff08;02&#xff09;&#xff1a;时序聚类建模SLS机器学习介绍&#xff08;03&#xff09;&#xff1a;时序异常检测建模SLS机器学习介绍&#xff08;04&#xff09;&a…

蚂蚁金服金融级容器引擎实践之路

小蚂蚁说&#xff1a; 在金融级分布式架构中使用容器&#xff0c;许多企业的开发者都面临许多挑战。在2018年ATEC蚂蚁金服技术探索大会上&#xff0c;蚂蚁金服高级技术专家盛延敏在演讲中分析了容器与云原生技术的本质&#xff0c;为容器在分布式架构上的使用带来了实用高效的…