背景

随着业务复杂程度的提高、数据规模的增长,越来越多的公司选择对其在线业务数据库进行垂直或水平拆分,甚至选择不同的数据库类型以满足其业务需求。原本在同一数据库实例里就能实现的SQL查询,现在需要跨多个数据库实例才能完成。业务的数据被“散落”在各个地方,如何方便地对这些数据进行汇总关联查询,已经成为困扰用户的一大难题。

针对这类问题,传统的解决方案需要用户提前将所有实例的数据提前汇集到同一处,然后再做离线查询分析。为此,用户需要维护数据迁移链路,购买机器资源存储汇集起来的数据,付出大量的资源和运维成本。不仅如此,数据迁移也意味着数据延迟,刚刚产生的在线业务数据,需要“等一会”甚至“等一天”才能去做分析,无法满足实时性需求。

为了解决跨数据库实例及时查询的难题,阿里云DMS(数据管理)推出了跨实例查询服务。

什么是跨实例查询服务

跨实例查询服务为不同环境下的在线异构数据源,提供及时的关联查询服务。不论数据库是MySQL、SQLServer、PostgreSQL还是Redis,不论数据库实例部署在哪个阿里云region,无需数据汇集,仅通过一条SQL就能实现这些数据库实例之间的关联查询。

不仅如此,数据库实例也可以部署在不同的资源环境中,除了RDS之外,我们也支持ECS上的自建数据库、具有公网ip的自建数据库、用户本地IDC自建数据库、甚至是部署在其他云厂商的数据库。

功能特性

在线数据及时查询

目前大多数数据分析的解决方案需要将 OLTP 数据库的数据导出至离线数据系统再进行分析,但这种方案很难满足实时性的要求,同时在数据导出至离线系统时也存在数据丢失的风险。

DMS的跨实例查询服务,无需用户迁移任务,直接编写一条SQL,就能实现多个在线数据库的直接关联分析。由于无需数据同步,降低了业务架构的复杂性,同时也大大节省用户持有离线计算资源的预算和运维成本。

DBLink

熟悉Oracle的人应该知道,我们可以在当前登录的Oracle上,建立一个DBLink指向另一个远程的Oracle数据库表。在跨实例查询服务中,我们重新定义了DBLink的概念,它是一个指向用户的任意数据库实例的虚拟连接,是数据库实例的别名。例如,对于MySQL来说,DBLink和ip/port一一对应。借助DBLink,即可实现对任意数据源的SQL访问。

支持多种关系型数据库

目前已支持MySQL、SQLServer、PostgreSQL等多种关系型数据库。

支持SQL方式访问NoSQL

除了关系型数据库之外,跨实例查询还支持以SQL方式访问Redis等NoSQL数据库。由于支持了SQL语法,也可以实现RDBMS和NoSQL之间关联查询。是的,你没看错,一条SQL就能实现MySQL和Redis之间的关联查询。

支持跨地域以及混合云查询

企业发展到一定阶段,用户量、业务量不断攀升,原来的单机房容量已经不能满足业务发展的需求,再结合容灾、高可用等因素,通常会选择跨region部署,也叫单元化部署。同时,不少企业也需要将业务拓展到海外,通过本地就近部署,为国外用户提供更好的体验。类似这种水平拆分带来的问题就是,如何对全局的业务数据进行统一的汇总关联查询。

借助DMS跨实例查询服务,无论您的数据库实例部署在阿里云的哪个region,无需跨region的数据迁移,即可实现所有region数据的统一查询。

除了阿里云RDS,我们也支持用户部署在阿里云ECS上的各种数据库。不仅如此,如果您的数据库部署在本地IDC机房,甚至其他云厂商,都可以通过跨实例查询服务,实现这些混合云场景的跨实例关联查询。

跨实例数据导入导出

insert into b select * from a;
众所周知,这条SQL语句可以将表a的数据导出到表b中,但如果a表和b表不在同一个数据库实例上,那这条sql就无能为力了。

跨实例查询服务的出现,打破了实例与实例之间数据导入导出的边界。它可以将数据从一个MySQL实例的表导出到另外一个MySQL实例的表中;也可以将SQLServer表和PostgreSQL表关联查询的结果,导出到MySQL实例的表中,就是这么灵活。

兼容标准SQL

