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

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 本文以MySQL及Redis为例,介绍如何通过一条SQL轻松完成跨数据库实例的查询。

背景

随着业务复杂程度的提高、数据规模的增长,越来越多的公司选择对其在线业务数据库进行垂直或水平拆分,甚至选择不同的数据库类型以满足其业务需求。原本在同一数据库实例里就能实现的SQL查询,现在需要跨多个数据库实例才能完成。业务的数据被“散落”在各个地方,如何方便地对这些数据进行汇总关联查询,已经成为困扰用户的一大难题。
针对这类问题,传统的解决方案需要用户提前将所有实例的数据提前汇集到汇总库进行查询分析。这种方案不仅无法满足查询时效性,且用户还需要承担数据汇集的链路稳定性风险及数据冗余的经济成本。
为了解决跨数据库实例及时查询的难题,阿里云DMS(数据管理)推出了跨数据库实例查询服务

DMS跨数据库查询

image
跨实例查询服务支持通过标准SQL进行跨同异构数据库的实时查询。除了关系型数据库MySQL、SQLServer、PostgreSQL,还支持Redis。同时,跨实例查询服务还支持跨地域、跨云及线下IDC自建数据库及跨云厂商数据库实例间的数据实时查询,被广泛应用于多地域部署业务的全局数据查询场景。
本文以MySQL及Redis为例,介绍如何通过一条SQL轻松完成跨数据库实例的查询。

通过标准SQL查询Redis

跨实例查询服务支持通过SQL查询Redis中的任意key,同时支持跨key之间的join查询。在进行SQL查询前,您需要先在跨实例查询服务中,创建Redis实例的DBLink。接下来简单介绍创建DBLink及进行SQL查询的流程。

创建DBLink

在跨实例查询服务的控制台,创建DBLink,配置Redis实例的连接信息。
当完成DBLink创建后,需要使用这个DBLink编写查询SQL。

通过SQL查询Key

跨实例查询服务提供WEB SQL命令窗口,可以直接在命令窗口中,通过标准的SQL进行Key查询。具体支持的SQL命令可以参考使用文档。
对于每一个redis的database, DMS会自动创建6张表,分别如下:
all: 存储所有的key
string: 存储数据类型为string的可以
hash:存储数据类型为hash的key
list: 存储数据类型为list的key
set:存储数据类型为set的key
zset:存储数据类型为score set的key
每张表的表结构如下:

列名 类型 说明
Key Varchar Redis中的key名
Index Varchar 当数据类型为list/zset时,为各个元素的index;当数据类型为hash时,改字段为hash中的key名称
Value Varchar Key的value值
Score Double 表示SortedSet的分值,其他数据类型为null
Expire_time Bigint 跟redis的ttl命令一致,表示数据离过期的剩余秒数
Data_type Varchar 这个key的数据类型

此处,我们通过通过如下的select语句查询all表中的前5个key。
select * from redis_test.db0.all limit 5;
image

跨MySQL&Redis Join查询

日前接到某游戏客户跨MySQL及Redis查询的需求。该客户将用户积分排行榜存储在redis myzset中,而将用户元信息维护在MySQL user 表中。用户的某个简单诉求是:在游戏APP中能实时刷新用户的积分排行榜。

数据结构

通过redis score set存储用户积分情况,存储用户ID及score, key的名称为user_scrore, value为用户ID, score为用户积分。样例数据如下表:

key value score
user_score 100 10
user_score 200 35
user_score 300 45

通过MyQL User表存储用户的基本信息,包括user_id, user_name,province, city, gmt_create等,其中:
User_id 为用户ID, User_name 为用户名
Province 为用户所属省份, city 为用户所属市
Gmt_create 为用户第一次登陆游戏APP的时间
样例数据如下表:

User_id User_name province city Gmt_create
100 张三 浙江 杭州 2018-11-11 11:11:11
200 李四 广东省 深圳 2018-10-11 12:11:01

关联查询

通过如下SQL,可方便得查询用户的积分排行榜。
select user.user_name,zset.score from redis_test.db0.zset as zset join mysql.db0.user as user where
user.user_id=zset.value and zset.key='user_score' order by zset.score desc;
这个SQL将redis中的用户ID跟MySQL中的user_id进行关联,且只查询存储用户积分的key。

小结

由于篇幅有限,本文只是简单介绍了DMS 跨数据库查询的功能及其在Redis上的使用案例。您可以立即体验跨数据库实例查询>>
跨数据库查询的详细功能及使用场景可以参考:使用文档
教你用一条SQL搞定跨数据库查询:如何玩转跨库Join

相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
目录
相关文章
|
7天前
|
存储 监控 安全
数据库多实例的部署与配置方法
【10月更文挑战第23天】数据库多实例的部署和配置需要综合考虑多个因素,包括硬件资源、软件设置、性能优化、安全保障等。通过合理的部署和配置,可以充分发挥多实例的优势,提高数据库系统的运行效率和可靠性。在实际操作中,要不断总结经验,根据实际情况进行调整和优化,以适应不断变化的业务需求。
|
7天前
|
负载均衡 网络协议 数据库
选择适合自己的数据库多实例负载均衡技术
【10月更文挑战第23天】选择适合自己的数据库多实例负载均衡技术需要全面考虑多种因素。通过深入的分析和评估,结合自身的实际情况,能够做出明智的决策,为数据库系统的高效运行提供有力保障。
|
7天前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
9 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
4天前
|
SQL
SQL JOIN
【11月更文挑战第06天】
18 4
|
3天前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
9 2
|
5天前
|
存储 缓存 关系型数据库
怎么让数据库查询更快
【10月更文挑战第25天】通过以上综合的方法,可以有效地提高数据库查询的速度,提升应用程序的性能和响应速度。但在优化过程中,需要根据具体的数据库系统、应用场景和数据特点进行合理的调整和测试,以找到最适合的优化方案。
|
7天前
|
缓存 负载均衡 监控
数据库多实例的负载均衡技术深入
【10月更文挑战第23天】数据库多实例负载均衡技术是确保数据库系统高效运行的重要手段。通过合理选择负载均衡策略、实时监控实例状态、不断优化调整,能够实现资源的最优分配和系统性能的提升。在实际应用中,需要根据具体情况灵活运用各种负载均衡技术,并结合其他相关技术,以满足不断变化的业务需求。
|
6天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
12 2
|
6天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
100 1
|
6天前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
41 1