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

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

阅读更多


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


垂直划分 


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


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


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


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

 

水平划分

 

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

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

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




 


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

 

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

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

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

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

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

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

 

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

 

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

 

  • 大小: 21 KB
  • 大小: 8.9 KB
23
2
分享到:
评论
21 楼 lirig 2012-11-14  
zyz251314 写道
soleghost 写道
垂直分库-->水平分库-->读写分离

垂直分库:按照业务垂直划分。比如:可以按照业务分为资金、会员、订单三个数据库。需要解决的问题:跨数据库的事务、jion查询等问题。
水平分库:按照规则划分,一般水平分库是在垂直分库之后的。比如每天处理的订单数量是海量的,可以按照一定的规则水平划分。需要解决的问题:数据路由、组装。
读写分离:对于时效性不高的数据,可以通过读写分离缓解数据库压力。需要解决的问题:在业务上区分哪些业务上是允许一定时间延迟的,以及数据同步问题。



我首先想问下   当垂直划分的时候   我的订单数据里面关联了会员信息,当页面要显示会员信息该怎么办?  我是应该在订单数据库里面做数据冗余还是关联查询,或者还有其他什么更好的方式呢?

不会关联查询,一般会员信息会写到缓存中。或者一次性查询多个
20 楼 zyz251314 2012-11-10  
soleghost 写道
垂直分库-->水平分库-->读写分离

垂直分库:按照业务垂直划分。比如:可以按照业务分为资金、会员、订单三个数据库。需要解决的问题:跨数据库的事务、jion查询等问题。
水平分库:按照规则划分,一般水平分库是在垂直分库之后的。比如每天处理的订单数量是海量的,可以按照一定的规则水平划分。需要解决的问题:数据路由、组装。
读写分离:对于时效性不高的数据,可以通过读写分离缓解数据库压力。需要解决的问题:在业务上区分哪些业务上是允许一定时间延迟的,以及数据同步问题。



我首先想问下   当垂直划分的时候   我的订单数据里面关联了会员信息,当页面要显示会员信息该怎么办?  我是应该在订单数据库里面做数据冗余还是关联查询,或者还有其他什么更好的方式呢?
19 楼 soleghost 2010-04-07  
垂直分库-->水平分库-->读写分离

垂直分库:按照业务垂直划分。比如:可以按照业务分为资金、会员、订单三个数据库。需要解决的问题:跨数据库的事务、jion查询等问题。
水平分库:按照规则划分,一般水平分库是在垂直分库之后的。比如每天处理的订单数量是海量的,可以按照一定的规则水平划分。需要解决的问题:数据路由、组装。
读写分离:对于时效性不高的数据,可以通过读写分离缓解数据库压力。需要解决的问题:在业务上区分哪些业务上是允许一定时间延迟的,以及数据同步问题。
18 楼 jd2bs 2010-04-07  
对于报表需求的话 仅用垂直划分就很杯具了

很多应用 刚开始几年没人关心报表 后来提出来的概率还是挺大的

这种情况一般 要用到专门的report DB
数据由后台job 异步生产

17 楼 mercyblitz 2010-04-05  
javafan_303 写道
想问下,数据库的水平切分和数据库的分区有什么不同?我怎么感觉分区就是实现的水平切分的功能啊~~

分区类似,分区是数据库实现的,技术性的。水平分库是策略性的。
16 楼 mercyblitz 2010-04-05  
hongkong 写道
水平划分,比如100W条记录的数据表,按规则命名成不同的表(放在同一数据库)
以减少数据量,是这样吧。
分到不同的库感觉没什么必要

有必要,数据库可放置在不同的存储媒介,这样,单点的IO就减少了。
15 楼 mercyblitz 2010-04-05  
banfry 写道
假如客户信息水平分布在不同的库中,那在统计客户总数、模糊查询客户的时候怎么处理呢?