通过标准的SQL语句,即可实现跨实例查询。同时跨实例查询服务高度兼容MySQL,支持MySQL协议,以及各种常用函数和语法。您可通过JDBC/ODBC驱动连接到跨实例查询服务;也可以使用各种MySQL GUI工具来管理各种数据源;当然,您也可以在DMS跨实例查询控制台上直接使用。

Serverless架构

跨实例查询是无服务器化的在线数据库关联查询服务。用户无需预购计算资源、无需维护资源、没有运维和升级成本,随时随地使用。

高性能低延迟

跨实例查询服务底层基于强大的MPP计算引擎,持续不断地对SQL查询进行优化,包括pushdown、join算法、执行计划缓存、Meta缓存、本地调度、连接池等技术。目前单表查询以及跨实例的多表关联查询,都能在毫秒级完成。

技术架构

用户可以在应用程序中,直接使用MySQL JDBC驱动连接跨实例查询服务,进行跨实例查询。当然,我们也提供了控制台页面,直接输入SQL即可执行。

应用场景

垂直拆分后的跨数据库查询

某电商公司原先将会员、订单、商品等数据都存放在一个数据库实例中,但业务发展迅猛,访问量极速增长,导致数据库容量及性能遭遇瓶颈,因此用户决定对架构进行垂直拆分,将会员、商品、订单数据垂直拆分至三个数据库实例中。此时业务上需要展示某个品类商品的售卖订单量,原本在同一数据库里的查询,要变成跨两个数据库实例的查询。业务上要怎么进行关联查询?

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

我们发现用户遇到的其实就是典型的跨实例查询问题。目前,

阿里云DMS跨实例查询服务

已经支持跨多个数据库实例的SQL查询的能力,用户利用一条SQL即可解决上述难题。不仅能够满足“跨库Join”这一核心诉求,还能极大地简化用户的技术方案。

水平拆分后的跨数据库查询

某酒店在多个城市都有对应的门店,其数据库在每个城市也会单独部署一套,业务上有对多个城市全局数据查询的诉求。同样,现在越来越多的互联网行业开始引入单元化架构,在每个城市会单独部署机房和数据库,进行多单元数据汇总查询的需求也越来越强。

为了满足云上这些跨单元、跨region的数据库查询需求,跨实例查询服务打通region之间的屏障,用户通过一条SQL就能实现这些需求。

异构数据库的关联查询

某公司考虑成本和未来可扩展性,正在将业务数据从SQLServer迁移到MySQL上。在这期间,必然存在某些业务子系统仍然在SQLServer上,另外一些业务子系统已经全部迁移到MySQL上,这时两个子系统之间的联合查询,就可以借助阿里云的跨实例查询服务实现。不仅如此,在迁移过程中,还可以通过跨实例查询服务,来校验SQLServer和MySQL上的数据是否一致。

混合云场景的关联查询

某游戏公司,由于各种原因,同时保有阿里云、腾讯、UCloud、AWS等环境的数据库实例,同时在自己自建的IDC也部署了部分数据库。业务的数据如此分散,单是统计一下当前游戏在线用户数,都要分别到各个环境去查询一遍再做汇总。

借助阿里云跨实例查询服务,一条SQL就能实现跨云厂商和IDC之间的关联查询

小结

阿里云DMS(数据管理)跨实例查询服务,不仅覆盖了异构数据源关联查询的场景,还解决了跨region、跨云的数据库关联查询的难题。不仅如此,我们对查询性能进行了大幅优化,使得大部分查询能在毫秒级完成。

用户无需通过数据汇集,即可通过标准的SQL实现跨实例的交叉查询

转载于:https://juejin.im/post/5c3c319551882524ed5ba45e

