我们知道可以将一个海量记录的 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 计算的瓶颈,因此无法代替传统的手工分表方式。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php设计分布图,MySQL分表实现上百万上千万记录分布存储的批量查询设计模式[图]_MySQL...相关推荐

  1. MySQL百万级/千万级数据存储解决方案

    MySQL 百万级/千万级数据存储解决方案 百万级.千万级数据处理,个人认为核心关键在于数据存储方案设计,存储方案设计的是否合理,直接影响到数据CRUD操作.总体设计可以考虑一下三个方面进行设计考虑: ...

  2. 17-1-数据处理思想和程序架构: 单片机stm32的flash保存数据优化方案(让擦写次数达到上百万至上千万次)

    资料源码:https://gitee.com/yang456/OpenProgrammingModuleForMCU.git 点击加入群聊[单片机,物联网,上位机]: 说明1:知识从未如此性感. 烂程 ...

  3. ShardingSphere简单分库分表实现(根据int分库,根据时间分表)

    1.背景 公司最近的项目开发中有一个数据库表,在给甲方部署试运行阶段发现有一个接口查询速度特别慢,然后经过排查发现,这个数据库表的的数据每天以6000-9000条的量激增,两个多月的时间已经60多万条 ...

  4. 京东一元抢宝业务分库分表实现策略

    1. 京东一元抢宝 以下分享的链接为我在京东参与的主要的业务系统: 有幸参与了这个项目的始终,一个从无到有的过程: 原文是我的leader写的. 2. 上一张设计图 3. 原文访问地址 http:// ...

  5. mysql交互式查询_客户机程序5―MYSQL交互式查询程序[图]_MySQL

    6.7 客户机程序5―交互式查询程序 让我们把迄今为止研究的诸多内容整理一下,编写一个简单的交互式客户机程序.它的功能包括可以进入查询,用通用目标查询处理程序process_query 执行查询,并用 ...

  6. mysql 分表后如何扩展_mysql扩展至分库分表

    MySQL互联网Oracle企业应用数据结构 . 数据库的复制能解决访问问题,并不能解决大规模的并发写入问题,要解决这个问题就要考虑mysql数据切分了 数据切分,顾名思义,就是数据分散,将一台主机上 ...

  7. mysql分库主键_分库主键设计-Mysql

    常见的两种方案,遍布网络: 第一种: replace方案,mysql解释:REPLACE的运行与INSERT很相像.只有一点除外,如果表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE ...

  8. Word自动续表实现方法 不分表不手动加表头 一劳永逸实现续表 论文必备

    Word自动续表实现方法 Author: fengclchn@outlook.com Date: 2023/05/22 原文: https://histonevon.top/archives/word ...

  9. MySQL中如何通过修改表实现约束的添加与删除

    修改表实现约束的添加与删除 一.主键约束 添加主键约束 Alter table 表名 add primary key(列名) 例 将 emp 表中的 employee_id 修改为主键且自动增长: ...

最新文章

  1. php求二维矩阵的最大子矩阵,最大子矩阵-动态规划
  2. 后台开发人员面试内容——Redis非关系数据库(三)
  3. mysql 查看root_Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
  4. ex is not shell_我使用过的Linux命令之exit - 退出当前shell
  5. 公众号的Markdown排版利器:Md2All
  6. java毕业设计——基于java+jsp+Tomcat的电子书下载系统设计与实现(毕业论文+程序源码)——电子书下载系统
  7. magisk卸载内置软件_手机发烧友必备之 Magisk
  8. 敏捷开发模式下的BA岗
  9. org.jboss.netty.util.internal.jzlib.ZStream scanned from multiple locations: jar:
  10. Bean with name ‘‘ has been injected into other beans [] in its raw version as part of a circular ref
  11. 将一个文字的大集合按照第一个文字的首字母进行切分
  12. 7-33 统计素数并求和(20 分)
  13. 制作一个浪漫的表白网页
  14. 数字电路的一些基本知识
  15. 百练:4084 拓扑排序
  16. 狠!删库跑路!一行代码蒸发10亿人民币!
  17. nginx强制www
  18. 用python将小册子打印扫描的A3幅面双页乱码的PDF文件转换A4幅面顺码的PDF文件
  19. 概率的意义-深度理解
  20. Ubuntu虚拟机使用NAT连接 然后无法上网的情况

热门文章

  1. 【quartus】原理图输入设计详解攻略
  2. I2C原理及应用实例
  3. Packet Tracer 思科模拟器之交换机配置快速生成树协议(RSTP)
  4. OpenCV文字绘制支持中文显示
  5. 一个前端在校生的2018年终总结
  6. 网站apache环境S2-057漏洞 利用POC 远程执行命令漏洞复现
  7. 一句话进行浏览器版本识别
  8. rimraf --A deep deletion module for node (like `rm -rf`)
  9. android 开发中的常见问题
  10. Archive引擎初探