MySQL分表实现上百万上千万记录分布存储的批量查询设计模式

news2024/10/6 23:40:00

我们知道可以将一个海量记录的 MySQL 大表根据主键、时间字段,条件字段等分成若干个表甚至保存在若干服务器中。
唯一的问题就是跨服务器批量查询麻烦,只能通过应用程序来解决。谈谈在Java中的解决思路。其他语言原理类似。

这里说的分表不是 MySQL 5.1 partition,而是人为把一个表分开存在若干表或不同的服务器。



1. 应用程序级别实现



见示意图

SelectThreadManager 分表数据查询管理器
它为分表的每个database or server 建立一个 thread pool

addTask() -
添加任务
stopTask() - 停止任务
getResult() - 获取执行结果

最快的执行时间 = 最慢的 MySQL 节点查询消耗时间
最慢的执行时间 = 超时时间

某个 ThreadPool 忙时候处理流程
1. 假如 ThreadPoolN 非常忙,(也意味 DB N 非常忙)
2. 新的查询任务到来,addTask(), 新的任务的一个thread加到ThreadPoolN任务排队中
3. 外层应用已经获得其他 thread 返回结果,继续等待
4. 外层应用等待超时的时间到,调用 stopTask() 设置该任务全部 thread 中的停止标志, 外层应用返回。
5. 若干时间后,ThreadPoolN取到该排队 Thread, 因为设置了停止位,线程直接运行完成。
 


2. JDBC 层实现
 

做一个 JDBC Driver 的包装,拦截 PreparedStatement, Statement executeQuery()
然后调用 SelectThreadManager 完成

3. MySQL partition


MySQL 5.1 partition 功能由于单张表的数据跨文件,批量查询时候同样存在上述问题,不过它是在 MySQL 内部实现的,不需要外部调用者关心。其查询实现的原理应该大致类似。
partition 只解决了 IO 的瓶颈,并不能解决 CPU 计算的瓶颈,因此无法代替传统的手工分表方式。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/870989.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32入门学习之定时器PWM输出

1.脉冲宽度调制PWM(Pulse Width Modulation)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。PWM可以理解为高低电平的占空比,即输出高电平时间与低电平时间的比值。PWM的应用是否广泛,比如在步进电机的控制中,可以通过P…

WebRTC本地视频通话使用ossrs服务搭建

iOS开发-ossrs服务WebRTC本地视频通话服务搭建 之前开发中使用到了ossrs,这里记录一下ossrs支持的WebRTC本地服务搭建。 一、ossrs是什么? ossrs是什么呢? SRS(Simple Realtime Server)是一个简单高效的实时视频服务器,支持RTM…

【佳佳怪文献分享】通过引导学会行走: 动态环境中的感知四足运动

标题:Learning to Walk by Steering: Perceptive Quadrupedal Locomotion in Dynamic Environments 作者:Mingyo Seo , Ryan Gupta , Yifeng Zhu , Alexy Skoutnev , Luis Sentis , and Yuke Zhu 来源:2023 IEEE International Conference …

Titanic--细节记录二

merge、join以及concat的方法的不同以及相同 相同之处:都用于合并数据。 不同之处: merge主要是基于列的合并。join主要是基于索引(行标签)的合并。concat可以沿任意轴合并,更灵活。 import pandas as pddf1 pd.Da…

Linux 查看内存使用情况的几种方法

在运行 Linux 系统的过程中为了让电脑或者服务器以最佳水平运行,常常需要监控内存统计信息。 那么今天我们就来看看有哪些方法可以访问所有相关信息并帮助管理员监控内存统计信息。 查看或者获取 Linux 中的内存使用情况既可以通过命令的方式,也可以通…

OptaPlanner笔记6 N皇后

N 个皇后 问题描述 将n个皇后放在n大小的棋盘上,没有两个皇后可以互相攻击。 最常见的 n 个皇后谜题是八个皇后谜题,n 8: 约束: 使用 n 列和 n 行的棋盘。在棋盘上放置n个皇后。没有两个女王可以互相攻击。女王可以攻击同一水…

Python语言基础---选择判断循环结构详解

文章目录 🍀引言🍀if语句🍀if-else语句🍀if-elif-else语句🍀for循环🍀while循环 🍀引言 在Python编程语言中,选择判断和循环是两个非常重要的概念。它们可以让我们根据条件执行不同的…

分布式应用:Zabbix监控Tomcat

