📜  数据仓库-分区策略

📅  最后修改于: 2021-01-07 05:58:18             🧑  作者: Mango


进行分区可以提高性能并简化数据管理。分区还有助于平衡系统的各种需求。通过将每个事实表划分为多个单独的分区,它可以优化硬件性能并简化数据仓库的管理。在本章中,我们将讨论不同的分区策略。

为什么需要分区?

分区很重要,原因如下:

  • 为了便于管理,
  • 为了协助备份/恢复,
  • 提升性能。

易于管理

数据仓库中的事实表可以增长到数百GB。如此庞大的事实表很难作为一个单独的实体进行管理。因此,需要分区。

协助备份/恢复

如果不对事实表进行分区,则必须将所有数据加载到完整的事实表中。分区使我们只能按常规加载所需数量的数据。它减少了加载时间,还提高了系统性能。

–要减少备份大小,可以将除当前分区以外的所有分区标记为只读。然后,我们可以将这些分区置于无法修改的状态。然后可以对其进行备份。这意味着将仅备份当前分区。

提升绩效

通过将事实表划分为数据集,可以增强查询过程。因为现在查询仅扫描那些相关的分区,所以查询性能得到了增强。它不必扫描整个数据。

水平分区

事实表可以通过多种方式进行分区。在水平分区中,我们必须牢记数据仓库可管理性的要求。

按时间划分成相等的段

在这种分区策略中,事实表是根据时间段进行分区的。在这里,每个时间段都代表着业务中的重要保留期。例如,如果用户查询本月至今的数据,则将数据划分为月度段是适当的。我们可以通过删除分区表中的数据来重用分区表。

按时间划分为不同大小的细分

这种分区是在不经常访问老化数据的地方进行的。它被实现为一组较小的分区(用于相对最新的数据),较大的分区(用于非活动数据)的集合。

按时间划分为不同大小的段

注意事项

  • 详细信息仍可在线获得。

  • 物理表的数量保持相对较小,从而降低了运营成本。

  • 该技术适用于需要混合最近历史记录和整个历史记录之间的数据挖掘的情况。

  • 在分区概要文件定期更改的情况下,此技术没有用,因为重新分区会增加数据仓库的运营成本。

在不同维度上分区

事实表还可以基于时间以外的维度进行分区,例如产品组,区域,供应商或任何其他维度。让我们举个例子。

假设市场函数已按照不同州的结构划分为不同的区域部门。如果每个区域都想查询其区域内捕获的信息,那么将事实表划分为区域分区将被证明更为有效。这将导致查询加速,因为它不需要扫描不相关的信息。

注意事项

  • 该查询不必扫描不相关的数据,从而加快了查询过程。

  • 如果尺寸将来不太可能更改,则此技术不合适。因此,值得确定的是将来尺寸不会改变。

  • 如果维度发生变化,则必须对整个事实表进行重新分区。

注意-我们建议仅根据时间维度执行分区,除非您确定建议的维度分组在数据仓库的使用期限内不会改变。

按表大小分区

如果没有明确的依据可以在任何维度上划分事实表,那么我们应该根据事实表的大小对事实表进行划分。我们可以将预定大小设置为临界点。当表超过预定大小时,将创建一个新的表分区。

注意事项

  • 这种分区管理起来很复杂。

  • 它需要元数据来标识每个分区中存储了哪些数据。

分区尺寸

如果维包含大量条目,则需要对维进行分区。在这里,我们必须检查尺寸的大小。

考虑一个随时间变化的大型设计。如果我们需要存储所有变化以便进行比较,则该维度可能会很大。这肯定会影响响应时间。

循环分区

在循环技术中,当需要新分区时,将旧分区存档。它使用元数据允许用户访问工具引用正确的表分区。

此技术使在数据仓库内的表管理设施自动化变得容易。

垂直分区

垂直分区,垂直拆分数据。下图描述了垂直分区的完成方式。

垂直分区

垂直分区可以通过以下两种方式执行-

  • 正常化
  • 行分割

正常化

规范化是数据库组织的标准关系方法。在这种方法中,行被折叠成单行,因此减少了空间。查看下表,这些表显示了如何执行规范化。

归一化之前的表

Product_id Qty Value sales_date Store_id Store_name Location Region
30 5 3.67 3-Aug-13 16 sunny Bangalore S
35 4 5.33 3-Sep-13 16 sunny Bangalore S
40 5 2.50 3-Sep-13 64 san Mumbai W
45 7 5.66 3-Sep-13 16 sunny Bangalore S

归一化后的表格

Store_id Store_name Location Region
16 sunny Bangalore W
64 san Mumbai S
Product_id Quantity Value sales_date Store_id
30 5 3.67 3-Aug-13 16
35 4 5.33 3-Sep-13 16
40 5 2.50 3-Sep-13 64
45 7 5.66 3-Sep-13 16

行分割

行拆分往往会在分区之间留下一对一的映射。行拆分的目的是通过减小其大小来加快对大表的访问。

–使用垂直分区时,请确保不需要在两个分区之间执行主要的联接操作。

确定分区密钥

选择正确的分区键非常关键。选择错误的分区键将导致重组事实表。让我们举个例子。假设我们要对下表进行分区。

Account_Txn_Table
transaction_id
account_id
transaction_type
value
transaction_date
region
branch_name

我们可以选择对任何键进行分区。两个可能的键可能是

  • 地区
  • 交易日期

假设公司在30个地理区域中进行组织,并且每个地区都有不同数量的分支机构。这将给我们30个分区,这是合理的。此分区足够好,因为我们的需求记录表明,绝大多数查询都限于用户自己的业务区域。

如果我们按transaction_date而不是按区域进行分区,则来自每个区域的最新事务将在一个分区中。现在,想要查看自己区域内数据的用户必须跨多个分区进行查询。

因此,值得确定正确的分区键。