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

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

单库时,系统中很多列表和详情页所需数据可以简单通过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), -- 商品IDname 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), -- 订单IDbuyer_id BIGINT(30), -- 买家IDcreate_time TIMESTAMP , -- 订单生成时间seller_id BIGINT(30), -- 卖家IDcommodity_id BIGINT(30), -- 商品IDstatus 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 commonditywhere order.commodity_id= commondity.idGROUP 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实现跨实例的交叉查询。

打开APP精彩内容

点击阅读全文

跨实例查询 mysql_SQL语句怎么搞定跨实例查询?相关推荐

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

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

  2. 物流查询 单号杂乱有符号无法查询 这样操作一键搞定

    在查询物流信息的过程中发现该批单号中掺杂这特殊符号无法进行快递查询,该如何将这些符号一键替换呢?小编分享一个小技巧一键搞定,感兴趣的朋友快来看看吧! 第一步,运行软件[快递批量查询高手]在主页中的任意 ...

  3. mysql 查询超过60分钟的_mysql基础级《简单查询》60分钟搞定

    初学者,推荐大家使用----emp(雇员信息表)和dept(部门表),这两张表的字段及数据内容都设计的比较经典.来吧!先跟着我的操作,导入我提供的数据库脚本. 导入两张表sql脚本到数据库create ...

  4. iframe 跨域_【梯云纵】搞定前端跨域

    韦陀掌法,难陀时间善恶:梯云纵,难纵过乱世纷扰. 现在开始写代码o(╯□╰)o 什么是跨域 1.跨域的定义 广义的跨域是指一个域下对的文档或者脚本试图去请求另外一个域下的资源. a链接.重定向.表单提 ...

  5. oracle级联查询 level,ORACLE 数据库的级联查询 一句sql搞定(部门多级)

    select t.destination from airline t start with origin='CAN' connect by prior destination = origin; 查 ...

  6. 几行代码轻松搞定跨系统传递 traceId

    同样是新项目开发的笔记,因为使用的是分布式架构,涉及到各个系统之间的交互 这时候就会遇到一个很常见的问题: 单个系统是集群部署,日志分布在多台服务器上: 多个系统的日志在多台机器,但是一次请求,查日志 ...

  7. mysql多条件查询_使用dsum轻松搞定多条件查询,学会它,再也想用sumifs了

    在excel中条件求和想必大家都不陌生,这个可以说是我们工作中经常遇到的问题,常见的条件求和函数有sumif以及sumifs,但是还有一个更加强但知道的人却非常少的函数,他就是dsum函数,dsum相 ...

  8. 使用通用mapper实现条件查询_使用dsum轻松搞定多条件查询,学会它,再也想用sumifs了...

    在excel中条件求和想必大家都不陌生,这个可以说是我们工作中经常遇到的问题,常见的条件求和函数有sumif以及sumifs,但是还有一个更加强但知道的人却非常少的函数,他就是dsum函数,dsum相 ...

  9. Mybatis-Plus用纯注解搞定一对多查询

    业务中很常见的 用户-角色 就属于典型的一对多关系. 假设我们需要将用户信息(包括了用户对应的角色信息)查询出来 数据表结构 user表和role表的关系为多对多,即一个user可以分配多个role, ...

  10. 一步搞定IP地址查询:这个在线工具帮你快速掌握设备的位置信息!

    前言   今天分享一个免费的在线工具来查询IP地址所在的地理位置.可以通过IP地址所属的网络运营商和其他相关信息来确定设备的位置,包括国家.地区.城市和经纬度等信息. Ip-API 官网地址: htt ...

最新文章

  1. 【iOS XMPP】使用XMPPFramewok(五):好友列表
  2. git-SSH连接配置
  3. 【引用】将整数转化为十进制字符串的函数Convert integer to Decimal string
  4. Apache Flink 不止于计算,数仓架构或兴起新一轮变革
  5. java模板和回调机制学习总结
  6. 游戏代练平台源码打包+搭建教程
  7. 保姆级Ruby on rails安装教程
  8. Windows下载最新谷歌浏览器
  9. python使用numpy按一定格式读取bin文件
  10. 离线强化学习(Offline RL)系列2: (环境篇)D4RL数据集简介、安装及错误解决
  11. Java元数据区的概念_JVM的元数据区
  12. 文昌京东配送小哥的那些骄傲事
  13. 无法启动系统时间服务器,Win10系统不能启动Windows Time服务怎么办?
  14. CXF 处理yyyy-MM-dd HH:mm:ss日期失败
  15. 逻辑备份和物理备份表级恢复
  16. 计算机硬件系统一直延用,会计电算化辅导:计算机硬件系统
  17. 你为什么推荐java核心技术_读《java核心技术卷一》有感
  18. python实验大纲_Python程序设计实验-教学大纲-段震
  19. Django进阶教程
  20. Python004~005

热门文章

  1. AllenNLP入门笔记(一)
  2. php 批量采集 邮箱,万能全网邮箱批量采集工具按照关键字搜索邮箱教程
  3. 八大排序算法(5)——快速排序
  4. LCD1602A模块的应用
  5. 数据库原理课程设计---停车场管理系统
  6. 不正确的c语言字符常量是,哪个是不正确的字符常量?
  7. NMAP 端口扫描工具下载 + 安装
  8. 南京邮电大学MOOC高级程序语言设计(C++)第六章编程题答案
  9. 公众号常用的排版软件有哪些?
  10. 谷歌输入法/谷歌拼音输入法/WIN7好用的输入法