`
xmong
  • 浏览: 263363 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

切分数据库

阅读更多

切分数据库


目录
1 简介 1
1.1 切分数据库 1
2 切分数据库表 1
2.1 垂直切分数据库表 1
2.2 水平切分数据库表 1



1 简介
1.1 切分数据库
在大中型项目中,在数据库设计的时候,考虑到数据库最大承受数据量,通常会把数据库或者数据表切分为多个,以降低单个库,单个表的压力。数据库常用的切分方法无非分为垂直切分和水平切分两种。

2 切分数据库表
我们都知道数据库的存储本质其实就是文件数据的存储,试想一下我们要获取一条数据,是在大文件中扫描查取快还是在小文件中扫描查取快,无疑是后一种更快。切分的目的本质就是将大文件数据更改为小文件数据存储。

2.1 垂直切分数据库表
在设计数据库表时往往我们都会根据需求抽象出对象数据,根据范式设计数据库表,这只是一个简单粗略的数据库表设计,不能真正的满足我们的业务需求,健壮的数据库设计不只是满足简单的功能需求,还要考虑到后期的扩展,数据量,性能等问题。
如假设我们从需求提炼设计了一张粗略的用户表,
用户表信息有:ID,姓名,年龄,性别,身份证号,住址。。。
正如上面所见,这样设计数据库表会导致下面问题,
(1) 如果我们将所有用户信息放在一张表中,那么每增加一个用户就会在用户表中增加一条记录数据,随着用户量的增加用户表记录越来越大,导致查取用户数据性能下降。
(2) 在需求中往往只需要获取部分用户信息(如用户名,性别),其他信息只有在查看用户详细信息时才需要获取(如年龄,身份证号,住址等),同时用户信息只有一部分是必须的,其他信息是可选的,这会导致很多字段会存在空存储的现象,而数据库在存取的时候会对空数据和一些不必要的数据进行处理,导致一些性能下降。
解决方案是可以对用户表进行垂直切分,即将大表改小表,将一些不常用、不必要的信息提取出来放在另一张用户详细信息表中关联起来。这样的垂直切分即将一张大用户表改为两张小表。
用户信息表:ID,姓名,性别。
用户详细信息表,ID,年龄,身份证号,住址。。。

2.2 水平切分数据库表
由上面可知垂直切分数据库表可以解决数据库部分性能问题,可是伴随着用户量的增加,也会达到一张数据库表的性能接受范围。为了解决该问题我们还是需要对表进行水平切分,即将一张表水平切分成多个表段(小表)。
我们可以根据需求定量每张表的数据量(N)和预估最大用户数据量(M)来确定分表量(D)。D=M/N,如我们预估将来会有100亿用户,每张表最大定量为100万,那么需要1万张分表来存储用户信息,则我们可以保留用户表user_xxxx四位来扩展用户分表名。
如我们可以根据用户增长ID将前100万的用户信息存储在user_0000表中,将100万到200万的用户存储在user_0001表中。。。以此类推。。。可以将100亿用户存储在这1万张用户表中。当然一个库也不可能存储1万张用户表,这时候也可以根据同样的原理来根据片键来切分数据库。





分享到:
评论

相关推荐

    数据库水平切分的实现原理解析

    水平切分数据库是一种常见的解决策略,它通过将数据分散到多台机器上,有效降低了单台数据库的压力,增强了系统的可用性。 水平切分,又称分片(Sharding),是一种数据分区方法,将数据按照一定的规则分布到多个...

    为什么要引入数据库中间件

    当我们切分数据库时,原本可以支持的功能现在需要 base-service 层来特殊处理。例如,一些数据需要路由到特定的水平切分库,一些数据不确定落在哪一个水平切分库,需要访问所有库,一些数据需要访问全局的库,拿到...

    数据库切分

    数据库切分,也被称为数据库分区或分片,是大型分布式系统中常见的数据库优化策略,用于应对数据量持续增长带来的性能挑战。它通过将一个大型数据库分解为多个较小、更易管理的部分,分布在不同的服务器上,从而提高...

    实现数据库水平切分的两个思路

    水平切分数据库:可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失; 负载均衡策略:可以降低单台机器的访问负载,降低宕机的可能性; 集群方案:解决了数据库宕机带来的单点数据库不能访问的问题; ...

    mysql海量数据存储和访问解决方案

    水平切分数据库,可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失。通过负载均衡策略,有效的降低了单台机 器的访问负载,降低了宕机的可能性;通过集群方案,解决了数据库宕机带来的单点数据库不能...

    数据库表的垂直切分与水平切分

    ### 数据库表的垂直切分与水平切分详解 #### 一、引言 随着互联网技术的迅猛发展,海量数据的处理成为系统架构设计中的一大挑战。为了应对日益增长的数据量,提高系统的可扩展性和性能,数据库表的切分技术变得尤为...

    数据库Sharding的基本思想和切分策略

    ### 数据库Sharding的基本思想和切分策略 #### 一、基本思想 **Sharding**,也称为数据库分片,是一种提高数据库性能和扩展性的技术手段。它的核心思想是将一个大型数据库分解成多个较小的部分(称为分片或shard)...

    MyCat权威指南 v1.6.0

    **数据库切分**主要是指将一个大的数据库逻辑上或者物理上分成若干个小的部分,每个部分存储在一个独立的数据库服务器上。这种做法可以显著提升系统处理能力,降低单个服务器的压力,是分布式数据库系统中的核心技术...

    轻量级分布式数据访问层CobarClient.zip

    主要特性:可以支持垂直和水平数据切分数据库集群的访问;支持双机热备的HA解决方案, 应用方可以根据情况选用数据库特定的HA解决方案(比如Oracle的RAC),或者选用CobarClient提供的HA解决方案.小数据量的数据集计...

    2018年上海高级Java面试题目1

    在数据库分库分表中,水平分库可以水平切分数据库,垂直分库可以垂直切分数据库,分表可以将大表切分为小表。 Spring框架 Spring框架是Java中的一种常用的框架,提供了IOC、AOP、MVC等功能。面试官可能会问到Spring...

    基于MyBatis的数据库切分框架,可实现数据的水平切分和垂直切分

    数据库切分是应对大数据场景下性能瓶颈的一种常见解决方案。它通过将数据水平或垂直拆分到多个数据库节点上,从而提高系统的并发处理能力和存储能力。您提供的 demo 使用了 MyBatis 这一流行的 ORM 框架,实现了数据的...

    分布式存储技术及应用.pdf

    垂直扩展是按照功能切分数据库,将不同功能的数据,存储在不同的数据库中,而水平扩展是按照数据行来切分,将表中的某些行切分到一个数据库中,而另外的某些行又切分到其他的数据库中。 实际应用中,图 1 是为核...

Global site tag (gtag.js) - Google Analytics