如何玩转跨库Join?跨数据库实例查询应用实践相关推荐

  1. 实现数据库的跨库join联表查询

    功能需求 首先要理解原始需求是什么,为什么要跨库join.举个简单的例子,在日志数据库log_db有一份充值记录表pay_log,里面的用户信息只有一个userid:而用户的详细信息放在主库main_ ...

  2. java跨库join方案_集算器协助java处理多样性数据源之跨库关联

    Java的数据计算类库RowSet提供了JoinRowSet和FilteredRowSet类,可以进行跨库的关联计算,但是有很多局限.首先,JoinRowSet只支持inner join,不支持out ...

  3. DataBaby | 跨服务器异构数据库查询结果整合实验 跨库Table合并 全自助查询、对账系统探路之行

    ​数据查询运营过程中不可避免的"肮脏活",没完没了,还很平凡,很容易让我抓狂,失去工作的热情.当我们使用自助化查询工具来解决问题,实现自助查询的过程中,会遇到不同的挑战,使用htt ...

  4. 一条SQL完成跨数据库实例Join查询

    2019独角兽企业重金招聘Python工程师标准>>> 背景 随着业务复杂程度的提高.数据规模的增长,越来越多的公司选择对其在线业务数据库进行垂直或水平拆分,甚至选择不同的数据库类型 ...

  5. sql重复数据只保留一条_一条SQL完成跨数据库实例Join查询

    背景 随着业务复杂程度的提高.数据规模的增长,越来越多的公司选择对其在线业务数据库进行垂直或水平拆分,甚至选择不同的数据库类型以满足其业务需求.原本在同一数据库实例里就能实现的SQL查询,现在需要跨多 ...

  6. 微服务改造中解决跨库问题的思路

    今年一直在和团队做微服务的架构改造(相关的一些详情,有兴趣的朋友,可以参见之前的这篇分享).但是做过改造的朋友都知道 从"All-In-One" 到 "Micro-Ser ...

  7. mycat 跨库间连表查询解决方案

    文章目录 一.应对场景 二.解决方案 三.效果 四.实现 1. 过程概述 2. 建库.建表.插数据.创建视图 3. 配置 mycat 的 schema.xml 4. 测试 navicat直接测试 ja ...

  8. mysql跨实际视图_MySQL 跨库关联查询 (创建视图)

    MySQL 跨库关联查询 (创建视图) 一, 前言 SQL CREATE VIEW 语句 什么是视图? 在 SQL 中, 视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列, 就像一个真实 ...

  9. (13)web安全|渗透测试|网络安全 注入/跨库查询/文件读写/常见的防护原理 详细图解

    目录 高权限注入及低权限注入 跨库查询: 文件读写操作 流程: 找路径: 方法一: 方法二: 方法三: 方法四: 方法五: 方法六: 方法七: 知道路径后,再执行文件的读写操作 文件的写入: 可能遇到 ...

最新文章

  1. 【Interfacenavigation】选择时间/日期组件(34)
  2. Ubuntu15.0.4下Torch安装教程
  3. winCE下Unicode编码
  4. mysql php状态函数_mysql常用的信息函数
  5. 聚类算法实践——PCCA、SOM、Affinity Propagation
  6. 【FLEX教程】#007 如何让JS调用SWF里的方法
  7. 国内银行CNAPS CODE 查询
  8. 基于ECharts和腾讯疫情数据接口的全球疫情地图(超全)
  9. 十二生肖的相合、相冲、相刑、相害
  10. 水晶易表(Xcelsius) 2008 学习
  11. 白小小的可爱伤感空间日志发布:有些人,注定只是过客
  12. kangle安装php7.0_Kangle Easypanel面板 PHP多版本切换 安装图文教程
  13. 【YOLO】目标检测第三步——用Pascal voc 2012 数据集训练YOLO网络
  14. 《东周列国志》第六十四回 曲沃城栾盈灭族 且于门杞梁死战
  15. Rap2接口管理工具搭建及版本升级
  16. 中国人民大学计算机拟录取,2016年中国人民大学信息学院硕士研究生拟录取名单...
  17. 自定义/修改微信二维码样式
  18. bw_mem 内存_TCP:内存不足—考虑调整tcp_mem
  19. 【Xshell】设置默认登录用户
  20. 2.5 信道的极限容量

热门文章

  1. MongoDB之python简单交互(三)
  2. Apache OFBIZ高速上手(二)--MVC框架
  3. 【洛谷P1381】单词背诵
  4. 【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞
  5. HNUOJ 13341
  6. Lucene查询语法详解
  7. 返回一个二维整数数组中最大联通子数组的和
  8. linux cron读哪个文件,linux crontab 文件位置和日志位置
  9. 【计算机网络】HTTP 与 HTTPS ( HTTPS 简介 | HTTP 通信过程 )
  10. 【错误记录】Flutter / Android 报错 ( AAPT: error: attribute android:requestLegacyExternalStorage not found )