`

Mysql扩展之分库分表概述

    博客分类:
  • PHP
阅读更多
数据库的复制能解决访问问题,并不能解决大规模的并发写入问题,要解决这个问题就要考虑mysql数据切分了

数据切分,顾名思义,就是数据分散,将一台主机上的数据分摊到多台,减轻单台主机的负载压力,有两种切分方式,一种是分库,即按照业务模块分多个库,每个库中的表不一样,还有一种就是分表,按照一定的业务规则或者逻辑将数据拆分到不同的主机上,每个主机上的表是一样的,这个有点类似于Oracle的表分区。

分库又叫垂直分区,这种方式实现起来比较简单,重要的是对业务要细化,分库时候要想清楚各个模块业务之间的交互情况,避免将来写程序时出现过多的跨库操作。

分表又叫水平分区,这种方式实现起来就比垂直分区复杂些,但是它能解决垂直分区所不能解决的问题,即单张表的访问及写入很频繁,这时候就可以根据一定的业务规则(PS:如互联网BBS论坛的会员等级概念:根据会员等级来分表)来分表,这样就能减轻单表压力,并且还能解决各个模块的之间的频繁交互问题。

分库的优点是:实现简单,库与库之间界限分明,便于维护,缺点是不利于频繁跨库操作,单表数据量大的问题解决不了。

分表的优点是:能解决分库的不足点,但是缺点却恰恰是分库的优点,分表实现起来比较复杂,特别是分表规则的划分,程序的编写,以及后期的数据库拆分移植维护。

实际应用中,一般互联网企业的路线都是先分库再分表,两者结合使用,取长补短,这样发挥了mysql扩展的最大优势,但是缺点是架构很大,很复杂,应用程序的编写也比较复杂。

以上是mysql的数据切分的一些概念,数据切完了,现在要做的是怎么样在整合起来以便于外界访问,因为程序访问的入口永远只有一个,现在比较常用的解决方案是通过中间代理层来统一管控所有数据源。

常用的代理层方案:

1.mysql proxy

类似于连接池,所有连接通过它进行转发。

2.Amoeba

是一个开发代理层的框架,有对应版本Amoeba for mysql,对于数据切分规则,连接数控制,以及读写分离路由支持较好。

3.HiveDB

仅支持水平切分,底层由hibernate shards实现。

4.其他

HSCALE,Spock Proxy(ROR),Pyshards(Python)

最后值得注意的是mysql分库分表的缺点:
缺少好的分布式事务解决方案,目前仅有Innodb提供解决方案,性能值得商榷。
缺少类似于DBLink的跨节点SQL解决方案,Federated提供支持了,但是还是简单的支持,对于表结构的变化就不能为力。

这些缺点只能通过应用程序层来解决,不过话说回来,如果所有缺点都解决了,Oracle也不会卖那么贵了。
分享到:
评论

相关推荐

    高性能数据库集群分库分表方案.docx

    1. 分库分表概述 分库分表是数据库性能优化的重要手段之一,通过将数据库读写操作分散到多个服务器上,减少单个数据库的压力,提高数据库的响应速度和承载能力。分库分表可以分为水平分表和垂直分表两种方式,水平...

    sharding分库分表之Mycat技术栈.zip

    **分库分表技术概述** 在高并发、大数据量的互联网应用中,单个数据库往往无法承受业务压力,这时就需要采用分库分表的技术来解决性能瓶颈。分库分表,顾名思义,就是将一个大的数据库拆分成多个小的数据库,将一张...

    分库分表-zdal

    ### 分库分表-zdal #### 一、概述与需求背景 **Zdal**作为一款由支付宝自主研发的数据中间件产品,其设计初衷是为了应对日益增长的海量数据处理需求以及传统数据库面临的性能瓶颈问题。该产品遵循JDBC规范,能够在...

    当当开源sharding-jdbc-轻量级数据库分库分表中间件

    ### 当当开源Sharding-JDBC:轻量级数据库分库分表中间件 #### 概述 当当网近期开源了一款名为Sharding-JDBC的轻量级数据库分库分表中间件。作为一款高性能、易用性高的数据库水平分片框架,Sharding-JDBC在设计上...

    基于分布式MySQL的PC构件数据溯源方法设计.pdf

    在分布式MySQL中,ZooKeeper可以帮助实现数据库的分库分表、读写分离以及负载均衡。它能监控各个节点的状态,并在节点间进行通信,确保数据的一致性和高可用性。 【分布式MySQL的分库分表】 分库分表是将单一的大...

    MySql 中间件 Mycat 1.6.5 - release- unix.tar 程序

    MySQL中间件Mycat是为了解决大数据场景下的数据库扩展性问题而设计的,它作为一个开源的分布式数据库系统,能够实现MySQL的读写分离、分库分表等功能,从而提高数据库系统的性能和可扩展性。在本文中,我们将深入...

    MySql 中间件 Mycat 1.6 testtool.tar 程序

    MySQL中间件Mycat是为了解决大数据场景下的数据库扩展性问题而设计的,它作为一个分布式数据库系统,能够实现数据库的读写分离和分库分表功能。在本例中,我们关注的是Mycat 1.6版本的testtool环境程序,其包含了...

    DB总结

    文件“分库分表概述.docx”可能会详细阐述这一主题,包括分片策略(如哈希、范围、列表分片)以及如何处理跨库事务和联合查询。 文件“Sharding JDBC摘抄.docx”可能涉及到ShardingSphere这个开源项目,它是一个...

    mysql高并发环境的解决方案.docx

    面对MySQL在高并发环境下的挑战,通过水平分库分表、读写分离以及集群部署等多种策略的组合使用,可以有效地提升系统的整体性能和稳定性。这些方法不仅可以缓解单一数据库的压力,还可以提高数据处理的能力,为用户...

    数据库分库技巧

    通过合理地规划分库分表策略、利用主从复制和集群技术,以及有效地实施负载均衡,可以显著提高系统的性能、可用性和扩展性。未来,随着技术的不断发展,数据切分技术也将变得更加成熟和完善,为企业提供更多高效的...

    2-1+MyCat概述与基本概念1

    MyCat 的主要功能是实现分库分表,即将大型表水平分割成多个小表,分别存储在后端的多个 MySQL 服务上。尽管最初是针对 MySQL 设计的,但MyCat 已经发展到支持 Oracle, SQL Server, DB2 等多种主流数据库以及 ...

    Mysql 教程之运维系列

    综上所述,MySQL的运维管理不仅涉及日志管理、主从复制,还包括高级特性如分库分表等。通过合理配置和使用这些功能,可以有效提升数据库的稳定性和性能。希望以上内容能帮助您更好地理解和应用MySQL的相关技术。

    MySQL性能调优与架构设计.pdf -文字版

    - **架构设计**:合理设计数据库架构,如分库分表、读写分离等。 #### 四、MySQL架构设计 - **垂直分表**:将一张表拆分为多个表,每个表包含不同的列,以提高查询效率。 - **水平分割**:将数据按一定规则分布在...

    MySQL分布式数据库架构及企业实践-基于Mycat中间件

    Mycat是一款优秀的开源数据库连接池产品,它支持对MySQL进行读写分离、分库分表等操作。通过Mycat,可以方便地构建一个高性能、可扩展性强的MySQL集群。 - **读写分离**:Mycat能够自动根据SQL语句类型(读/写)将...

    MySQL性能调优与架构设计.pdf

    - **4.2.3 分库分表**:对于大规模数据集,可以通过分库分表技术减少单个数据库的负担。 - **4.2.4 高可用集群**:利用高可用集群技术,如Galera Cluster或PXC(Percona XtraDB Cluster),实现故障自动转移,保证...

    Mysql性能优化教程.doc

    - 采用分库分表策略。 - 引入缓存机制减轻数据库负担。 - **分库&拆表方案**: - 根据数据访问模式合理划分数据库和表。 - **反范式设计(冗余结构设计)**: - 适当引入冗余数据以提高查询效率。 - **主从架构**:...

    mysql 高级 .txt

    4. **分库分表**:当单个数据库无法满足性能需求时,可通过分库分表分散压力。 ### 性能监控与调优 1. **慢查询日志**:开启慢查询日志记录执行时间过长的SQL语句,便于后续分析和优化。 2. **InnoDB缓冲池**:调整...

    Mycat+MySQL Galera读写分离验证安装手册

    **Mycat**是中国开源社区第一个成熟可用的数据库中间件项目,它支持读写分离、分库分表等功能,能够为用户隐藏底层数据库集群的复杂性,提供统一的数据访问接口。Mycat主要应用于大型分布式系统,通过其强大的功能来...

    MYSQL数据库设计规范.docx

    可以通过历史数据归档或分库分表等方法来实现数据量的有效控制。 **5. 不在数据库中存储大二进制数据** - **级别**: 高危 - **原因**: 存储大量二进制数据会迅速增加数据库体积,并可能导致性能下降。通常这类...

Global site tag (gtag.js) - Google Analytics