项目发展的初期,项目小,数据量小,业务简单,用户使用较少,往往将所有表设计到一个
数据库中,也就是说所有表都在一个表空间下,或者在多个表空间下,即单库单表。
当系统用户越来越多时,对查询需求要求越来越多时,往往就会将数据库架构改为主从结构
利用这种结构的特性,将操作数据库读和写分开,即读写分离,写请求发往master数据库,master再将数据同步到slave节点,读操作全部从slave读,而且slave节点可以有多个,这样就可以线性增大Qps,即提高查询处理能力。
当系统用户越来越多后,比如用户达到1亿用户,全部数据都放到一张表中,即使读写已经分离了,但是一张表的数据还是会很大,这个时候对读写性能会减弱,影响到整个数据库,这个时候就会将数据进行水平分表,即将一张表进行按照某些特性进行分区,如按照时间分区为多个表,按照hash分为多个表按照范围分为多个表,这样一个表的数据就会减少,可以减少查询的性能,如oracle的表分区就是解决这种问题的,这时候的架构为即单库多表
当系统业务越来越庞大,数据越来越大的时候,一个数据库存储不下这些数据时,数据库支持的连接也不够时,整体性能会下降很厉害,这个时候往往需要对数据进行水平,垂直分割,
即将独立业务的数据垂直分割到一个独立的数据库中,这样减少单台数据局的存储问题,也解决了连接不够的问题,解决了并发的问题等,同样的垂直分离出去后,一个数据库可能也存储不了一个独立业务的数据,那么这个时候就会将数据进行水平分区,比如用户数据达到5亿后,一个数据库存储不下,就可以根据用户名进行hash,水平分区到多个用户库中,这个时候的分区表是物理不同的库中的表,到这个阶段后,就需要有个路由服务,需要将用户的请求路由到具体的水平分区表中去,新增数据时也是根据路由新增到具体的分区表中。现在的数据库架构为多库多表结构,为了提高读写性能,任何一个独立库都会设计为主备结构,往往还有双机备份,以免数据丢失。
分库分表规则
分库分表后需要有一套分库分表规则,通过分库分表规则将数据插入到对应的库和表中,通过分库分表规则查询对应的库和表,这个功能就叫做路由。
一主多备
在实际应用中往往都是读多写少的场景,像mysql提供了读写分离的机制,写请求全部到master节点,读可以在master,slave节点,master和slave结构完全一样,一个master可以有多个slave节点,通过这种方式可以提高数据库的Qps,因为所有的写操作都在master上面,然后异步同步数据到salve节点上面,而读操作都在slave节点上面,当然缺点是同步有一定的延
迟,slave节点数量越多,延迟越厉害,因为要有数据同步
因为所有的写操作都在master上面,master往往就成为集群的性能拼劲,当写操作过多,会严重影响master的稳定性,如果master挂掉,整个集群将不能工作,这个时候一般需要将master做成双机,所以如果读压力大时,往往采用主备架构,通过多添加slave节点来线性扩展Qps,但是当slave节点过多时就需要考虑分库了,同样的当写压力过大时需要考虑分库。
由于集群中的机器配置可能不一样,这个时候可以通过程序控制每台机器的读写权重,以达到负载均衡。
分享到:
相关推荐
在IT行业中,数据库扩展是解决高并发、大数据量场景下的常见策略,而“分库分表”正是其中一种有效的手段。本示例“springmvc分库分表实际例子”提供了一个基于SpringMVC实现的实战项目,旨在帮助开发者了解如何在...
本文将详细介绍一款能够自动创建分库分表的工具——“分库分表自动建库表小工具”,并探讨其功能、优势及最新更新内容。 首先,分库分表是一种数据库架构的优化方法,它通过将数据分散存储在多个数据库或表中,来...
### 数据分库分表之二叉树分库分表 #### 一、引言与背景 随着互联网技术的快速发展及用户需求的激增,单一数据库系统已难以应对日益增长的数据处理需求。为了提高系统的可扩展性和性能,数据分库分表成为了一种...
在现代企业级应用中,随着数据量的增长,单表存储可能会遇到性能瓶颈,这时就需要引入分库分表的策略来优化数据库的性能。"spring动态数据源+mybatis分库分表"是一个针对大型数据库场景的解决方案,它利用Spring框架...
**MySQL分库分表技术** 随着互联网业务的快速发展,数据量呈现爆炸性增长,单个数据库的性能瓶颈问题日益突出。在这种背景下,MySQL的分库分表技术应运而生,旨在解决高并发、大数据量场景下的性能挑战。本篇将深入...
在现代企业级应用开发中,数据量的增长往往超出单个数据库的处理能力,这时就需要采用分库分表的技术来提高系统的扩展性和性能。本项目基于Java、SpringBoot、MyBatis以及ShardingJDBC实现了一个分库分表的解决方案...
MySQL分库分表是一种数据库架构优化技术,其目的是为了提高大型数据库系统的性能和可扩展性。在面对大规模数据和高并发访问时,单库单表往往难以满足需求,分库分表就成为了必要之选。分库分表技术可以将数据分散...
标题中的“48_你们当时是如何把系统不停机迁移到分库分表的?”提示了本次讨论的主题,即如何在不中断服务的情况下,对数据库进行分库分表操作。这通常是一个复杂的过程,涉及到数据库架构的调整、数据迁移、双写...
"Sharding + Mybatis-Plus 分库分表"的主题就是针对这个问题提出的解决方案。Sharding-JDBC是一个轻量级的Java框架,它可以在不改变任何数据库语义和业务代码的情况下,实现数据库的水平拆分,从而提高系统的并行...
6. **笔记.docx** 和 **01_分库分表的由来.png**、**02_数据库如何拆分.png**:这些文件可能包含了学习笔记、图表或者示例,有助于直观地理解分库分表的背景、实施步骤以及实际效果。 总的来说,分库分表是解决大...
Sharding-JDBC作为阿里巴巴开源的一款轻量级数据库中间件,它提供了一种无侵入的分库分表解决方案,非常适合于单体项目的数据库扩展。在这个"集成sharding-jdbc实现分库分表.zip"的压缩包中,我们可以深入学习如何将...
在现代企业级应用中,随着数据量的急剧增长,单个数据库往往无法承载如此庞大的数据,这便引出了“分库分表”这一关键概念。分库分表是数据库水平扩展的一种常见策略,旨在提高数据库系统的性能和可扩展性。本篇文章...
在本资源中,我们主要探讨如何使用Spring MVC、Spring和Mybatis这三大流行框架来构建一个支持分库分表的应用。这些技术都是Java Web开发中的关键组件,它们各自承担着不同的职责并协同工作,以实现高效、可扩展的...
在IT行业中,数据库扩展是解决高并发、大数据量场景下的重要策略之一,"sharding分库分表"就是其中一种常见的方法。本示例通过整合一系列技术,包括SpringBoot、ShardingSphere、Swagger和MyBatis-Plus,来演示如何...
### Shardingsphere 分库分表知识点详解 #### 1. 概览 ##### 1.1 简介 Shardingsphere 是一个分布式数据库中间件项目,它由 Apache 软件基金会维护,旨在为应用程序提供透明的数据分片、读写分离、数据加密等能力...
基于Mycat实现Mysql读写分离以及分库分表详解 本文档详细介绍了基于Mycat实现Mysql读写分离以及分库分表的技术,涵盖了Mycat安装、配置、读写分离、分库分表等多方面的知识点。 一、读写分离 Mycat读写分离是指将...
为了解决这一问题,"分库分表"成为了一种常见的优化策略。本文将深入探讨分库分表的概念、原理以及实际应用中的注意事项。 一、分库分表简介 分库分表,顾名思义,就是将一个大的数据库分解为多个较小的数据库或表...
分库分表是一种常见的数据库扩展策略,用于解决大数据量下的性能瓶颈问题。在大型互联网应用中,随着用户数量和业务数据的增长,单个数据库往往难以承载高并发读写请求,这时就需要采用分布式数据库技术,而分库分表...
开源个人参考淘宝的TDDL分库分表思路写的一个分库分表中间件Kamike.divide. 分库分表这个是8月份左右跟淘宝的数据分析部门的架构师离哲交流的时候产生的想法,离哲推荐采用TDDL进行分库分表。 回去一看,却...