分布式环境中的多机分库分表的数据查询

2024-06-05 18:08

本文主要是介绍分布式环境中的多机分库分表的数据查询,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

跨库连接查询join

如果需要join的数据存在于多个库中,那就比较麻烦,解决的思路有如下几种:

  • 在应用层把原来数据库的Join操作分成多次的数据库操作。在应用层层面上去对数据库进行操作
  • 数据冗余,也就是对一些常用的数据进行冗余,这样可以把原来需要Join的数据变为单表查询。这需要结合具体的业务场景
  • 借助外部系统解决一些跨库问题

外键约束

外键约束的问题比较难解决,不能完全依赖数据库本身来完成之前的功能了。如果要对分库后的单库做外键约束,就要求分库后的每个单库的数据是内聚的。否则就要靠应用层的判断,容错等方式了。

跨库查询的问题及解决

数据库分库分表的演化

这里写图片描述
从逻辑上来说,用户信息应该放在一起存储,然而随着数据量,访问量的增加,需要经历分库分表,此时用户信息在物理上是分布在多个数据库的多张表的。也就是如上图所示的一张逻辑上的表对应了多张物理上的表,对这张表的查询就要做跨库跨表的合并了。这个场景和上面讲的跨库Join还不同,跨库join是在不同的逻辑表之间的Join,在分库后这些Join可能需要跨越多个数据库,而我们现在看到的是针对一个逻辑表的查询操作,但因为物理上分到了多个库多个表,因而产生了数据的合并查询

从具体例子看分库分表后查询的问题。

例子:
当我们假设我们将用户信息按照省份来划分时,如果我们去查询多个省的用户信息,那么就需要跨库查询了。在这样的情况下就需要对查询结果在应用上进行合并,这相对比较简单,但是在一些场景下需要进行较为复杂的操作,介绍如下:

  • 排序,即多个来源的数据查询出来后,在应用层进行排序的工作,如果从数据库中查询出来的数据已经是排好序的,那么在应用层就是要对多路数据的归并排序,如果查询出来的数据未排序。就要进行一个全排序。
  • 函数处理,即使用Max,Min,Sum,Count等对多个数据来源的值进行相应的函数处理
  • 求平均值,从多个数据源进行查询时,需要把SQL改为查询Sum和Count,然后对多个数据来源的Sum进行求和,Count求和之后计算平均值。
  • 非排序分页,分为同步等长分页,还是同等比例分页。
  • 排序后分页。这是比较复杂的情况,因为每一个数据源中排序后的大小不能预估,所以我们需要在取数据的时候进行多次比较,性能会收到很大影响。因此,在访问量很大的系统中,我们应该尽量避免这种方式。

参考 大型网站系统与Java中间件实践

这篇关于分布式环境中的多机分库分表的数据查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1033790

相关文章

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

MYSQL查询结果实现发送给客户端

《MYSQL查询结果实现发送给客户端》:本文主要介绍MYSQL查询结果实现发送给客户端方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql取数据和发数据的流程(边读边发)Sending to clientSending DataLRU(Least Rec

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)

《MySQL复杂SQL之多表联查/子查询详细介绍(最新整理)》掌握多表联查(INNERJOIN,LEFTJOIN,RIGHTJOIN,FULLJOIN)和子查询(标量、列、行、表子查询、相关/非相关、... 目录第一部分:多表联查 (JOIN Operations)1. 连接的类型 (JOIN Types)

python编写朋克风格的天气查询程序

《python编写朋克风格的天气查询程序》这篇文章主要为大家详细介绍了一个基于Python的桌面应用程序,使用了tkinter库来创建图形用户界面并通过requests库调用Open-MeteoAPI... 目录工具介绍工具使用说明python脚本内容如何运行脚本工具介绍这个天气查询工具是一个基于 Pyt