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

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

相关文章

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

房产证 不动产查询

陕西政务服务网(便民服务)陕西政务服务网(手机版?更直观)不动产权证书|不动产登记证明(电子证照)商品房合同备案查询权利人查询

UnrealScriptIDE调试环境部署

先安装vs2010   再安装VSIsoShell.exe, 下载地址 https://pan.baidu.com/s/10kPNUuDGTbWXbz7Nos-1WA       fd3t   最后安装unside,下载地址 https://archive.codeplex.com/?p=uside  安装中间有一步选择Binary文件夹要选对路径。   安装好以后,启动 UDKDe

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

Eureka高可用注册中心registered-replicas没有分布式注册中心

自己在学习过程中发现,如果Eureka挂掉了,其他的Client就跑不起来了,那既然是商业项目,还是要处理好这个问题,所以决定用《Spring Cloud微服务实战》(PDF版在全栈技术交流群中自行获取)中说的“高可用注册中心”。 一开始我yml的配置是这样的 server:port: 8761eureka:instance:hostname: 127.0.0.1client:fetch-r

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求:通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求:通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服务地址: https://developer.amap.com/api/webservice/gui

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

API-环境对象

学习目标: 掌握环境对象 学习内容: 环境对象作用 环境对象: 指的是函数内部特殊的变量this,它代表着当前函数运行时所处的环境。 作用: 弄清楚this的指向,可以让我们代码更简洁。 函数的调用方式不同,this指代的对象也不同。【谁调用,this就是谁】是判断this指向的粗略规则。直接调用函数,其实相当于是window.函数,所以this指代window。

数据时代的数字企业

1.写在前面 讨论数据治理在数字企业中的影响和必要性,并介绍数据治理的核心内容和实践方法。作者强调了数据质量、数据安全、数据隐私和数据合规等方面是数据治理的核心内容,并介绍了具体的实践措施和案例分析。企业需要重视这些方面以实现数字化转型和业务增长。 数字化转型行业小伙伴可以加入我的星球,初衷成为各位数字化转型参考库,星球内容每周更新 个人工作经验资料全部放在这里,包含数据治理、数据要

如何在Java中处理JSON数据?

如何在Java中处理JSON数据? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Java中如何处理JSON数据。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,在现代应用程序中被广泛使用。Java通过多种库和API提供了处理JSON的能力,我们将深入了解其用法和最佳