Eon 模式与企业模式

Vertica 数据库采用以下两种模式之一运行:Eon 模式或企业模式。这两种模式都可以部署在内部部署或云中。了解这两种模式之间的区别是关键。如果您要部署 Vertica 数据库,则必须在部署规划的早期确定以哪种模式运行该数据库。如果您使用的是已部署的 Vertica 数据库,则应该了解每种模式如何影响数据加载和查询。

在 Eon 模式和 Enterprise 模式下运行的 Vertica 数据库将以不同的方式存储其数据:

  • Eon 模式数据库使用公共存储来存储其数据。

  • 企业模式数据库将数据本地存储在组成数据库的节点的文件系统中。

这些不同的存储方法导致两种模式之间存在许多重要差异。

存储概述

Eon 模式将数据存储在称为公共存储的共享对象存储中:

在云环境中部署时,Vertica 将其数据存储在基于云的存储容器中,例如 AWS S3 存储桶。当部署在本地部署中时,Vertica 将数据存储在本地部署的对象存储中,例如 Pure Storage FlashBlade 设备。将永久性数据存储与计算资源(加载数据和处理查询的节点)分开可以提供灵活性。

企业模式跨数据库节点的文件系统存储数据:

该图显示企业模式数据库。

每个节点负责存储和处理部分数据。无论是基于云还是在本地,数据都以相同方式存放在数据库的各个节点中,以便在节点发生故障时提供复原能力。将数据存放在接近计算节能力的位置可提供一系列不同的优势。当节点添加到群集或者在不可用之后重新上线时,会自动查询其他节点以更新其本地数据。

每种模式的主要优势

Eon 模式和企业模式存储数据的不同方式使每种模式在不同的环境中具有优势。下表总结了这些差异。有关详细信息,请参阅Eon 模式与企业模式

性能

正确配置后,Eon 模式和企业模式数据库在相同环境中具有大致相同的性能。

Eon 模式数据库通常支持缓存来自节点的本地存储库上的公共存储的数据,节点使用这些数据处理查询。启用存储库缓存后,Eon 模式数据库的查询性能相当于企业模式数据库,其中每个节点都在本地存储数据库的一部分。在这两种情况下,节点都会访问本地存储的数据以解析查询。

为了进一步提高性能,您可以在 Eon 模式数据库上启用存储库预热。启用存储库预热后,正在启动的节点会抢先加载其存储库,其中包含频繁查询和固定的数据。当节点完成启动并开始执行查询时,它的存储库已经包含了处理这些查询所需的大部分数据。这减少了从公共存储中提取数据的需要,并相应地提高了查询性能。

如果存储库太小,Eon 模式数据库中的查询性能可能会下降。小型存储库增加了查询需要的数据不在存储库中的机会。这导致节点不得不更频繁地从公共存储中检索数据。

安装

Eon 模式数据库必须具有对象存储,才能以公共方式存储其数据。除了安装在其节点上的存储之外,企业模式数据库不需要任何额外的存储硬件。根据您为 Vertica 数据库选择的环境(尤其是在内部部署中安装时),配置对象存储的需要可能会使您的安装更加复杂。

因为企业模式不需要额外的硬件来存储数据,所以安装起来会更简单一些。内部部署 Eon 模式安装需要为提供公共存储的对象存储提供额外的硬件和额外的配置。

企业模式对于开发环境特别有用,因为它不需要用于运行它的节点之外的其他硬件。您甚至可以在物理硬件或虚拟机上创建单节点企业模式数据库。您可以下载已准备好运行的预配置单节点企业模式虚拟机。有关详细信息,请参阅Vertica 社区版 (CE)

在云环境中安装 Eon 模式数据库通常比内部部署安装更简单。云环境为您提供其自己的对象存储。例如,当您在 Amazon 的 AWS 中安装 Eon 模式数据库时,您只需为公共数据存储创建一个 S3 存储桶。然后,当创建数据库时,您可以将 S3 URL 提供给 Vertica。无需安装和配置单独的数据存储。

在云中安装企业模式数据库类似于安装内部部署数据库。您在云中创建的虚拟机必须具有足够的本地存储,才能存储您的数据库数据。

工作负载隔离

您通常希望防止密集型工作负载干扰其他可能对时间敏感的工作负载。例如,您可能希望将 ETL 工作负载与查询工作负载隔离开来。可以将依赖实时分析的用户组与运行批处理报告的组隔离开来。

Eon 模式数据库提供了最佳的工作负载隔离选项。它允许您创建称为子群集的节点组来隔离工作负载。查询仅在单个子群集中的节点上运行。它不影响子群集外的节点。您可以为不同的用户组分配不同的子群集以供使用。

在 Eon 模式数据库中,子群集和可扩展性是密不可分的。您经常添加、移除、停止和启动整个节点子群集,而不是单独扩展节点。

企业模式不提供子群集来隔离工作负载。您可以使用资源池和其他设置等功能,为特定查询提供优先级和对更多资源的访问权限。但是,这些功能并没有像子群集那样真正隔离工作负载。有关使用这些功能管理工作负载的说明,请参阅管理工作负载

可扩展性

您可以通过添加或移除节点来扩展 Vertica 数据库,以满足不断变化的分析需求。在您按小时为数据库中的每个节点付费的云环境中,可扩展性通常更为重要。如果您的数据库不忙,则没有理由让未充分利用的节点花费您的资金。您可以在空闲时间(例如周末和节假日)减少数据库中的节点数量以节省资金。

