通过某种特定的条件,将存放在同一个数据库中的数据分散存放到多个数据库上,实现分布存储,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负载压力。
垂直(纵向)拆分:
按功能模块拆分,把数据分别放到不同的数据库和服务器。比如分为订单库、商品库、用户库...
通常我们按以下原则进行垂直拆分:
把【不常用的字段】单独放在一张表;
把【text,blob等大字段】拆分出来放在附表中;
经常组合查询的列放在一张表中;
水平(横向)拆分:
将同一个表的数据进行分块保存到不同的数据库/表中,这些数据库中的表结构完全相同。
实现原理:
使用垂直拆分,主要要看应用类型是否合适这种拆分方式,如系统可以分为,订单系统,商品管理系统,用户管理系统业务系统比较明的,垂直拆分能很好的起到分散数据库压力的作用。业务模块不明晰,耦合(表关联)度比较高的系统不适合使用这种拆分方式。但是垂直拆分方式并不能彻底解决所有压力问题,例如 有一个5000w的订单表,操作起来订单库的压力仍然很大,如我们需要在这个表中增加(insert)一条新的数据,insert完毕后,数据库会针对这张表重新建立索引,5000w行数据建立索引的系统开销还是不容忽视的,反过来,假如我们将这个表分成100个table呢,从table_001一直到table_100,5000w行数据平均下来,每个子表里边就只有50万行数据,这时候我们向一张只有50w行数据的table中insert数据后建立索引的时间就会呈数量级的下降,极大了提高了DB的运行时效率,提高了DB的并发量,这种拆分就是横向拆分
实现方法
垂直拆分:
拆分方式实现起来比较简单,根据表名访问不同的数据库就可以了。
水平拆分:
(1)顺序拆分:
如可以按订单的年份才分,2003年的放在db1中,2004年的db2,以此类推。当然也可以按主键拆分。
优点:可部分迁移
缺点:数据分布不均,可能2003年的订单有100W,2008年的有500W
(2)hash取模分
对user_id进行hash(或者如果user_id是数值型的话直接使用user_id的值也可),然后用一个特定的数字对user_id的hash值进行取模运算
比如应用中需要将一个数据库切分成4个数据库的话,我们就用4这个数字对user_id的hash值进行取模运算,也就是user_id%4,这样的话每次运算就有四种可能:结果为1的时候对应DB1;结果为2的时候对应DB2;结果为3的时候对应DB3;结果为0的时候对应DB4,这样一来就非常均匀的将数据分配到4个DB中。
优点:数据分布均匀
缺点:数据迁移的时候麻烦;
不能按照机器性能分摊数据
(3)在认证库中保存数据库配置
就是建立一个DB,这个DB单独保存user_id到DB的映射关系,每次访问数据库的时候都要先查询一次这个数据库,以得到具体的DB信息,然后才能进行我们需要的查询操作。
优点:灵活性强,一对一关系
缺点:每次查询之前都要多一次查询,会造成一定的性能损失。
相关推荐
### 数据库表的垂直切分与水平切分详解 #### 一、引言 随着互联网技术的迅猛发展,海量数据的处理成为系统架构设计中的一大挑战。为了应对日益增长的数据量,提高系统的可扩展性和性能,数据库表的切分技术变得尤为...
### 单KEY业务,数据库水平切分架构实践 #### 用户前台侧:“建立非uid属性到uid的映射关系”最佳实践 在面对大量的用户数据时,为了提高数据库系统的响应速度和处理能力,需要采取合适的数据库水平切分策略。水平...
数据库水平切分是一种应对大规模数据存储和高并发访问的有效架构策略。在传统的单库单表设计中,随着数据量的增长,数据库性能会显著下降。针对这种情况,"订单中心"业务作为一个典型的"多 key"类业务,需要进行...
1. **范围切分(Range Sharding)**:根据数值范围将数据分配到不同的数据库或表中,如按用户ID的数值范围进行分库。 2. **哈希切分(Hash Sharding)**:利用哈希函数将数据映射到特定的数据库或表中,以实现均匀...
数据库切分,也被称为数据库分区或分片,是大型分布式系统中常见的数据库优化策略,用于应对数据量持续增长带来的性能挑战。它通过将一个大型数据库分解为多个较小、更易管理的部分,分布在不同的服务器上,从而提高...
本文重点关注的是水平切分,即如何将表中的行数据均匀地分布在不同的数据库实例中,从而降低单个数据库实例的负载,并提高系统的整体性能。 ##### 2.2 关键技术 1. **分库**:指将数据按照一定的规则分布到多个...
数据库切分是应对大数据场景下性能瓶颈的一种常见解决方案。它通过将数据水平或垂直拆分到多个数据库节点上,从而提高系统的并发处理能力和存储能力。您提供的 demo 使用了 MyBatis 这一流行的 ORM 框架,实现了数据的...
传统关系型数据库由于缺乏扩展性,在面对大数据时存在巨大的缺陷,但是关系模型、事务机制对于大部分系统又不必不可少,目前业界主流的做法就是将传统数据库进行切分(包括垂直切分、水平切分等),提高数据库的可...
水平切分数据库:可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失; 负载均衡策略:可以降低单台机器的访问负载,降低宕机的可能性; 集群方案:解决了数据库宕机带来的单点数据库不能访问的问题; ...
### 数据库Sharding的基本思想和切分策略 #### 一、基本思想 **Sharding**,也称为数据库分片,是一种提高数据库性能和扩展性的技术手段。它的核心思想是将一个大型数据库分解成多个较小的部分(称为分片或shard)...
数据库水平切分是一种应对大数据量的有效策略,尤其在大中型项目中,为了防止单个数据库或表压力过大,通常采用这种方法。水平切分的基本思想是将数据分散到多个具有相同结构的表中,以此来分摊存储和查询压力。 在...
数据库切分理论 数据库切分是指将大型数据库分成多个小型数据库的过程。这种技术可以提高数据库的性能和可扩展性。有两种方式可以对数据库进行切分:垂直切分和水平切分。 垂直切分 垂直切分是指将数据库按照功能...