`

Mysql分库分表方案

阅读更多

转载文章,原文地址:http://blog.csdn.net/zengfuqing/article/details/14466745

 

Mysql分库分表方案

1.为什么要分表:

当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。

mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作。

2. mysql proxy:amoeba

做mysql集群,利用amoeba

从上层的java程序来讲,不需要知道主服务器和从服务器的来源,即主从数据库服务器对于上层来讲是透明的。可以通过amoeba来配置。

 3.大数据量并且访问频繁的表,将其分为若干个表

比如对于某网站平台的数据库表-公司表,数据量很大,这种能预估出来的大数据量表,我们就事先分出个N个表,这个N是多少,根据实际情况而定。

     某网站现在的数据量至多是5000万条,可以设计每张表容纳的数据量是500万条,也就是拆分成10张表,

那么如何判断某张表的数据是否容量已满呢?可以在程序段对于要新增数据的表,在插入前先做统计表记录数量的操作,当<500万条数据,就直接插入,当已经到达阀值,可以在程序段新创建数据库表(或者已经事先创建好),再执行插入操作。

 4. 利用merge存储引擎来实现分表

如果要把已有的大数据量表分开比较痛苦,最痛苦的事就是改代码,因为程序里面的sql语句已经写好了。用merge存储引擎来实现分表, 这种方法比较适合.

举例子:

 

 

 ------------------- ----------华丽的分割线--------------------------------------

 数据库架构

1、简单的MySQL主从复制:

MySQL的主从复制解决了数据库的读写分离,并很好的提升了读的性能,其图如下:


 

其主从复制的过程如下图所示:


 

但是,主从复制也带来其他一系列性能瓶颈问题:

1. 写入无法扩展

2. 写入无法缓存

3. 复制延时

4. 锁表率上升

5. 表变大,缓存率下降

那问题产生总得解决的,这就产生下面的优化方案,一起来看看。

2、MySQL垂直分区

   如果把业务切割得足够独立,那把不同业务的数据放到不同的数据库服务器将是一个不错的方案,而且万一其中一个业务崩溃了也不会影响其他业务的正常进行,并且也起到了负载分流的作用,大大提升了数据库的吞吐能力。经过垂直分区后的数据库架构图如下: 


 

然而,尽管业务之间已经足够独立了,但是有些业务之间或多或少总会有点联系,如用户,基本上都会和每个业务相关联,况且这种分区方式,也不能解决单张表数据量暴涨的问题,因此为何不试试水平分割呢?

3、MySQL水平分片(Sharding)

这是一个非常好的思路,将用户按一定规则(按id哈希)分组,并把该组用户的数据存储到一个数据库分片中,即一个sharding,这样随着用户数量的增加,只要简单地配置一台服务器即可,原理图如下:


 

如何来确定某个用户所在的shard呢,可以建一张用户和shard对应的数据表,每次请求先从这张表找用户的shard id,再从对应shard中查询相关数据,如下图所示:


 

  • 大小: 55.5 KB
  • 大小: 43.7 KB
  • 大小: 47.4 KB
  • 大小: 43.7 KB
  • 大小: 56.1 KB
  • 大小: 133.3 KB
分享到:
评论

相关推荐

    MySQL分库分表技术

    **MySQL分库分表技术** 随着互联网业务的快速发展,数据量呈现爆炸性增长,单个数据库的性能瓶颈问题日益突出。在这种背景下,MySQL的分库分表技术应运而生,旨在解决高并发、大数据量场景下的性能挑战。本篇将深入...

    mysql大数据分库和分表 php解决方案

    #### 二、MySQL分库分表方案概述 分库分表是针对大型应用中的海量数据进行管理和优化的一种常见策略。其核心目的是通过将大量数据分布在不同的数据库或不同的表中,来降低单一数据库的压力,提高数据处理效率。具体...

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

    MySQL数据库在面临大数据量时,性能可能会显著下降,此时就需要采用分库分表的技术来解决...通过学习和实践这些案例,你将能够更好地理解和掌握MySQL分库分表技术,从而为你的项目提供更高效、可扩展的数据库解决方案。

    MySQL分库分表无限扩容后的瓶颈及解决方案.docx

    "MySQL 分库分表无限扩容后的瓶颈及解决方案" MySQL 是一个非常popular 的数据库管理系统,广泛应用于各行各业。随着业务的发展,数据量也在不断增长,数据库的性能和容量也将面临着极大的挑战。这篇文章将讨论 ...

    mysql分库分表分区1

    这里的“mysql分库分表分区1”主要讨论的是 MySQL 中的表分区技术,这是一种将大表物理分割为多个更小、更易管理的部分的方法。下面将详细介绍四种常见的分区类型:RANGE、LIST、HASH 和 KEY。 1. **RANGE分区**: ...

    MySQL数据库之分库分表方案_ITPUB博客.mhtml

    MySQL数据库之分库分表方案_ITPUB博客.mhtml MySQL数据库之分库分表方案_ITPUB博客.mhtml MySQL数据库之分库分表方案_ITPUB博客.mhtml

    19道MySQL分库分表高频题整理(附答案背诵版).md

    1. **全面覆盖**:题集涵盖了MySQL分库分表技术中的核心知识点,包括基本概念、设计原则、实现方法、常见问题及解决方案等。 2. **详尽答案**:每道题目提供详细的答案和解释,帮助学习者理解分库分表的实际应用及...

    去年底写的mysql分库分表中间件heisenberg

    总之,Heisenberg作为一款成熟的MySQL分库分表中间件,为大型互联网应用提供了数据库水平扩展的解决方案,通过合理的分片策略和强大的功能,帮助企业应对数据增长带来的挑战。开发者可以通过深入学习和实践,更好地...

    Mysql分库分表实例.zip

    为了解决这一问题,"Mysql分库分表实例" 提供了一种解决方案——数据分片技术,即通过分库分表来提升数据库的读写效率。 分库分表是数据库水平扩展的一种策略,它的核心思想是将一个大的数据库拆分成多个小的数据库...

    分库分表 各种mysql中间件 总结(csdn)————程序.pdf

    总结来说,本文主要介绍了MySQL中间件在应对大规模数据和高并发场景下的应用,尤其是ShardingSphere作为强大的分库分表工具,其与Spring Boot的整合以及Druid连接池的配合,提供了高效、灵活的数据库扩展方案。...

    java mysql 分库分表详解

    在Java和MySQL数据库环境中,分库分表是一种常见的解决大数据量和高并发问题的策略。随着互联网业务的快速发展,单个数据库往往无法满足性能和扩展性的需求,这时就需要采用分库分表技术来优化系统架构。 分库是将...

    mysql分库分表-shardingmysql.zip

    在这个“mysql分库分表-shardingmysql.zip”压缩包中,我们重点关注的是如何使用 ShardingSphere 来实现 MySQL 的分库分表。 首先,理解分库分表的基本概念。分库是将一个大型数据库拆分成多个小型数据库,每个...

    Mysql分库分表11111111111

    ### MySQL分库分表策略详解 #### 一、场景与系统分析 在互联网技术日新月异的今天,数据量的快速增长对数据库系统的性能提出了更高要求。为了应对这些挑战,许多企业选择实施分库分表策略。分库分表是指将原来单一...

    MySQL分库分表.doc

    MySQL分库分表是一种应对大数据量和高并发场景下的数据库优化策略,旨在提高数据库系统的性能、可用性和可扩展性。MYCAT(曾用名:Maatkit)是一款开源的数据库中间件,它允许开发者将MySQL数据库集群化,实现分库...

    Shark分布式mysql分库分表中间件sharding领域的一站式解决方案

    Shark 分布式mysql分库分表中间件,sharding领域的一站式解决方案。具备丰富、灵活的路由算法支持,能够方便DBA实现库的水平扩容和降低数据迁移成本。shark采用应用集成架构,放弃通用性,只为换取更好的执行性能与...

    Python+MySQL分表分库实战

    3. **分布式数据库工具**:还有一些Python库如`shardingsphere`、`pyodbc`等,它们提供了分库分表的完整解决方案,包括路由规则定义、数据一致性保证、事务处理等,简化了数据库扩展的复杂度。 4. **性能优化**:在...

    Mysql分库分表实例-Sub-LibriryTable.zip

    "Mysql分库分表实例-Sub-LibriryTable"提供了一个实践性的数据库扩展解决方案,帮助应对大数据量和高并发场景下的性能挑战。通过学习这个实例,我们可以深入了解分库分表的原理、策略以及实际操作,提升在大型...

    mysql分库分表-atlantic.zip

    1. **MyCat**:开源的MySQL分库分表中间件,支持自动路由、分布式事务等。 2. **ShardingSphere**:Apache孵化器项目,提供分库分表、读写分离等功能,兼容多种数据库。 3. **OceanBase**:阿里巴巴开源的分布式...

    mysql分库分表-mysql-sharding-jdbc.zip

    MySQL 分库分表是一种数据库扩展策略,用于解决大数据量下的性能瓶颈问题。在单个数据库无法满足高并发、大数据处理需求时,通过将数据分散到多个数据库实例中,实现水平扩展,提高系统的处理能力和可用性。`mysql-...

    Mysql分库分表 分片理论概念6-12.docx

    #### 五、分库分表方案详解 1. **垂直拆分**: - **按业务模块拆分库**:根据业务功能的不同,将表分散到不同的数据库中。 - **按字段拆分表**:对于某些特别大的表,可以根据字段的不同将其拆分成多个表。 2. **...

Global site tag (gtag.js) - Google Analytics