http://www.cnblogs.com/shijingxiang/articles/4601674.html
在数据库操作中,我们常常会听说这两个词语:水平分割和垂直分割。那么到底什么是数据库的水平分割,什么是数据库的垂直分割呢?本文我们就来介绍一下这部分内容。
1、水平分割:
按记录进分分割,不同的记录可以分开保存,每个子表的列数相同。
水平分割通常在下面的情况下使用:
A 表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度。
B 表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用。
C需要把数据存放到多个介质上。
例如法规表law就可以分成两个表active-law和 inactive-law。activea-authors表中的内容是正生效的法规,是经常使用的,而inactive-law表则使已经作废的法规,不常被查询。水平分割会给应用增加复杂度,它通常在查询时需要多个表名,查询所有数据需要union操作。在许多数据库应用中,这种复杂性会超过它带来的优点,因为只要索引关键字不大,则在索引用于查询时,表中增加两到三倍数据量,查询时也就增加读一个索引层的磁盘次数。
2、垂直分割:
按列进行分割,即把一条记录分开多个地方保存,每个子表的行数相同。
把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。如果一个表中某些列常用,而另外一些列不常用,则可以采用垂直分割,另外垂直分割可以使得数据行变小,一个数据页就能存放更多的数据,在查询时就会减少I/O 次数。其缺点是需要管理冗余列,查询所有数据需要join操作。
例如有表T1
id name qty
--------------
1 p1 10
2 p2 20
3 p3 30
4 p4 40
......
......
垂直分割就是按列进行分割,即把一条记录分开多个地方保存,每个子表的行数相同。
例如表T1,可以把id和name放到数据文件p1,把qty放到数据文件p2。
水平分割就是按记录进分分割,不同的记录可以分开保存,每个子表的列数相同。
像表T1,可以把id为单数的放到数据文件P1,双数的放到数据文件P2。
表散列与水平分割相似,但没有水平分割那样的明显分割界限,它由哈希函数和键值决定一条记录的保存文件,这样是为了IO更加均衡。
关于数据库的垂直分割与水平分割的知识就介绍到这里了,希望本次的介绍能够对您有所收获!
http://database.51cto.com/art/201108/282431.htm
数据库水平拆分和垂直拆分区别(以mysql为例)
案例:
简单购物系统暂设涉及如下表:
1.产品表(数据量10w,稳定)
2.订单表(数据量200w,且有增长趋势)
3.用户表 (数据量100w,且有增长趋势)
以mysql为例讲述下水平拆分和垂直拆分,mysql能容忍的数量级在百万静态数据可以到千万
垂直拆分:
解决问题:
表与表之间的io竞争
不解决问题:
单表中数据量增长出现的压力
方案:
把产品表和用户表放到一个server上
订单表单独放到一个server上
水平拆分:
解决问题:
单表中数据量增长出现的压力
不解决问题:
表与表之间的io争夺
方案:
用户表通过性别拆分为男用户表和女用户表
订单表通过已完成和完成中拆分为已完成订单和未完成订单
产品表 未完成订单放一个server上
已完成订单表盒男用户表放一个server上
女用户表放一个server上(女的爱购物 哈哈)
分享到:
相关推荐
总结来说,基于MyBatis的数据库拆分和读写分离实现,涉及到对MyBatis框架的深入理解和扩展,包括对SqlSessionTemplate的改造、数据库拆分策略的设计(如垂直拆分和水平拆分的一致性哈希)、以及读写分离的路由机制。...
垂直拆分是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一起,当网站...
综上所述,水平拆分和垂直拆分都是有效提升数据库性能的手段。特别是在流量大、数据量大的情况下,采用垂直拆分能够显著提高系统效率。通过合理规划拆分策略,如将访问频率高的字段放在主表,可以最大化利用内存缓存...
Mycat 是一种数据库中间件,位于 Java 应用程序和数据库之间,主要功能包括读写分离、数据分片(垂直拆分和水平拆分)、多数据源整合等。下面是 Mycat 的详细搭建过程: 一、 Mycat 概述 Mycat 是一种数据库中间件...
本文将详细介绍数据库中的分表分库技术,特别是垂直拆分和水平拆分两种主要方式。 #### 一、分表分库概述 分表分库是指将一个大的数据表或数据库拆分成多个较小的数据表或数据库的过程。这种做法能够有效提升...
数据库拆分分为垂直拆分和水平拆分。垂直拆分是根据功能模块将表分布到不同数据库,例如将群组相关表与照片相关表分开,这种方式简单但可能无法完全解决问题。相比之下,水平拆分是将同一表的数据分割到多个数据库中...
MySQL 数据库在面对大规模数据存储时,为了保持良好的性能和可管理性,常常需要对表进行拆分,即垂直拆分和水平拆分。这两种拆分策略分别针对数据的不同维度进行优化。 **垂直拆分** 垂直拆分是基于列的拆分方式,...
本篇笔记主要探讨了MySQL数据库的拆分技术,包括CAP原则、可扩展性原则以及垂直拆分和水平拆分的实践。 首先,CAP原则是分布式系统设计的基础,它指出任何分布式系统只能同时满足一致性(C)、可用性(A)和分区...
它通过将数据水平或垂直拆分到多个数据库节点上,从而提高系统的并发处理能力和存储能力。您提供的 demo 使用了 MyBatis 这一流行的 ORM 框架,实现了数据的水平切分和垂直切分。 在水平切分中,您可能使用了诸如 ...
分布式MySQL数据库中间件是应对大数据量、高并发场景下的解决方案,它通过将单一数据库扩展到多个物理节点,实现数据的水平或垂直拆分,以提高系统的处理能力和可用性。在这个主题中,我们将深入探讨分布式MySQL...
Mycat是一种流行的数据库中间件技术,支持分库分表,主要用于解决数据库水平拆分的问题。下面是对Mycat数据库中间件技术的总结: 数据库切分理论 数据库切分是指将大型数据库分成多个小型数据库的过程。这种技术...
水平拆分是将同一表的数据分散到多个数据库中,而垂直拆分则是根据业务功能将数据库中的不同表分配到不同的数据库。 **阶段七:数据库的水平/垂直拆分** 最后,数据库的拆分是应对大规模并发的关键策略。水平拆分...
常见的拆分方式包括水平拆分和垂直拆分。 ##### 水平拆分 水平拆分是指将一张大表按照某种规则拆分成多张表,每张表包含原表的一部分数据。这种拆分方式能够有效减少单一表的数据量,从而提高查询速度。 - **拆分...
通过水平拆分、垂直拆分和分布式数据库等方式,可以提高数据库的容灾能力和扩展性。 数据库扩展性 数据库扩展性是互联网架构转型中的另一个主要挑战。随着业务的高速发展,数据库的扩展性变得尤为重要。阿里巴巴的...
7. **微服务架构下的数据库设计**:探讨在微服务架构中,如何进行数据库的拆分和治理,避免数据孤岛和数据一致性问题。 8. **实时与大数据处理**:介绍流处理技术(如Apache Flink、Kafka)和批处理工具(如Hadoop...
分布式数据库通过水平拆分和垂直拆分来管理数据,前者将同一表的数据分散到多个数据库,后者是将不同表分配到不同数据库。这种架构适用于数据量庞大、高并发和高性能需求的场景。 【数据库集群】 数据库集群是由多...
mysql分库分表,水平拆分和垂直拆分,水平拆分后如何路由 MySQL 索引使用的注意事项 left join,right join,inner join 说说分库与分表设计 分库与分表带来的分布式困境与应对之策(如何解决分布式下的分库分表,...
在数据拆分方面,分布式数据库采用垂直拆分和水平拆分两种策略。垂直拆分根据业务相关性将表结构拆分为多个独立的表,而水平拆分则是根据数据量和增长速度将单个表的数据分布到多个表中。分库分表(Sharding)通过...