项目发展的初期,项目小,数据量小,业务简单,用户使用较少,往往将所有表设计到一个
数据库中,也就是说所有表都在一个表空间下,或者在多个表空间下,即单库单表。
当系统用户越来越多时,对查询需求要求越来越多时,往往就会将数据库架构改为主从结构
利用这种结构的特性,将操作数据库读和写分开,即读写分离,写请求发往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节点过多时就需要考虑分库了,同样的当写压力过大时需要考虑分库。
由于集群中的机器配置可能不一样,这个时候可以通过程序控制每台机器的读写权重,以达到负载均衡。
分享到:
相关推荐
springmvc分库分表实际例子 maven项目 欢迎下载试用
sharding-jdbc 分库分表 CRUD
开源个人参考淘宝的TDDL分库分表思路写的一个分库分表中间件Kamike.divide. 分库分表这个是8月份左右跟淘宝的数据分析部门的架构师离哲交流的时候产生的想法,离哲推荐采用TDDL进行分库分表。 回去一看,却...
分库分表组件,支持自动主备切换,动态切分,读写分离,支付宝分库分表架构
php分库分表
Java+Springboot+mybatis+sharding jdbc 实现分库分表
spring动态数据源整合mybatis实现的分库分表操作。 分库分表对业务代码是透明的,只需要在配置文件分配分库模版即可动态的实现分库分表的增删改查操作。
[分库分表]面试题 pdf[分库分表]面试题 pdf[分库分表]面试题 pdf[分库分表]面试题 pdf[分库分表]面试题 pdf[分库分表]面试题 pdf[分库分表]面试题 pdf[分库分表]面试题 pdf[分库分表]面试题 pdf[分库分表]面试题 pdf...
一个MySQL分库分表php类。当一个表数据记录过大时...一般而言,分库分表属于水平分割,按照一定的规则将数据插入到不同的表中去。而分库则可以很方便的转移数据库的压力,比如将一个很大库的分 别放在不同的服务器上。
数据库分库分表中间件实践,降低单机负载 降低单点故障带来的影响 提高读写的性能
分库分表_基于当当jdbc-sharding,分库分表_基于当当jdbc-sharding
通过使用sharding-jdbc分库分表,以及多数据源的切换
MySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库分表课件.zipMySQL分库...
这个PPT由浅入深,从很少的用户到千万级别的用户,告诉你为什么要使用分库分表,包括垂直和水平切分,偏入门的理论,代码基本无
MySQL 分库分表的实现原理及演示案例,非常不错,可以看看
功能: 通过配置文件以及sql模板文件自动生成 分库分表,单库分表的sql脚本 最新更新: 1、支持分库不分表的脚本生成 2、修正重复索引报错问题
Spring Boot ShardingSphere 分库分表 附代码
水平拆分数据分库和分表的核心问题是表的ID唯一,然后根据唯一的ID映射到一个物理存储位置,这个映射方案要考虑到满足数据量暴增线性扩展和业务上容易保持一致,本文主要讨论分库分表如何映射的问题。
基于mycat1.6.5改进 同时支持分库分表
Spring MVC +Spring + Mybatis 构建分库分表源码 ,mybatis分库分表源码