分页查找。类似这种客户总数的统计信息一致性要求不是那个强,因此可以离线查询或者单独保存。
14 楼 hell_liul 2010-04-05  
我有个疑问哈?就是如果采用集群,为什么数据量就会增长呢?
13 楼 seu_yong 2010-04-04  
感觉垂直划分还好,毕竟是不同的业务数据。但是水平划分的话,一旦确定划分依据之后,经常出现划分规则只能满足绝大部分的业务需求,但是还是会有些业务功能无法很方便的实现,所需的数据可能分步在所有分表上,通过数据聚合的方式实现又有性能上的问题,特别是那种分页查询。请教下老大是否也会遇到这种问题?是否有比较好的解决方案啊?
12 楼 javafan_303 2010-04-02  
想问下,数据库的水平切分和数据库的分区有什么不同?我怎么感觉分区就是实现的水平切分的功能啊~~
11 楼 lirig 2010-03-31  
banfry 写道
假如客户信息水平分布在不同的库中,那在统计客户总数、模糊查询客户的时候怎么处理呢?

水平划分的数据的规则要根据客户来划分。可以邮件或者QQ我:814562275
10 楼 banfry 2010-03-31  
假如客户信息水平分布在不同的库中,那在统计客户总数、模糊查询客户的时候怎么处理呢?
9 楼 lirig 2010-03-29  
hongkong 写道
水平划分,比如100W条记录的数据表,按规则命名成不同的表(放在同一数据库)
以减少数据量,是这样吧。
分到不同的库感觉没什么必要


应该是这样的:一个业务数据库中其中有些表的数据到达几十个亿后,而且每天访问压力也过大,这样就把原来的数据根据一定的规则分成两个或者多个库,表结构一样,很明确,访问压力从原来的一个库变成几个库,这样也减轻了。而且是多个服务器,io也减少了。
8 楼 hongkong 2010-03-29  
水平划分,比如100W条记录的数据表,按规则命名成不同的表(放在同一数据库)
以减少数据量,是这样吧。
分到不同的库感觉没什么必要
7 楼 mathfox 2010-03-29  
请问你说水平划分 和 oracle hash分区有什么区别吗?
6 楼 lirig 2010-03-28  
国内很多网站都按照业务把数据库分开,不过分开后还会按照水平再分,按照水平分后可能还得进行读写分离,读写分离还要考虑能不能起到恰到好处的作用。
5 楼 scholers 2010-03-28  
大型网站的垂直划分是比较多的,比如阿里的很多网站。
4 楼 weiruan85 2010-03-28  
淘宝貌似就有读写分离
3 楼 xieye 2010-03-28  
期待更多文章
2 楼 hengstart 2010-03-28  
说的好,我要收藏了!

相关推荐

    数据库中的水平分割和垂直分割

    在大型系统中,为了优化性能、管理和维护,经常会使用到两种数据分割技术:水平分割和垂直分割。这两种策略各有优势和适用场景,但也会带来相应的挑战。 **1. 水平分割** 水平分割,也称为分片(Sharding),是将...

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

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

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

    在实际应用场景中,往往会将垂直切分和水平切分结合起来使用,以达到最优的效果。 **联合使用策略:** 1. **先垂直后水平**:首先根据业务逻辑进行垂直切分,将表按功能模块分类;然后在每个模块内部,根据数据量...

    设计高性能数据库[优化数据库结构]

    本文将详细介绍通过优化数据库结构来提高数据库性能的方法,包括分离用户数据库与系统数据库、创建数据库表分区(垂直分表和水平分表)以及合理部署数据库对象等策略。 #### 二、分离用户数据库与系统数据库 在...

    分布式数据库 第三章 分布式数据库的设计

    分布式数据库设计是指如何将分布式数据库系统中的数据进行逻辑划分和实际物理分配,以满足不同的业务需求和应用场景。在本章中,我们将讨论分布式数据库设计的基本概念、设计策略、分片定义、水平分片、垂直分片、分...

    数据库的物理设计教程资料

    数据划分可以水平划分和垂直划分两种方式。水平划分是指根据课程容量将相关的表划分成三个子表,以便排课。垂直划分是指将Course_schema表划分成两个子表,一个是course_name和course_location,另一个是course_name...

    分布式数据库课后习题答案整理

    分布式数据库系统是一个物理上分散而逻辑上集中的系统,它使用计算机网络将地理位置分散而管理和控制又需要不同程度集中的多个逻辑单位(通常是集中式数据库系统)连接起来,共同组成一个统一的数据库系统。...

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

    综上所述,数据库Sharding通过将数据分散到多个服务器上来提高性能和可扩展性,其核心在于合理规划垂直和水平切分策略,以及妥善处理数据分布和一致性问题。正确实施Sharding策略可以帮助企业应对大数据时代的挑战,...

    全国计算机等级考试数据库技术三级

    在分片透明性、水平分片、垂直分片和导出分片的概念下,分布式数据库系统由局部数据库管理系统、全局数据库管理系统、全局数据字典和通信管理组成。 总的来说,全国计算机等级考试数据库技术三级涵盖了数据库设计、...

    腾讯云分布式数据库解决方案

    垂直切分(分库)是按照业务功能对数据库进行划分,例如电商平台将会员、商品、交易、物流等不同功能的数据存储在不同的数据库实例中。而水平切分(分表)则是将单一数据库表中的数据根据某种规则,分散存储到多个...

    数据库分库分表(sharding)的技术

    **垂直与水平联合切分**结合了垂直切分和水平切分的优点,是一种更为灵活和高效的解决方案。例如,可以先按照功能模块将表进行垂直切分,然后再对某些高访问量的表进行水平切分。 - **优点**: - 兼顾了垂直切分和...

    头豹研究院-分布式数据库技术系列概览:分布式数据库核心技术发展趋势.rar

    分片策略有垂直分片(按列划分)和水平分片(按行划分),可以根据业务需求灵活选择。 2. **一致性模型**:在分布式环境中,数据的一致性是关键挑战。常见的模型有强一致性、最终一致性、因果一致性等。随着CAP理论...

    SQL数据库技术架构变革.pptx

    总结来说,SQL数据库技术架构的变革主要包括了数据库的结构优化,如垂直拆分和水平扩展,以及监控和性能管理的升级,通过引入自动化和智能化的工具,提高了系统的稳定性和扩展性。此外,对SQL的审查和优化进一步保证...

    [详细完整版]分布式数据库.doc

    例如,学生需要理解不同类型的分片(水平、垂直、混合),掌握查询处理器的工作原理,学习如何优化分布式查询,以及熟悉各种事务管理和恢复协议,如两段提交协议。 此外,课程还引入了实际案例,如Oracle的分布式...

    数据存储技术在分布式数据库中的应用.pdf

    划分储存又分为水平划分和垂直划分,其中水平划分是指将整体的关系分割成若干个较小的关系或分片,而垂直划分则要求各分片是原始关系的无损连接分解。 在水平划分中,原始关系被逐部分分离,形成多个分片,每个分片...

    分布式数据库设置

    ### 分布式数据库设置 ...通过采用分布式数据库的部署策略,特别是水平分片和垂直分片的方法,可以显著提高数据库系统的性能和可扩展性。本案例中所涉及的具体步骤和技术细节对于实际应用具有重要的参考价值。

    分布式数据库论文:系统分布式数据库的设计

    2. **片段设计**:确定如何将全局关系分片,可以是水平分片(按元组划分)、垂直分片(按属性划分)或混合分片(两者结合)。 3. **片段分配设计**:决定片段如何映射到物理存储,包括非冗余分配(每个片段只存在于...

    东北大学申德荣分布式数据库系统原理与应用讲义

    设计分布式数据库时,需要考虑数据的划分策略,如水平分割(按记录分)和垂直分割(按字段分)。此外,还要考虑数据的复制策略,包括无复制、单主复制或多主复制,每种都有其优缺点。在设计过程中,还需要考虑事务...

Global site tag (gtag.js) - Google Analytics