跳转至

Vertica 多租户实现最佳实践

原文:Implement Multi-Tenancy Using Vertica

概述

Vertica 允许您设计和实现多租户系统,以服务多个客户。评估您的性能、存储和安全需求,选择最适合您数据设计和工作负载的模型。

本文档提供了 Vertica 多租户环境的最佳实践,描述了三种配置 Vertica 数据库以支持多个租户的方法:多 Schema、单 Schema(tenant_id 字段)、多集群。

多租户简介

在 Vertica 多租户环境中,一个 Vertica 数据库实例支持多个租户访问数据。每个租户可以访问自己的数据集,或多个租户可以共享特定数据集。软件即服务(SaaS)环境使用多租户。

使用 Vertica 实现多租户的优缺点

优点 缺点
用户定义的资源池允许租户共享内存资源。Schema 用于隔离每个租户。对象级备份可以单独备份每个租户。存储位置指定数据的存储位置。只需执行一次数据库升级即可影响所有租户。使用 EXPORT TO 和 COPY FROM 在 Schema 之间复制数据。 如果租户数量很大,可能需要复杂的数据库配置。某些 Vertica 数据库操作具有系统范围的影响。租户数量的增加可能导致数据库编录庞大。

Vertica 中三种多租户方法

多 Schema:每个租户一个 Schema

在这种方法中,您为每个租户创建一个 Schema。配置角色级和用户级安全性,以确保每个租户只能访问其特定数据。

适用场景: 在真正需要多租户时使用此方法。在风险、灵活性、性能和成本之间取得了平衡。

优缺点:

优点 缺点
每个租户拥有自己的 Schema 和表,数据库管理简单。Schema 相互隔离。易于单独备份和恢复每个租户的数据。可以为每个租户定义单独的数据保留策略。 大量租户导致编录庞大。跨所有租户的数据分析复杂。需要为每个租户创建资源池。集群宕机时会影响所有租户。需要限制租户规模和数量。

单 Schema:向基表添加 tenant_id 字段

在这种方法中,您为每个租户分配一个唯一 ID。每个表包含一个 tenant_id 字段,并存储所有租户的数据。

适用场景: 当 Vertica 作为托管租户的后端数据库时使用。

优缺点:

优点 缺点
基于角色的配置访问确保租户隐私。较少 Schema 避免大编录。跨所有租户的数据分析更容易。压缩效果更好。能够使用 tenant_id 创建分区。 大量租户会导致分区过多。跨分区批量加载导致 Tuple Mover moveout 问题。所有租户必须遵循相同的数据保留策略。备份和恢复单个租户数据较为困难。

多集群:每个租户一个集群

在这种方法中,您为每个租户设置多个集群。每个租户与其他租户完全隔离。

适用场景: 当 Vertica 托管在云中时使用。当租户工作负载多样化且不可预测时,此方法较为有利。

优缺点:

优点 缺点
每个租户拥有自己的 Schema 和表。大型编录在单个集群上也可管理。每个租户独占系统资源。易于单独备份和恢复。 需要额外的硬件基础设施成本。系统和数据库管理成本随集群数量增加而增加。多个 Vertica 实例需要重复的脚本和流程。

结论

  • 多 Schema:具有独立 Schema 的设计易于维护,但在同一集群中可托管的租户数量有限。
  • 单 Schema:所有表都包含 tenant_id 字段的单 Schema 设计使跨租户数据分析变得容易。
  • 多集群:为每个客户设置独立集群的设计实施和维护成本高且耗时。

扩展阅读