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 设计使跨租户数据分析变得容易。 - 多集群:为每个客户设置独立集群的设计实施和维护成本高且耗时。
扩展阅读¶
- Vertica 资源池配置的最佳实践 — 多租户场景中资源隔离的核心手段
- Vertica 访问策略最佳实践 — 行级/列级安全策略实现数据隔离