目录 一、理论 1.Zabbix监控Tomcat 二、实验 1.Zabbix监控Tomcat 三、问题 1.获取软件包失败 2.tomcat 配置 JMX remote monitor不生效 3.Zabbix客户端日志报错 一、理论 1.Zabbix监控Tomcat (1)环境 zabbix服务端:192.168.204.214 …

模型性能的主要指标

主要参数 ROC 曲线和混淆矩阵都是用来评估分类模型性能的工具 ROC曲线(Receiver Operating Characteristic curve): ROC曲线描述了当阈值变化时,真正类率(True Positive Rate, TPR)和假正类率&#xff0…

SAP 收藏夹Favorites介绍,收藏夹导入/导出功能

作为SAP用户,经常需要使用一些事务代码T-Code, 很多时候会因为不常用其中的一些遗忘这个功能,所以这时候分类收藏好不同Module的事务代码到收藏夹里是一个不错的选择。 经常面临的一个场景就是需要变换系统环境,比如从Client A01,去到Client…

springcloud 基础

SprinbCloud微服务简介 架构发展历史 SpringBoot由baiPivotal团队在2013年开始研发、2014年4月发布第一个du版本的全新开源的轻量级框架。 它基zhi于Spring4.0设计,不dao仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用…

QIIME 2教程. 11元数据Metadata(2023.5)

QIIME 2用户文档. 11元数据 Metadata in QIIME 2 https://docs.qiime2.org/2023.5/tutorials/metadata/ 注:此实例需要一些基础知识,要求完成本系列文章前两篇内容:《1简介和安装Introduction&Install》和4《人体各部位微生物组分析Movin…

【硬件突击 电路】

文章目录 1. 电阻(Resistor):2. 电容(Capacitor):3. 电感:4、 RC、RL、RLC电路结构及工作原理基尔霍夫定律基尔霍夫电流定律(KCL)基尔霍夫电压定律(KVL&#…

【舌尖优省PLUS】美团、饿了么外卖免费领红包,尽情享受美食与省钱!

家人们!我昨天刚开发完并上线了一个超棒的外卖免费领红包的小程序,它叫做【舌尖优省PLUS】!如果你喜欢美食,还想省下一些钱,那这个小程序绝对不能错过! 在【舌尖优省PLUS】上,你可以通过简单的…

react 生命周期方法

组件的生命周期 每个组件都包含 “生命周期方法”,你可以重写这些方法,以便于在运行过程中特定的阶段执行这些方法。你可以使用此生命周期图谱作为速查表。在下述列表中,常用的生命周期方法会被加粗。其余生命周期函数的使用则相对罕见。 挂…

第4章:决策树

停止 当前分支样本均为同一类时,变成该类的叶子节点。当前分支类型不同,但是已经没有可以用来分裂的属性时,变成类别样本更多的那个类别的叶子节点。当前分支为空时,变成父节点类别最多的类的叶子节点。 ID3 C4.5 Cart 过拟合 缺…

springcloud3 sleuth实现链路状态监控

一 slueth的介绍 1.1 slueth的作用 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个阶段请求都会形成一条复杂的分布式调用链路,链路中任何一环出现高延时或者错误都会引起…

通讯协议038——全网独有的OPC HDA知识一之聚合(七)最小值

本文简单介绍OPC HDA规范的基本概念,更多通信资源请登录网信智汇(wangxinzhihui.com)。 本节旨在详细说明HDA聚合的要求和性能。其目的是使HDA聚合标准化,以便HDA客户端能够可靠地预测聚合计算的结果并理解其含义。如果用户需要聚合中的自定义功能&…

MySQL环境安装

文章目录 MySQL环境安装1. 卸载1.1 卸载不要的环境1.2 检查卸载系统安装包 2. 安装2.1 获取mysql官方yum源2.2 安装mysql的yum源2.3 安装mysql服务 3. 登录(1)(2)(3) 4. 配置my.cnf MySQL环境安装 说明: 安装与卸载中,用户全部切换成为root&#xff0c…

基于YOLOv8+PyQt5开发的行人过马路危险行为检测告警系统(附数据集和源码下载)

系列文章目录 文章目录 系列文章目录前言欢迎来到我的博客!我很高兴能与大家分享关于基于YOLOv8的行人过马路危险行为检测告警系统的内容。 一、系统特点1. 采用最新最优秀的目标检测算法YOLOv82. 系统分别基于PyQt5开发了两种GUI图形界面,供大家学习使用…