Eon 模式体系结构

Eon 模式将计算资源与数据库的存储层分开。这种分离使您能够将数据存储在单个位置。您可以根据计算需求弹性地改变连接到该位置的节点数。调整群集大小不会中断分析工作负载。

您可以在云环境中创建 Eon 模式数据库,也可以在您自己的系统上本地创建 Eon 模式数据库。

Eon 模式适用于各种需求和数据量。由于计算和存储分开,因此可以单独扩展它们。

公共存储

Eon 模式不将数据存储在本地,而是对所有数据和编录(元数据)使用单个公共存储位置。公共存储是数据库的集中式存储位置,在数据库节点之间共享。公共存储基于对象存储,例如云中的 Amazon S3 或内部部署中的 PureStorage FlashBlade 设备。无论哪种情况,Vertica 都依赖对象存储来维护数据的持久副本。

公共存储具有以下属性:

  • 与单个计算机上的磁盘存储相比,云中的公共存储更具弹性,并且不易因存储故障而导致数据丢失。

  • 任何节点都可以使用相同的路径读取任何数据。

  • 容量不受节点上磁盘空间的限制。

  • 由于数据是以公共方式存储的,因此您可以弹性扩展群集以满足不断变化的需求。如果数据本地存储在节点上,则添加或移除节点将需要在节点之间移动大量数据,以将其从要移除的节点上移出,或移动到新创建的节点上。

公共存储位置列在 STORAGE_LOCATIONS 系统表中,其中 SHARING_TYPE 为 COMMUNAL。

在公共存储中,数据被划分到称为 分片的部分。分片是 Vertica 在数据库中的节点之间划分数据的方式。节点订阅特定的分片,在节点之间平衡订阅。当加载或查询数据时,每个节点负责其订阅的分片中的数据。有关详细信息,请参阅分片和订阅

存储库存储

公共存储的一个潜在缺点是它的速度,特别是在云环境中。从共享云位置访问数据要慢于从本地磁盘读取数据。此外,如果许多节点同时从公共存储中读取数据,则与公共存储的连接可能会成为瓶颈。为了提高数据访问速度,Eon 模式数据库中的节点维护一个称为存储库的本地磁盘数据缓存。当执行查询时,节点首先检查它需要的数据是否在存储库中。如果是,则节点使用数据的本地副本完成查询。如果数据不在存储库中,则节点从公共存储中提取数据,并在存储库中保存副本。

节点将新加载的数据存储在存储库中,然后将其发送到公共存储。有关详细信息,请参阅下面的“加载数据”。

默认情况下,Vertica 将存储库的最大大小设置为存储该存储库的文件系统的总磁盘空间的 60%。如果您愿意,可以调整存储库的大小。Vertica 将存储库的最大大小限制为包含它的文件系统的 80%。此上限可确保有足够的磁盘空间用于其他用途,例如 Vertica 在数据加载期间创建的临时文件。

每个节点还存储数据库编录的本地副本。

加载数据

在 Eon 模式下,COPY 语句通常写入节点存储库中的读取优化存储 (ROS) 文件以提高性能。COPY 语句通过分段、排序和压缩来实现高度优化。在语句提交之前,Vertica 将 ROS 文件传送到公共存储。

因为加载缓冲在执行加载的节点上的存储库中,所以存储库的大小会限制可以在单个操作中加载的数据量。除非在并行会话中执行多个加载,否则不太可能遇到此限制。

在加载时,参与节点将文件写入存储库,并将其同步发送到公共存储。还会将数据发送到订阅分片(要将数据加载到其中)的所有节点。这种在加载时向对等节点发送数据的机制可以在节点出现故障时提高性能,因为接管故障节点的对等节点的缓存已经预热。文件压缩机制(合并)将其输出文件放入缓存中,同时将它们上传到公共存储。

下图显示了执行 COPY 语句期间的数据流。

查询数据

在 Eon 模式下,Vertica 使用略有不同的流程计划查询,以合并分片机制和远程存储。Vertica 不使用固定分段方案将数据分发到每个节点,而是使用分片机制将数据分段为至少一个(通常更多)节点订阅的特定数量的分片。当优化器选择投影时,投影的布局由会话的参与订阅确定。优化器生成与企业模式中的查询计划等效的查询计划。它选择订阅每个分片的节点之一来参与查询执行。

Vertica 首先尝试使用存储库中的数据来解决查询。当存储库中的数据无法解决查询时,Vertica 将从公共存储中读取数据。当大量查询从公共存储读取数据时,您可能会看到对查询性能的影响。如果是这种情况,那么您应该考虑调整存储库的大小,或使用存储库系统表来更好地了解导致问题的原因。您可以使用 ALTER_LOCATION_SIZE 来更改存储库大小。

工作负载隔离和扩展

Eon 模式允许您定义子群集,这些子群集划分节点以相互隔离工作负载。您还可以使用子群集来确保缩减群集不会导致 Vertica 进入只读模式,以保持数据完整性。有关详细信息,请参阅子群集