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

mysql扩展至分库分表

 
阅读更多


MySQL互联网Oracle企业应用数据结构 .

数据库的复制能解决访问问题,并不能解决大规模的并发写入问题,要解决这个问题就要考虑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也不会卖那么贵了。

分享到:
评论

相关推荐

    Python+MySQL分表分库实战

    MySQL分库分表是数据库架构设计中用于处理大规模数据量以及高并发请求的一种技术手段。通过将数据拆分到不同的数据库服务器中,能够有效降低单个数据库的负载,提高系统的扩展性和性能。Python作为一种流行的编程...

    MySQL分库分表技术

    总结,MySQL的分库分表技术是应对大数据量和高并发场景的重要手段,它通过合理的设计和策略,能够有效地提升系统的扩展性和性能,但同时也带来了数据一致性和运维复杂性的挑战。实践中需要根据业务特性选择合适的分...

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

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

    基于Mycat实现Mysql读写分离以及分库分表.doc

    基于Mycat实现Mysql读写分离以及分库分表可以提高数据库的性能和可扩展性。但是,需要正确地配置Mycat的配置文件,并且手动建好拆分后的库,以及手动建好逻辑库里的表。 通过本文档,你可以了解到Mycat读写分离和分...

    mysql高可用分库分表.pdf

    为了提升MySQL数据库的性能和可用性,常采用的策略是数据库分库分表,其中可以分为垂直分库、垂直分表、水平分库、水平分表等方法。 垂直分表是针对数据库表中的列进行拆分,将一张大表拆成若干个结构更小的表,以...

    php mysql分库分表实例

    "php mysql分库分表实例"这个主题就是针对这样的需求,它涉及到如何利用PHP编程语言来实现MySQL数据库的分库分表操作,以提高系统的性能和可扩展性。 分库分表是一种常见的数据库垂直切分和水平切分策略,用于解决...

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

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

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

    Heisenberg是一款开源的MySQL分库分表中间件,它能够帮助开发者实现数据库的水平扩展,提升系统的处理能力和可用性。 **一、Heisenberg简介** Heisenberg取名自量子力学中的海森堡不确定性原理,寓意其在数据库分...

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

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

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

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

    mycat对mysql数据库进行分库分表demo-mycat-demo-parent.zip

    标题"mycat对mysql数据库进行分库分表demo-mycat-demo-parent.zip"揭示了本示例主要围绕MyCat这一中间件,用于MySQL数据库的分布式处理,特别是分库分表功能。MyCat是一个开源的分布式数据库系统,它能够将一个大型...

    Python与MySQL分表分库实战

    7. **扩展性**:分库分表设计应具备良好的扩展性,方便未来增加新的数据库或表。 8. **备份与恢复**:制定完善的数据库备份策略,并能快速恢复,以防数据丢失。 9. **读写分离**:在大型系统中,通常采用读写分离...

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

    总之,Node.js实现的MySQL分库分表中间件是应对大数据挑战的有效工具,它利用了Node.js的并发处理能力和MySQL的成熟数据库功能,为开发高并发、高性能的分布式应用提供了可能。 TribeDB-master 提供的源码可能为...

    java mysql 分库分表详解

    随着互联网业务的快速发展,单个数据库往往无法满足性能和扩展性的需求,这时就需要采用分库分表技术来优化系统架构。 分库是将一个大的数据库拆分成多个小的数据库,每个数据库负责一部分数据,以此来分散存储压力...

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

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

    用于对mysql进行操作 分库分表-dbcli.zip

    "用于对mysql进行操作 分库分表-dbcli.zip" 提供的工具 dbcli-master 正是针对这一需求设计的,它帮助开发者更方便地管理和操作分库分表的MySQL环境。 dbcli 是一个命令行界面工具,旨在简化数据库交互,尤其是对于...

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

    7. **查询优化**:在分库分表场景下,SQL 查询的优化至关重要。Shard 工具需要具备智能的 SQL 转译和优化能力,以便在多个分片之间有效地执行复杂的联表查询。 8. **兼容性**:Shard 工具应尽可能地保持与原生 ...

    MySQL中如何进行分库分表的设计和实现?

    MySQL 中的分库分表是一种常用的数据库扩展方式,可以提高数据库的并发处理能力和扩展性。分库分表的设计和实现需要遵循一定的步骤和原则,以下是分库分表的设计和实现的一般步骤: 数据库选择:选择合适的数据库...

    分库分表总结

    开发者在选择和实施分库分表方案时,需要充分评估业务需求、系统架构和现有技术栈,确保方案的可行性和扩展性。此外,持续关注和学习相关工具的发展,可以帮助我们更好地应对大数据时代的挑战。

Global site tag (gtag.js) - Google Analytics