对于内部部署安装,可扩展性通常不太重要。当未完全使用节点时,运行节点所涉及的额外成本有限。

企业模式数据库的扩展效率低于 Eon 模式数据库。当企业模式数据库扩展时,它必须对其数据进行重新分段(重新平衡),以便在新数量的节点之间分布。

重新平衡是一项代价高昂的操作。当扩展数据库时,Vertica 必须分解文件,并以物理方式将一定比例的数据从原始节点移动到新节点。当收缩数据库时,Vertica 必须将数据从要移除的节点中移出,并将其分布到其余节点中。在重新平衡期间,数据库不可用。此过程可能需要 12、24 甚至 36 小时才能完成,具体取决于数据库的大小。在扩展企业模式数据库后,查询应该运行得更快,因为每个节点负责的数据更少。因此,每个节点处理每个查询的工作量更少。收缩企业模式数据库通常会产生相反的效果 - 查询会运行得更慢。有关扩展企业模式数据库的详细信息,请参阅弹性群集

Eon 模式数据库可以更有效地扩展,因为数据存储与计算资源是分开的。

当您扩展 Eon 模式数据库时,不需要对数据库数据进行重新分段。相反,附加节点订阅公共存储中预先存在的数据段(称为分片)。当扩展群集时,Vertica 会重新平衡分配给每个节点的分片,而不是以物理方式拆分数据存储并在节点之间移动。新节点准备通过从公共存储中检索数据以填充其存储库(来自公共存储的数据的本地缓存)来处理查询。在扩展时,数据库仍然可用,该过程需要几分钟而不是几小时才能完成。

如果公共存储中的分片数量等于或大于新节点数量(如上图所示),则扩展群集后查询性能会提高。每个节点负责处理较少的数据,因此在您扩展群集后,相同的查询将运行得更快。

您还可以扩展数据库以提高查询吞吐量。查询吞吐量提高了数据库并行处理的查询数量。当您的工作负载包含许多运行时间较短的查询(“仪表板查询”)时,您通常会关心查询吞吐量。要提高吞吐量,请在新的 子群集中向数据库添加更多节点。子群集将连接到它的客户端运行的查询与数据库中的其他节点隔离开来。子群集独立且并行地工作。隔离工作负载意味着您的数据库同时运行更多查询。

如果子群集包含的节点数多于公共存储中的分片数,则多个节点订阅同一个分片。在这种情况下,Vertica 使用一种称为弹性处理扩展的功能来更快地执行查询。Vertica 在订阅节点之间划分每个分片中数据的责任。每个节点只需要处理其订阅的分片中的数据子集。要处理的数据更少意味着每个节点通常会更快地完成其查询部分。这通常转化为查询更快地完成其执行。

收缩 Eon 模式数据库的工作原理类似。关闭整个子群集降低了数据库的查询吞吐量。如果您从子群集中移除节点,其余节点将订阅没有订户的任何分片。该过程很快,并且数据库在此过程中仍在运行。

可扩充性

随着您将更多数据加载到数据库中,您最终可能需要扩充其数据存储。由于 Eon 模式数据库将计算与存储分开,因此您通常会在不更改节点数量的情况下扩充其存储。

在云环境中,您通常没有存储限制。例如,AWS S3 存储桶可以存储任意数量的数据。只要您愿意支付额外的存储费用,就不必担心扩充数据库的存储。

当您安装 Eon 模式内部部署时,扩充存储的方式取决于所使用的对象存储。例如,Pure Storage FlashBlade 支持热插拔新刀片以添加额外的存储。借助此功能,您无需停机即可扩充 Eon 模式数据库中的存储。

在大多数情况下,您通常会查询数据库中的数据子集(称为工作数据集)。由于 Eon 模式对计算和存储进行解耦,让您可以根据工作数据集和所需性能而不是整个数据集调整计算能力(数据库中的节点数)。

例如,如果您正在执行时间序列分析,其中活动数据集通常是最近 30 天,则可以调整群集的大小以管理 30 天的数据。超过 30 天的数据只会在公共存储中增长。需要向 Eon 模式数据库添加更多节点的唯一原因是,为了满足额外的工作负载。另一方面,如果您想在小数据集上获得非常高的性能,则可以添加任意数量的节点以获得所需的性能。

在企业模式数据库中,节点负责存储和计算。由于计算和存储之间的紧密耦合,在企业模式数据库中扩充存储的最佳方法是添加新节点。如可扩展性部分中所述,将节点添加到企业模式数据库需要重新平衡数据库中的现有数据。

由于重新平衡对数据库造成中断,通常很少扩充企业模式数据库中的存储。当您扩充其存储时,您通常会添加大量存储以允许未来的增长。

通过添加节点来增加存储的缺点是,您可能会为群集添加不必要的计算能力。例如,假设您正在执行专注于最近数据的时间序列分析,并且当前群集为您提供了足够的查询性能来满足您的需求。但是,您需要添加额外的存储来保存历史数据。在这种情况下,将新节点添加到数据库以获得额外的存储会增加您实际上不需要的计算能力。您的查询可能会运行得更快一些。然而,更快的结果带来的微小好处可能并不能证明增加更多计算能力的成本是合理的。