`

数据库的垂直划分和水平划分

阅读更多

转至:http://liriguang.iteye.com/blog/625309

总结:具体划分得看具体业务,报表需求,分页,模糊查询,数据量大小等等

垂直划分 


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


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


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


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

 

水平划分

 

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

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

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




 


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

 

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

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

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

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

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

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

 

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

 

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

 

分享到:
评论

相关推荐

    数据库垂直拆分与水平拆分概念

     垂直拆分是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一起,当网站...

    分布式数据库系统-复习.doc

    水平分片 垂直分片 混合分片 分布式数据库中的数据分布策略有: 、 、 和 四层。 集中式 分割式 复制式 混合式 分布式数据库是多层模式结构,一般划分为 、 、 和 四层。 全局外层 全局概念层 局部概念层 局部内层 ...

    Java数据库编程宝典3

    第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...

    面向垂直划分数据库的隐私保护分布式聚类算法 (2008年)

    针对垂直划分的分布式数据库提出了一种基于隐私保护的分布式聚类算法PPDC-VP,该算法基于K-Means的思想实现分布式聚类。并且聚类过程中应用扰乱技术保护本站点真实信息不被传送到其它站点,从而达到隐私保护的目的。...

    高级数据库系统习题答案.docx

    划分表中的内容表达的是应用系统潜在的垂直分片规则。 查询表达式的运算有两种方法,分别是流水线方法和实体化方法 事务的持久性是指事务一旦成功执行,它对数据库施加的更新就是永久的,即使系统出现故障也不会改变...

    向外扩展SQL Server 实现更高扩展性

    使用水平数据划分,数据库结构在数据库实例方面没有变化。通常,数据库之间唯一的不同在于实例包含的数据不同。开发出中间层应用程序,使得实例间的数据得到适当维护,是这种解决方案的特点。可能很难决定如何在...

    Java数据库编程宝典2

    第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...

    Java数据库编程宝典1

    第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...

    CH3 分布式数据库的设计

    在系统设计中,最基本问题就是分布式数据库的分布问题,即如何对分布式数据库进行逻辑划分和实际物理分配。数据的逻辑划分称数据分片。本章主要针对数据分布进行介绍,以关系数据库为例来说明。 两种设计策略( Top-...

    分布式数据库的设计与实现.doc

    (2)在全局数据与教务处、总务处等各部门之间,数据是按照其应用功能来划分的,所 以采用了垂直分片的方式。在数据库服务器与web数据库服务器的数据关系中,情况也是 相同,也采用了垂直分片的方式。 3、数据库...

    Java数据库编程宝典4

    第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式...

    分布式数据库系统复习材料.doc

    分片、分布处理、授权、事务恢复等的必要信息 17、数据分片有三种基本方法:水平分片、垂直分片、混合分片 18、定义各类片段要遵守的规则:完备性条件、可重构条件、不相交条件 19、所谓数据分布是指分布式数据库中...

    数据库应用设计.doc

    分裂的方法有水平分裂和垂直分裂两种, 其中水平分裂是依据实体的(某个属性取值)将一个实体分解为若干个实体。 7、利用ER方法进行数据库概念设计时,一般分三步进行:首先设计局部ER模式,然后将 各局部ER模式综合...

    高级数据库课后习题答案

    (2) 解释关系数据库系统中关系表与文件的关系。 (3) 如果有一个大文件需要频繁执行顺序扫描,那么,为该文件选择哪种页存储方式最合适? (4) 分别描述持久化指针解引用(dereference)和指针混写的这两个基本...

    第七章-分布式数据库系统.docx

    分片的方式主要有下面三种: (1) 水平分片:按一定的条件把全局关系的所有元组划分成若干不相交的子集,每个子集为关系的一个片段。 (2) 垂直分片:把一个全局关系的属性集分成若干子集,并在这些子集上做...

    分布式数据库系统体系结构.pdf

    2)分布式数据库系统体系结构 数据存储 分布式数据储存分为数据分布和数据分⽚。 数据分布: 数据分布也称为"数据分配",是指数据在计算机⽹络各场地上的分配策略。数据的分配策略主要有: 1. 集中式:所有数据均...

    分布式数据库设计.pdf

    分布式数据库设计 分布式数据库设计 DDB设计的两个问题 1)分段 – 分割关系成"段" ;逻辑上 2)分配 – 将段置放到站点 ;物理存储上 ⽬标 – 优化响应时间/吞吐量/费⽤/… 分段元则 假若有全局关系R 被分段为⼦...

    MySQL数据库优化之分表分库操作实例详解

    垂直拆分就是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一起,当网站不断...

    基于springboot+html的超市进存销管理系统.zip

    它支持水平扩展(如通过分片、复制等技术)和垂直扩展(如增加硬件资源),以应对大规模数据存储和高并发访问的需求。 安全性与管理工具 MySQL提供了一系列安全措施,如用户账户管理、访问权限控制、SSL/TLS加密...

Global site tag (gtag.js) - Google Analytics