【发布时间】:2011-08-12 05:51:41
【问题描述】:
在 DDBMS 的上下文中,垂直分片和水平分片有什么区别?
是不是关系的外延是垂直的碎片,内涵的碎片是水平的碎片?
【问题讨论】:
标签: database distributed fragmentation
在 DDBMS 的上下文中,垂直分片和水平分片有什么区别?
是不是关系的外延是垂直的碎片,内涵的碎片是水平的碎片?
【问题讨论】:
标签: database distributed fragmentation
简单地说,在水平碎片中,我们将表拆分为元组,这意味着在行中表的结构保持不变,只是我们拆分了一行或两行。 在垂直分片中,我们根据属性列拆分表,我们从原始表中制作了更多表
【讨论】:
数据碎片是分布式数据库管理系统 (DDBMS) 的一个重要特性 水平分片 将表水平拆分为元组或行。例如,一个有 1000 条记录的 COMPANY 表可以水平分成十个片段,每个片段有 100 条唯一记录。
垂直分片是将表分片成称为集合或站点的列,其中每个站点必须至少有一个共同的列,例如主键属性列(这样当碎片站点时需要可以再次使用公共列形成整个(父)表)。 例如,EMPLOYEE 表具有 ENO (PRIMARY KEY)、ENAME、ADDRESS、EMAIL 和 SALARY 等属性。将该表垂直分割为两个站点,例如站点 1 和站点 2。 site1 中的列是 ENO、ENAME 和 ADDRESS。 site2 中的列是 ENO、EMAIL 和 SALARY。
【讨论】:
Horizontal Fragmentation 按行拆分表。它与 Vertical Fragmentation 的不同之处在于键列和非键列之间的关系保持不变。表的内容因键值而异。
水平碎片例如: 公司希望每个部门都维护自己的数据。在此示例中,每个部门的 Department 表中只有一行,其他表仅包含部门员工的数据。
【讨论】:
基本上水平碎片按行拆分表格。 在垂直分片的情况下,按列拆分表格。
在水平碎片表中保持与以前相同。只有行是拆分的。 在 Vertical Fragmentation 中,一张表拆分为两张或多张表。
【讨论】:
假设你有一个亲戚,学生。
您将关系 Student 分为两组(称为 set1 和 set2),这样 Student 的一半属性在 set1 中,一半在 set2 中。这称为“垂直碎片”,因为关系沿列分散(类似于垂直撕裂页面)。原始关系是通过所有集合的自然连接获得的。对于自然连接,我们需要至少一个所有集合共有的属性(通常是主键)。
但是,如果我们的关系划分为 site1 存在行的一个子集(参见此处,所有属性都存在于行中)(例如),另一个子集存在于 site2,依此类推,这称为“水平碎片” ',原始关系是通过对所有集合进行并集得到的。这就像水平撕裂一页。
很明显,这是在分布式 DBMS 的上下文中。
【讨论】:
假设我们有这种关系
customer_id | Name | Area | Payment Type | Sex
1 | Bob | London | Credit card | Male
2 | Mike | Manchester | Cash | Male
3 | Ruby | London | Cash | Female
片段 1
customer_id | Name | Area | Payment Type | Sex
1 | Bob | London | Credit card | Male
2 | Mike | Manchester | Cash | Male
片段 2
customer_id | Name | Area | Payment Type | Sex
3 | Ruby | London | Cash | Female
片段 1
customer_id | Name | Area | Sex
1 | Bob | London | Male
2 | Mike | Manchester | Male
3 | Ruby | London Female
片段 2
customer_id | Payment Type
1 | Credit card
2 | Cash
3 | Cash
【讨论】:
水平分片将关系划分为称为行的元组
垂直碎片将关系划分为称为列的属性。
根据我们的应用程序视图要求,我们可以将关系分割为水平或垂直。
基于应用视图的碎片化程度和正确性规则
【讨论】:
只有分布式数据库才需要垂直分片。假设关系 R 之一有几个属性。其中一些属性存在于 R1 中,其他属性存在于 R2 中。然后我们垂直加入页面。这称为垂直碎片。
【讨论】: