`
coach
  • 浏览: 386721 次
  • 性别: Icon_minigender_2
  • 来自: 印度
社区版块
存档分类
最新评论

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

阅读更多
分割表分为水平分割表和垂直分割表两种。分割表增加了维护数据完整性的代价。

水平分割表:一种是当多个过程频繁访问数据表的不同行时,水平分割表,并消除新表中的冗余数据列;若个别过程要访问整个数据,则要用连接*作,这也无妨分割表;典型案例是电信话单按月分割存放。另一种是当主要过程要重复访问部分行时,最好将被重复访问的这些行单独形成子集表(冗余储存),这在不考虑磁盘空间开销时显得十分重要;但在分割表以后,增加了维护难度,要用触发器立即更新、或存储过程或应用代码批量更新,这也会增加额外的磁盘I/O开销。
水平分割会给应用增加复杂度,它通常在查询时需要多个表名,查询所有数据需要union操作。在许多数据库应用中,这种复杂性会超过它带来的优点,因为只要索引关键字不大,则在索引用于查询时,表中增加两到三倍数据量,查询时也就增加读一个索引层的磁盘次数。


垂直分割表(不破坏第三范式),一种是当多个过程频繁访问表的不同列时,可将表垂直分成几个表,减少磁盘I/O(每行的数据列少,每页存的数据行就多,相应占用的页就少),更新时不必考虑锁,没有冗余数据。缺点是要在插入或删除数据时要考虑数据的完整性,用存储过程维护。另一种是当主要过程反复访问部分列时,最好将这部分被频繁访问的列数据单独存为一个子集表(冗余储存),这在不考虑磁盘空间开销时显得十分重要;但这增加了重叠列的维护难度,要用触发器立即更新、或存储过程或应用代码批量更新,这也会增加额外的磁盘I/O开销。垂直分割表可以达到最大化利用Cache的目的。
垂直分割可以使得数据行变小(因为列少了,一行数据就变小),一个数据页就能存放更多的数据,在查询时就会减少I/O 次数。其缺点是需要管理冗余列,查询所有数据需要join操作


总之,为主要过程分割表的方法适用于:各个过程需要表的不联结的子集,各个过程需要表的子集,访问频率高的主要过程不需要整表。在主要的、频繁访问的主表需要表的子集而其它主要频繁访问的过程需要整表时则产生冗余子集表。

注意,在分割表以后,要考虑重新建立索引。

存储衍生数据

对一些要做大量重复性计算的过程而言,若重复计算过程得到的结果相同(源列数据稳定,因此计算结果也不变),或计算牵扯多行数据需额外的磁盘I/O开销,或计算复杂需要大量的CPU时间,就考虑存储计算结果(冗余储存)。现予以分类说明:

若在一行内重复计算,就在表内增加列存储结果。但若参与计算的列被更新时,必须要用触发器更新这个新列。

若对表按类进行重复计算,就增加新表(一般而言,存放类和结果两列就可以了)存储相关结果。但若参与计算的列被更新时,就必须要用触发器立即更新、或存储过程或应用代码批量更新这个新表。

若对多行进行重复性计算(如排名次),就在表内增加列存储结果。但若参与计算的列被更新时,必须要用触发器或存储过程更新这个新列。

总之,存储冗余数据有利于加快访问速度;但违反了第三范式,这会增加维护数据完整性的代价,必须用触发器立即更新、或存储过程或应用代码批量更新,以维护数据的完整性。

分享到:
评论

相关推荐

    数据库表分割技术浅析(水平分割/垂直分割/库表散列)

    数据库表分割技术是应对大数据量和高并发场景的有效策略,主要分为水平分割、垂直分割和库表散列三种方式。 1. **水平分割** 水平分割是指按照记录的某一属性或条件,将一个大表的数据分散到多个表中,每个子表的...

    基于mybatis框架,数据库垂直、水平拆分及读写分离实现

    在数据库水平拆分中,通过一致性哈希策略,可以将数据均匀分布到各个节点,即使有新的节点加入或现有节点下线,受影响的数据范围也相对较小。在MyBatis中,可以自定义插件实现一致性哈希的计算,将数据映射到相应的...

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

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

    垂直分割数据窗口垂直分割数据窗口

    但是,由于描述部分和标题部分出现了重复的情况,并且提供的代码片段与标题和描述所提及的主题并不完全吻合(标题和描述指向的是“垂直分割”,而代码示例则涉及到“水平滚动”),因此在接下来的内容中,我们将首先...

    如何从应用程序来优化Oracle数据库

    为了平衡这一矛盾,可以适当进行反规范化,如分割表(水平分割和垂直分割)、保留冗余列和增加派生列。 分割表分为水平分割和垂直分割。水平分割是根据行划分,每个子表查询速度快,但管理复杂;垂直分割是依据列的...

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

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

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

    1. 全局概念模式:描述分布式数据库中全局数据的逻辑结构和数据特性。 2. 分片模式:描述全局数据的逻辑划分,每个全局关系可以通过选择和投影的关系操作被逻辑划分为若干片段。 3. 分配模式:根据选定的数据分布...

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

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

    东北大学2009年春季博士入学试题-分布式数据库

    分配模式可以是水平分区、垂直分区或混合分区,选择合适的分配模式取决于具体的应用场景和性能要求。 查询优化 在分布式数据库中,查询优化是一个非常重要的问题。全局优化是指对整个分布式数据库系统的优化,而...

    数据库分库技巧

    其中,水平切分通过将数据按照某种规则分散到多个数据库实例中,能够有效减轻单个数据库的压力,并提高整体系统的可用性和容错性。本文将重点介绍水平切分中的关键技术——分库、分表、主从复制、集群及负载均衡等,...

    数据库原理、编程与性能

    数据库架构设计要考虑扩展性,如水平分割(Sharding)、垂直分割(Partitioning)和读写分离,以适应高并发和大数据量的需求。 最后,备份与恢复策略对于数据安全至关重要。定期备份可以防止数据丢失,而日志记录和...

    【整理】数据库面试题索引sql优化+数据库SQL优化总结之百万级数据库优化

    1. **数据库架构设计**:在百万级数据量下,合理的设计能避免性能瓶颈,如垂直分割、水平分割,以及读写分离策略。 2. **缓存与预热**:使用内存数据库如Redis或Memcached来缓存热点数据,减少对主数据库的压力;...

    数据库工程师知识点

    - 分区与分片:通过水平或垂直分割数据,提高处理能力。 - 数据库集群:如MySQL Cluster、MongoDB Replication,提升系统的可用性。 8. NoSQL与NewSQL: - NoSQL数据库:理解键值对、文档型、列族、图形数据库的...

    分布式数据库技术在电力企业中的应用 (1).pdf

    分布式数据库系统数据分片通常采用水平、垂直、导出和混合等多种方式,应根据用户需求和具体场景选择适合的数据分片策略。 在实际应用中,分布式数据库技术使得电力企业能够高效地进行资源分配和信息共享。例如,在...

    从应用程序着手优化Oracle数据库

    分割表分为水平分割和垂直分割。水平分割将大表按照行分割,提高单表查询速度,但可能增加查询复杂性。垂直分割则是将高访问频率的列与主键放在一起,减少数据页宽度,提高I/O效率,但可能导致多表连接。 保留冗余...

    图书管理系统MySQL数据库

    随着图书数量和用户量的增长,数据库需要具备良好的扩展性,如垂直分割(将表拆分到多个服务器)和水平分割(将数据分布到多个表)。 11. **错误处理和日志记录**: 为了追踪和解决可能出现的问题,系统应记录...

Global site tag (gtag.js) - Google Analytics