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

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

相关文章

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe