`
liudaoru
  • 浏览: 1578635 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多

From:http://hi.baidu.com/jabber/blog/item/adc442ed647adad4b31cb11e.html

 

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

Tim http://hi.baidu.com/jabber/blog/category/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分表实现大规模数据...

    MySQL分表及分表后插入sql

    MySQL分表及分表后插入sql语句,表为订单表,可以参考一下

    Node.js 实现的 MySQL 分表分库中间件,用于海量数据的分布式集群储存管理和高并发访问。.zip

    本文将深入探讨基于Node.js实现的MySQL分表分库中间件,它在分布式集群环境中起到至关重要的作用。 首先,Node.js是一种流行的JavaScript运行环境,它允许开发人员使用JavaScript进行服务器端编程。Node.js的异步非...

    Mysql分表查询,哈希,范围,列表

    - **索引设计**:合理设计子表的索引,针对常用查询模式优化查询性能。 分表策略的选择应根据业务需求和数据特性来确定,通常需要结合实际情况进行综合考虑。在设计分表方案时,还应考虑到扩展性和可维护性,确保...

    大数据表的分表处理设计思想和实现(MySQL)

    1. **性能提升**:大型表在执行SQL时,由于数据量大,索引扫描和数据读取都会变慢,分表可以将数据分布到多个物理存储上,加快查询速度。 2. **负载均衡**:通过分表,可以将数据分散到多个服务器,实现负载均衡,...

    TP5+MySQL通用分表代码

    - 产品上线以后,数据量越来越大,当一个表有几十万上百万条记录的时候,是时候考虑分表了。【超过几千万记录的话,这个分表估计不适合。】 - 怎么做 - 分表情况,1:hash分表,按照目标表的id的hash值,写入对应...

    mysql分表创建

    首先,分表(Sharding)是数据库水平扩展的一种解决方案,通过将一个大表的数据分散到多个物理表上,从而降低单表的数据量,提高查询效率。MySQL中的分表通常有以下两种方式: 1. **垂直分表**:根据字段的相关性将...

    mysql分表分库demo

    MySQL 分表分库 Demo MySQL 分表分库是指将大型数据库表分割成多个小表,以提高数据库的性能和可扩展性。随着业务数据的增长,数据库表中的数据不断增加,如果不加以控制,数据库的性能将会下降,影响业务的发展。 ...

    Python+MySQL分表分库实战

    综上所述,"Python+MySQL分表分库实战"的学习内容涵盖了数据库设计原则、Python数据库操作技巧、分库分表策略以及性能优化等多个方面。通过学习和实践,开发者可以有效地解决大数据场景下的存储和查询问题,提高系统...

    Python与MySQL分表分库实战

    1. **设计合理的分库分表策略**:根据业务需求和数据分布特点,选择合适的分库分表策略,如哈希分片、范围分片或复合键分片。 2. **数据库连接管理**:Python中,可以使用`with`语句管理数据库连接,确保资源及时...

    MySQL数据库分表批量主键查询代理-mysql-partitions-proxy.zip

    "MySQL数据库分表批量主键查询代理-mysql-partitions-proxy"项目就是为了应对这一挑战而设计的。这个开源工具旨在优化数据库的查询效率,尤其在面对分表场景下的主键批量查询时,它能提供一个代理服务,有效地协调和...

    mysql 分库分表查询工具-shard.zip

    MySQL 分库分表查询工具——Shard 在大型的互联网应用中,数据库的性能瓶颈往往成为系统扩展性的关键因素。为了应对高并发、大数据量的挑战,MySQL 数据库的分库分表策略被广泛采用。分库是将数据分散到多个独立的...

    MySQL 分库分表的实现原理及演示案例

    MySQL分库分表是一种数据库架构优化技术,其目的是为了提高大型数据库系统的性能和可扩展性。在面对大规模数据和高并发访问时,单库单表往往难以满足需求,分库分表就成为了必要之选。分库分表技术可以将数据分散...

    mysql 分表

    关于mysql的分表技术实现方法。以及分表设计, 及简单的代码实例。

    mycat+mysql+jdbc实现根据手机号尾号分库分表存储以及效率对比操作代码()

    标题中的“mycat+mysql+jdbc实现根据手机号尾号分库分表存储”涉及的是分布式数据库中间件Mycat与MySQL数据库以及Java JDBC接口的结合使用。Mycat是一款开源的分布式数据库系统,用于解决大数据量、高并发的场景下的...

    MySQL 分库分表的实现原理及演示案例.zip

    在实现MySQL分库分表的过程中,通常会遇到一些挑战,如数据一致性、事务处理、跨库跨表查询等。为了应对这些问题,可以使用以下技术: 1. **ShardingSphere**:Apache ShardingSphere是一个开源的分布式数据库解决...

    MySQL分表和分区最佳攻略

    常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能会更加糟糕。分表和表分区...

    MySQL分表和分区最佳攻略word

    MySQL分表和分区最佳攻略 word版本,

Global site tag (gtag.js) - Google Analytics