`

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

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

相关推荐

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

    本文将深入探讨如何使用MySQL分表实现大规模数据的分布存储和批量查询设计模式。 首先,我们需要理解分表的概念。不同于MySQL 5.1引入的分区(Partitioning)功能,这里所说的分表是手动将一个大表根据特定字段(如...

    同步MySQL binlog 将分库分表合并到另外一个库表中-py_sync_binlog.zip

    本项目“py_sync_binlog”旨在利用Python实现一个工具,将分布在多个数据库和表中的数据同步到一个新的单一数据库或表中,这在数据整合、迁移或分析时非常有用。 在MySQL中,binlog记录了所有改变数据库状态的非...

    mysql优化步骤方法

    7. **分区与分表**:对于大数据量的表,可以考虑使用分区或分表策略,将数据分散到多个物理存储上,提高查询效率。 8. **缓存机制**:利用Memcached或Redis等缓存服务,将频繁访问的数据缓存起来,减少对数据库的...

    mysql运维基础知识面试问答题.pdf

    优化可以从系统、硬件、数据库配置、查询优化、架构优化等多方面进行,设计高可用架构、读写分离、分库分表等策略。 企业生产的大型mysql集群架构备份方案: 备份方案应全面考虑数据安全、备份速度、备份频率等因素...

    MySql规范(系列一)

    2. **控制单表数据量**:单表的数据量应该控制在千万级别以内,超过这个规模可能会影响查询性能和维护成本。可以通过分表等方式来降低单表的数据量。 3. **平衡范式与冗余**:虽然遵循数据库规范化原则有助于减少...

    mysql面试题经典14题

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web应用程序中广泛应用。面试中,MySQL的知识点通常涵盖查询优化、事务处理、存储引擎、索引、触发器、视图、权限管理等多个方面。以下是对14道经典MySQL...

    在被甲骨文公司收购后,现在属于甲骨文公司(Oracle) 旗下产品 Oracle 大幅调涨MySQL商业版的售价,因此导致自由软

    MySQL是世界上最受欢迎的开源数据库系统之一,特别是在互联网应用中。然而,在甲骨文公司(Oracle)收购MySQL之后,这个开源数据库的未来和发展方向引起了广泛关注。甲骨文对MySQL商业版的售价进行了大幅上调,这...

    行业-109 案例实战:千万级用户场景下的运营系统SQL调优(1).rar

    或者是利用数据库分区,根据特定字段将数据分布在不同的物理存储上。 4. **缓存策略**:在高并发场景下,使用缓存可以有效缓解数据库压力。例如,使用Redis等内存数据库缓存热点数据,或者设置数据库级别的缓存,如...

    数据库课程设计餐饮下单管理系统

    - **数据库实施**:在数据库管理系统(如MySQL、Oracle等)中创建数据库,导入逻辑设计后的表结构和存储过程。 - **系统开发**:利用编程语言(如Java、Python)实现前端界面和后端接口,与数据库进行交互。 - **...

    Java思维导图xmind文件+导出图片

    Redis批量查询优化 Redis高性能集群之Twemproxy of Redis 数据存储 MongoDB NOSQL简介及MongoDB支持的数据类型分析 MongoDB可视化客户端及JavaApi实践 手写基于MongoDB的ORM框架 MongoDB企业级集解决方案 ...

    数据库面试基础知识.docx

    23. **MySQL,B+索引实现,行锁实现,SQL 优化** - **B+索引实现**:基于 B+树的数据结构实现。 - **行锁实现**:InnoDB 引擎通过记录锁、间隙锁等机制实现。 - **SQL 优化**:避免 SELECT *,使用 EXPLAIN 分析...

    hrsystem

    这可能涉及到索引的创建、查询优化、存储引擎的选择,以及适当的分区和分表策略。 3. **安全性**:SQL注入是数据库系统常见的安全威胁。开发人员需要遵循最佳实践,如预编译SQL语句、限制权限、使用参数化查询等,...

    Java技术专家笔试题.pdf

    - 使用分库分表策略将数据分布到多个数据库或表中,以提高查询性能和可扩展性。 - 可以考虑使用中间件如ShardingSphere进行分库分表的实施。 2. **索引与查询优化:** - 为了达到100ms左右的查询速度,需要在IP...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    设计模式 结构模式 适配器模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 创建模式 抽象工厂模式 工厂方法模式 建造这模式 原型模式 单例模式 行为模式 责任链模式 命令模式 解释...

    HBase权威指南

    HBase支持范围查询,适合于行事务处理,并且实现了自动分片(Auto-sharding),可以动态地增加或减少Region的数量,以应对数据量的变化和分布不均的问题。 在数据模型方面,HBase采用的是列式存储模型,可以处理...

    如何进行mysql的优化

    MySQL优化是提升数据库性能的关键步骤,它涉及到多个层面,包括SQL查询优化、数据库设计优化、索引策略、存储引擎选择以及资源管理等。以下是一些关键的MySQL优化技巧: 1. **选择合适的存储引擎**:MySQL提供了...

    数据库常见面试题

    数据库设计中遵循的规范称为“范式”,目前主要有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BCNF(Boyce-Codd范式)、第四范式(4NF)和第五范式(5NF)。这些范式的主要目的是减少数据冗余并...

    MyCat权威指南PDF高清版

    MyCat是一个开源的中间件产品,专为企业级应用设计,实现数据库集群功能,能有效地支持大规模数据量的存储和处理。它为数据库提供了分库分表的能力,即数据水平切分,从而提升数据库的性能和扩展性。MyCat支持事务...

Global site tag (gtag.js) - Google Analytics