`

MySQL分库分表的一些技巧

阅读更多
分表是分散数据库压力的好方法。
分表,最直白的意思,就是将一个表结构分为多个表,然后,可以再同一个库里,也可以放到不同的库。
当然,首先要知道什么情况下,才需要分表。个人觉得单表记录条数达到百万到千万级别时就要使用分表了。
1,分表的分类
1>纵向分表
将本来可以在同一个表的内容,人为划分为多个表。(所谓的本来,是指按照关系型数据库的第三范式要求,是应该在同一个表的。)
分表理由:根据数据的活跃度进行分离,(因为不同活跃的数据,处理方式是不同的)
案例:
对于一个博客系统,文章标题,作者,分类,创建时间等,是变化频率慢,查询次数多,而且最好有很好的实时性的数据,我们把它叫做冷数据。而博客的浏览量,回复数等,类似的统计信息,或者别的变化频率比较高的数据,我们把它叫做活跃数据。所以,在进行数据库结构设计的时候,就应该考虑分表,首先是纵向分表的处理。
这样纵向分表后:
首先存储引擎的使用不同,冷数据使用MyIsam 可以有更好的查询数据。活跃数据,可以使用Innodb ,可以有更好的更新速度。
其次,对冷数据进行更多的从库配置,因为更多的操作时查询,这样来加快查询速度。对热数据,可以相对有更多的主库的横向分表处理。
其实,对于一些特殊的活跃数据,也可以考虑使用memcache ,redis之类的缓存,等累计到一定量再去更新数据库。或者mongodb 一类的nosql 数据库,这里只是举例,就先不说这个。
2>横向分表
字面意思,就可以看出来,是把大的表结构,横向切割为同样结构的不同表,如,用户信息表,user_1,user_2 等。表结构是完全一样,但是,根据某些特定的规则来划分的表,如根据用户ID来取模划分。
分表理由:根据数据量的规模来划分,保证单表的容量不会太大,从而来保证单表的查询等处理能力。
案例:同上面的例子,博客系统。当博客的量达到很大时候,就应该采取横向分割来降低每个单表的压力,来提升性能。例如博客的冷数据表,假如分为100个表,当同时有100万个用户在浏览时,如果是单表的话,会进行100万次请求,而现在分表后,就可能是每个表进行1万个数据的请求(因为,不可能绝对的平均,只是假设),这样压力就降低了很多很多。

数据库的复制能解决访问问题,并不能解决大规模的并发写入问题,要解决这个问题就要考虑mysql数据切分了

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

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

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

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

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

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

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

相关推荐

    Python+MySQL分表分库实战

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

    Mysql优化、MyCat搭建、分库分表、读写分离、负载均衡

    MySQL优化是数据库管理中的关键环节,它涉及到性能提升、资源有效利用和系统...以上就是关于"Mysql优化、MyCat搭建、分库分表、读写分离、负载均衡"的相关知识点,这些内容对于管理和优化大型MySQL数据库系统至关重要。

    拉勾MySQL实战课程分库分表应用-shardingsphere-example.zip

    本实战课程聚焦于“拉勾MySQL实战课程分库分表应用”,通过使用开源框架ShardingSphere来演示如何在实际项目中实现这一技术。 首先,分库分表是一种解决数据库性能瓶颈的有效策略,它将单一的大表分解为多个小表,...

    后端开发之分库分表技术详解及其面试准备

    使用场景及目标:无论是刚入行不久的研发新手还是寻求进阶的企业级软件设计师,《后端开发之分库分表技术详解及其面试准备》旨在助力相关人员掌握必要的理论知识与实战技巧,从容应对工作中或求职时遭遇的相关技术...

    分库分表第二次1

    【描述】:本课程深入探讨了Mycat作为数据库中间件在分库分表中的应用,旨在帮助学习者理解Mycat的基本原理,并通过实际操作掌握其在数据库管理中的实践技巧。课程内容涵盖上节课回顾、Mycat介绍、核心概念解析、...

    sharding-jdbc之——分库分表实例完整源码.zip

    总之,"sharding-jdbc之——分库分表实例完整源码.zip"是一个宝贵的教育资源,可以帮助开发者深入理解sharding-jdbc的使用方法和分库分表的实践技巧。通过阅读源码和博文,可以提升在分布式数据库领域的专业技能。

    Java ️总结:JVM,NIO,并发编程,MySQL,分库分表,微服务,分布式缓-Java-Summarize.zip

    本篇文章将深入探讨Java技术栈中的关键概念:JVM(Java虚拟机)、NIO(非阻塞I/O)、并发编程、MySQL数据库、数据库分库分表、微服务以及分布式缓存。 首先,JVM是Java程序运行的基础,它负责解释和执行Java字节码...

    打造专业开发者指南:针对ShardingProxy分库分表解决策略的深度剖析 – 详解部署、使用、服务治理与优化技巧

    ShardingProxy是一款面向Java开发者的开源中间件,用于实现数据库分库分表的解决方案,尤其在处理大数据量的场景下显得尤为重要。它提供了一个统一的数据库代理服务,使得应用程序可以像操作单个数据库一样操作...

    数据库分库技巧

    例如,阿里巴巴研究院开发了一个名为“变形虫”(Amoeba)的项目,该项目致力于提供一种简单易用的方式来实现数据的分库分表。虽然该项目仍处于测试阶段,但它展示了企业在应对大规模数据挑战方面的创新努力。 ####...

    MYSQL基础知识,一些常用问题

    本文从MySQL的基础知识入手,逐步深入到不同规模表的处理方法、索引管理与优化、高级查询技巧以及分库分表带来的挑战等多个方面。通过了解和掌握这些知识点,可以极大地提高MySQL数据库的性能,并为构建高性能的应用...

    MySQL面试经典100题(收藏版,附答案).doc

    MySQL是世界上最流行的关系型...以上内容涵盖了MySQL面试中常见的索引使用、优化、分库分表、存储引擎对比以及索引原理等多个重要知识点,对于求职者来说,理解和掌握这些知识将有助于在面试中展现出扎实的MySQL基础。

    MySQL数据库设计与优化实战:提升查询性能与系统稳定性

    内容概要:本文详细介绍了 MySQL 数据库设计与优化的最佳实践,包括数据库设计的基础原则、索引设计、数据库分区与分库分表、查询优化技巧以及性能调优与监控。通过合理的设计和优化,可以帮助开发者提升 MySQL ...

    大牛讲解的MySQL介绍及性能优化 PPT

    以及数据库架构优化,如分库分表策略来分散负载。此外,定期进行分析和维护,如分析表统计信息,执行OPTIMIZE TABLE命令,也是保持数据库高效运行的关键步骤。 在MySQL技巧分享部分,可能涉及一些高级话题,如视图...

    mysql-7 (1).pdf

    MySQL性能优化是一个涵盖广泛的主题,包括服务器层面的优化、数据库设计层面的优化、SQL查询的优化以及数据库集群和分库分表的策略。本课程旨在让学员深入理解这些关键领域,提升MySQL系统的整体性能。 首先,...

    MySql 中间件 Mycat 1.6.7.5 - release- testtool.tar 程序

    MySQL中间件Mycat是为了解决大数据场景下的数据库扩展性问题而设计的一款开源软件,它主要用于实现MySQL的读写分离以及数据的分库分表。Mycat 1.6.7.5 - RELEASE版是这个项目的一个稳定版本,发布于2021年6月16日15:...

    高性能MySQL 2nd

    - **分库分表策略**:当单个数据库表的数据量过大时,可以采用分库分表的方式分散压力,提高并发处理能力。 - **读写分离技术**:通过将读操作和写操作分配到不同的服务器上,可以有效减轻主数据库的压力,提高系统...

    ShardingSphere教程(下).rar

    总之,《ShardingSphere教程(下)》是一个全面了解和掌握 ShardingSphere 的宝贵资源,无论是对于新手还是经验丰富的开发者,都能从中获取有价值的知识和技巧,进一步提升在数据库分库分表领域的专业技能。

    mysql优化方案

    MySQL的分库分表与分区 - **分库分表**:当单个表的数据量过大时,可以通过分库分表的方式分散数据,减轻单个表的压力。 - **分区**:对于非常大的表,可以通过分区技术将其分割成多个小块,从而提高查询效率。 #...

    High Performance MySQL_ Optimization.pdf

    4. **数据库架构设计**:高性能的数据库系统往往需要良好的架构设计,比如水平分库分表、读写分离、数据复制等。书中可能会讨论这些架构模式的实现方式和注意事项,帮助读者理解如何构建可扩展的数据库系统。 5. **...

Global site tag (gtag.js) - Google Analytics