数据库的水平划分和垂直划分很早以前就接触了,只是没有实践,没有什么体会,只有最近两年才有接触,今天也和大家聊聊。

垂直划分

按照功能划分,把数据分别放到不同的数据库和服务器。

当一个网站开始刚刚创建时,可能只是考虑一天只有几十或者几百个人访问,数据库可能就个db,所有表都放一起,一台普通的服务器可能就够了,而且开发人员也非常高兴,而且信心十足,因为所有的表都在一个库中,这样查询语句就可以随便关联了,多美的一件事情。但是随着访问压力的增加,读写操作不断增加,数据库的压力绝对越来越大,可能接近极限,这时可能人们想到增加从服务器,做什么集群之类的,可是问题又来了,数据量也快速增长。

这时可以考虑对读写操作进行分离,按照业务把不同的数据放到不同的库中。其实在一个大型而且臃肿的数据库中表和表之间的数据很多是没有关系的,或者更加不需要(join)操作,理论上就应该把他们分别放到不同的服务器。例如用户的收藏夹的数据和博客的数据库就可以放到两个独立的服务器。这个就叫垂直划分(其实叫什么不重要)。

当博客或者收藏夹的数据不断增加后,应该怎么办,这样就引出了另外一个做法,叫水平划分。

水平划分

则把一个表的数据划分到不同的数据库,两个数据库的表结构一样。怎么划分,应该根据一定的规则,可以根据数据的产生者来做引导,上面的数据是由人产生的,可以根据人的id来划分数据库。然后再根据一定的规则,先获知数据在哪个数据库。

其实很多大型网站都经历了数据库垂直划分和水平的划分的阶段。其实这个可以根据经验来确定,不一定由某些硬性的规则。

以刚才的博客为例,数据可以根据userid的奇偶来确定数据的划分。把id为基数的放到A库,为偶数的放B库。

这样通过userId就可以知道用户的博客的数据在哪个数据库。其实可以根据userId%10来处理。还可以根据著名的HASH算法来处理。

当初看手机之家的架构是发现他们是:

水平切分:对数据进行水平分割。

a.最好分到同一个数据库。

b.一种已经证明是切实可行的方案:主表+辅表。

c.有3种类型:主表不打散、主表打散无辅表、主表打散有辅表。

d.但对程序员来说,TA看到的只是一张表,不妨称之为虚表(逻辑表)? ,这张虚表实际上可能是由N张实表(物理表)组成的。

哈哈,我还是喜欢把数据分到不同的数据库,这个可以按照业务来和环境来定吧。

在说句题外话,如果是大型数据库,还可以做读写分离等。

转载于:https://blog.51cto.com/gswxr/716009

数据库的垂直划分和水平划分相关推荐

  1. 数据库的垂直拆分和水平拆分

    2019独角兽企业重金招聘Python工程师标准>>> 当我们使用读写分离.缓存后,数据库的压力还是很大的时候,这就需要使用到数据库拆分了. 数据库拆分简单来说,就是指通过某种特定的 ...

  2. 数据库的垂直切分和水平切分

    数据切分可以是物理上的,对数据通过一系列的切分规则将数据分布到不同的DB服务器上,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负 ...

  3. 越区切换技术从层次网络上可以划分为水平切换和垂直切换,其中水平切换又可以分为硬切换、软切换、接力切换。

    一.越区切换阐述 当移动台从一个小区(指基站或者基站的覆盖范围)移动到另一个小区时,为了保持移动用户的不中断通信需要进行的信道切换称为越区切换. 越区切换技术从层次网络上可以划分为水平切换和垂直切换, ...

  4. Mycat实现垂直拆分与水平拆分

    垂直拆分(分库) 一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类, 分布到不同 的数据库上面,这样也就将数据或者说压力分担到不同的库上面,如下图: 系统被切分成:用 ...

  5. 数据切分 垂直切分、垂直拆分与水平拆分的优缺点

    数据切分 垂直切分 关于数据库的水平切分和垂直切分的一些概念垂直拆分垂直拆分就是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的.当一个网站还在 ...

  6. Mysql 扩展性设计之数据切分、那么数据切分后会带来哪些问题呢?比如分布式事务、数据的一致性、垂直切分和水平切分应用场景

    Mysql 扩展性设计之数据切分.那么数据切分后会带来哪些问题呢?比如分布式事务.数据的一致性.垂直切分和水平切分应用场景 前言.什么是数据切分 垂直(纵向)切分.水平(横向)切分.他们各自的特点 垂 ...

  7. 渗透测试-越权漏洞之垂直越权和水平越权

    越权漏洞之垂直越权和水平越权 文章目录 越权漏洞之垂直越权和水平越权 前言 一.什么是越权漏洞以及漏洞产生的原因 1. 什么是越权漏洞 2. 漏洞产生的原因 二.水平越权和垂直越权以及防御方法 1.水 ...

  8. 大型网站之存储瓶颈(数据库的垂直拆分)

    原文:http://blog.jobbole.com/83768/ 一.简介 数据库的垂直拆分是一个粗粒度的拆分数据,它主要是将原来在一个数据库下的表拆分到不同的数据库里,水平拆分粒度比垂直拆分要更细 ...

  9. Mysql 分表 垂直分割_图文解释 读写分离、垂直拆分、水平拆分、分库分表

    1. 前言 相信你经常被 读写分离.垂直拆分.水平拆分.分库分表 这几个名词搞得很懵逼.我有时候也很懵逼,那么今天就来把这几个数据库常用术语搞清楚,同时也记录一下. 2. 读写分离 这个相对比较好理解 ...

最新文章

  1. phpMyAdmin操作之改管理员密码
  2. 一个递归函数的漏洞及优化
  3. Jenkins 无法捕获构建脚本错误问题
  4. canvas剪辑区域
  5. ASP.NET Core 中使用IHttpClientFactory发出HTTP请求
  6. c# nat udp转发
  7. scala 基础入门
  8. juniper防火墙命令大全(中文)
  9. MySQL索引失效的11种情况
  10. Python练手小程序—生成优惠券码写入mysql数据库中
  11. sql查询_SQL查询
  12. 未分配虚拟网络-清理注册表
  13. Docker系列之五:Docker 三剑客之 Docker Swarm
  14. php 微信开发实战pdf,微信开发实战之模块化的实例详解
  15. Linux命令入门教程(一):命令简介与初识
  16. PCIE调试笔记理解--TLP理解
  17. 解决linux上的Give root password for maintenance问题
  18. 个人电脑安全防范措施
  19. javaScript简单项目案例
  20. 缓冲区溢出攻击实验(深大计系2实验4)三题思路+答案

热门文章

  1. 量子力学工具箱再添利器—科学家提出高效驱动微型引擎概念
  2. 谷歌大脑提出对智能体进行「正向-反向」强化学习训练,加速训练过程
  3. 微软 CEO 纳德拉访谈:人工智能的大方向与未来是什么?
  4. 昆虫大脑帮助AI解决导航难题
  5. MCMC(二)马尔科夫链
  6. 三周第五次课(4月10日)
  7. Apache Camel 2.15.0 发布,Java 规则引擎
  8. SpringMVC_实现简单的增删改查
  9. vivo U1正式亮相
  10. 景观格局动态变化分析方法(基于ArcGIS、Fragstats、ENVI、ERDAS、Patch Analysis for ArcGIS) (2011-03-15 08:07:03)...