您可以使用以下两种模式之一创建Vertica数据库:企业模式或Eon模式。选择哪种模式取决于您部署群集的位置。在规划数据库安装时,必须选择其中一种模式。创建数据库后,无法将数据库从一种模式切换到另一种模式。大多数Vertica功能在两种模式下的行为方式相同。
企业模式概述
Enterprise Mode 是最初的默认Vertica数据库模式(版本9.1发行版之前唯一可用的模式)。在企业模式中,数据库中的数据分布在集群中ROS 容器中的所有节点上。查询通常对本地存储的数据进行操作。它最适合于包含“热”数据(存储在数据库中的数据)和“冷”数据(外部存储的数据,例如在Hadoop文件系统上)的数据集上的恒定工作负载。
企业模式的可扩展性低于Eon模式:向企业模式数据库添加节点或从中删除节点更加困难。添加或删除节点时,Vertica必须在节点之间重新分配本地存储的数据。
企业模式比Eon模式具有更多平台选项。您可以在Vertica支持的任何环境中使用企业模式:本地安装或共存的硬件,虚拟机或主要供应商的云(Amazon AWS,Google Cloud Platform或Microsoft Azure)。
Eon模式概述
Eon Mode(在Vertica版本9.1中引入)优化了数据库的可伸缩性。它允许您根据工作负载动态调整数据库中的节点数。这种灵活性来自于将计算资源与数据存储分离。一个Eon模式数据库的数据存储在一个*存储库社区。由于节点不存储数据,因此您可以更轻松地添加或删除它们。
当分析工作负载增加时,您可以动态地向群集添加更多节点,以提高计算能力。由于所有数据都集中存储,因此当节点加入或离开数据库时,Vertica群集中的节点不必花时间交换数据来重新平衡其存储。新节点只从公共存储中检索数据。
当您的工作负载较低时,您可以从群集中删除节点,从而节省运行多余节点的成本(在云中,对于您正在运行的每个节点每小时收费,这一点尤为重要)。您可以关闭节点而不必担心数据变得不可用,因为所有数据库的数据都在公共存储中。
添加和删除节点不会影响正在运行的查询。您甚至可以暂停整个数据库,然后重新启动它以恢复运行查询。
一个Eon模式数据库还具有更灵活的存储选择。由于节点不负责存储数据,因此可以在不更改节点数的情况下扩展或减少存储在数据库中的数据量。
目前,Eon Mode仅适用于亚马逊的AWS。
数据库模式对Vertica架构的影响
数据库模式确定Vertica如何以低级别存储数据。一个企业模式的数据库,将其数据存储在数据库中的节点的文件系统中。一个Eon模式数据库将其数据存储在公共信息库中。Eon Mode数据库中的各个节点保留数据的缓存副本,但公共存储容器是数据库中数据的持久副本。
由于这两种模式存储数据的方式存在根本差异,因此无法在企业模式和Eon模式之间直接切换。您在创建数据库时选择数据库的模式,创建后,您无法更改数据库的模式。如果要使用其他模式,则必须备份数据,使用新模式创建新数据库,然后重新加载数据。
企业模式概念
混合数据存储
在企业模式下运行时,Vertica将数据存储在两个容器中:
-
写优化存储(WOS) - 将数据存储在内存中,无需压缩或索引。您可以使用INSERT,UPDATE和COPY语句将数据加载到WOS中。
-
读取优化存储(ROS) - 将数据存储在磁盘上。对数据进行分段,排序和压缩以实现高度优化。您可以使用COPY语句将数据直接加载到ROS中。
WOS的存在是为了防止许多小数据加载(通常称为涓流加载)强制Vertica 创建许多小的ROS容器。大量小型ROS容器的效率低于大型容器。
Tuple Mover使用以下过程将数据从WOS(内存)移动到ROS(磁盘):
- Moveout将数据从WOS复制到Tuple Mover,然后复制到ROS, 数据被分类,编码和压缩成列文件。
- Mergeout将较小的ROS容器组合成较大的容器,以减少碎片。
您通常使用COPY语句批量加载数据。它可以将数据加载到WOS中,或者将数据直接加载到ROS中。
数据冗余
在企业模式下,Vertica数据库的每个节点都在本地存储和操作数据。如果没有某种形式的冗余,节点的丢失将迫使您的数据库关闭,因为它的一些数据将无法用于服务查询。
您通常选择让企业模式数据库冗余存储数据(通过设置k-safety值),以防止节点关闭时数据丢失和服务中断。
k-safety
K-safety在Vertica数据库群集中设置容错。值K表示复制数据库集群中的数据的次数。这些副本允许其他节点接管任何故障节点的查询处理。
注意:如果失败节点的数量超过K值,则某些数据可能变得不可用。在这种情况下,数据库被认为是不安全的并自动关闭。但是,如果每个数据段在至少一个正常运行的群集节点上可用,则Vertica将继续安全运行。
注意:如果数据库群集中的一半或更多节点发生故障,即使数据库中的所有数据都可从副本中获得,数据库也会自动关闭。此行为可防止由于网络分区而导致的问题。
您可以访问系统表来监视和记录Vertica操作的各个方面。使用该SYSTEM表监控与K-safety相关的信息,例如:
- NODE_COUNT:群集中的节点数
- NODE_DOWN_COUNT:群集中当前已关闭的节点数
- CURRENT_FAULT_TOLERANCE:K安全级别
具有projections的高可用性
要确保三个或更多节点的数据库群集的高可用性和恢复,Vertica:
- 复制小的,未分段的projections
- 为大的分段投影创建伙伴projections。
Eon模式架构
公共存储
Eon Mode不是在本地存储数据,而是为所有数据和目录(元数据)使用单个公共存储位置。公共存储是数据库的集中存储位置,在数据库节点之间共享。
公用存储具有以下属性:
- 云中的公共存储比单个计算机上的磁盘存储更具弹性,并且更容易因存储故障而导致数据丢失。
- 任何计算节点都可以使用相同的路径读取任何数据。
- 容量不受计算节点上的磁盘空间限制。
- 由于数据是以通信方式存储的,因此您可以弹性扩展群集以满足不断变化的需求。
Vertica目前支持Amazon S3中的公共存储。
公共存储位置列在STORAGE_LOCATIONS系统表中,其SHARING_TYPE为COMMUNAL。
在公共存储中,数据被分成称为分片的部分。计算节点订阅特定分片,在计算节点之间平衡订阅。
计算节点
计算节点负责所有数据处理和计算。计算节点存储经常查询的数据的副本以及表示此节点所订阅的分片的目录的一部分。
每个计算节点都订阅一个或多个分片。订阅分片的数据保存在软件仓库中,这是一个类似缓存的组件。该中间数据存储层提供了节点本地数据的更快副本。查询中经常使用的数据在您的库中优先。如果查询的数据不在库中,则Vertica可能需要从公共存储中读取数据。该软件仓库通过阻止某些查询进行公共存储的往返来提高查询性能。
软件仓库还用于存储新加载的数据,然后再将其发送到公共存储。因此,数据加载不必等待写入公共存储,Vertica在本地写入数据,并单独将其发送到公共存储。节点还直接与其他节点交换它们加载的数据。此功能使查询新加载的数据更有效,因为订阅包含新加载的新数据的分片的节点不必等待数据发送到公共存储,然后自己检索它。让节点直接共享其加载的数据可防止在节点和公共存储之间发生瓶颈。
默认情况下,库设置为节点上磁盘空间的80%。
每个计算节点还存储数据库目录的本地副本。
工作负载隔离
Eon Mode允许您划分计算节点以隔离彼此的工作负载。
加载数据
在Eon模式下,COPY语句写入节点库中的读取优化存储(ROS)文件以提高性能。COPY语句对高优化进行分段,排序和压缩。在语句提交之前,Vertica将ROS文件发送到公共存储。Eon Mode不使用写优化存储(WOS)。
由于在执行加载的节点上的库中缓冲了负载,因此库的大小限制了可以在单个操作中加载的数据量。除非您在并行会话中执行多个加载,否则您不太可能遇到此限制。
在加载时,文件被写入库并同步发送到公共存储和订阅加载数据的分片的所有节点。这种在加载时向对等体发送数据的机制可以提高性能,因为如果节点出现故障,接管下行节点的对等体的缓存已经很热。文件压缩机制(mergeout)将其输出文件放入缓存中,并将它们上载到公共存储中。
下图显示了复制语句期间的数据流。
查询数据
Vertica使用稍微不同的过程来计划在Eon模式下的查询,以合并分片机制和远程存储。Vertica使用分片机制将数据分段为至少一个(通常更多)节点订阅的特定数量的分片,而不是使用固定分段方案将数据分发到每个节点。当优化器选择projections时,projections的布局由参与的会话订阅确定。优化程序生成的查询计划与企业模式中的查询计划等效。只有会话选择为分片提供服务的节点才会参与查询执行。
Vertica首先尝试使用库中的数据来解析查询。当软件仓库中的数据无法解析查询时,Vertica将从公共存储中读取。当大量查询从公共存储中读取时,您可能会看到对查询性能的影响。如果是这种情况,那么您应该考虑重新调整您的软件仓库大小或使用软件仓库系统表来更好地了解导致问题的原因。您可以使用ALTER_LOCATION_SIZE来更改库大小。
分片和订阅
在Eon模式下,主数据存储为Vertica数据库节点所共享。Vertica将数据分段(分区)为分片。数据库中的每个节点都订阅公共存储位置中的分片子集。这可确保如果节点出现故障或节点正在另一个查询中使用,则所有数据都可在其余节点上使用。当K-Safety为1或更高(高可用性)时,每个分片都有多个节点用户。
公共存储位置中的分片类似于企业模式数据库中的分段预测集合。您可以在创建数据库时定义分片数。
为了提高效率,Vertica直接在数据库节点之间传输有关分片的元数据。这种点对点传输仅适用于元数据,根据需要,存储在每个节点上的实际数据将从公共存储复制到节点的库。
扩展您的群集
此图显示了将3节点3分片数据库扩展到6个节点的过程。分片数保持不变,附加节点获得分片订阅。当节点加入群集时,它们会立即订阅分片并开始填充其depot的过程。
参考:vertica官方文档9.1.x—>Vertica Concepts
具体链接为:
https://www.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/ConceptsGuide/Other/ConceptsGuide.htm%3FTocPath%3DVertica%20Concepts|_____0