ActiveRecord Multi-Tenant 使用教程
项目介绍
ActiveRecord Multi-Tenant 是一个强大的 Ruby gem,用于为使用 ActiveRecord 的 Rails 应用程序添加多租户支持。该项目特别适用于多租户数据库,尤其是与 PostgreSQL 的 Citus 扩展结合使用时。通过将租户上下文添加到查询中,该 gem 使得数据库(如 Citus)能够高效地将查询路由到正确的数据库节点,从而实现轻松的横向扩展。
项目快速启动
安装
首先,将以下内容添加到你的 Gemfile 中:
gem 'activerecord-multi-tenant'
然后运行 bundle install
来安装 gem。
配置模型
在你的模型中添加 multi_tenant
定义,以确保对 Citus 的全面支持,特别是在更新记录时。例如,如果你有一个 Analytics
模型:
class Analytics < ApplicationRecord
multi_tenant :account
end
使用示例
假设你有一个 Account
模型和一个 Analytics
模型,你可以这样使用:
account = Account.create(name: 'Example Account')
analytics = account.analytics.create(data: 'example data')
# 查询时确保包含租户上下文
account.analytics.find(analytics.id)
应用案例和最佳实践
应用案例
ActiveRecord Multi-Tenant 适用于需要多租户支持的应用程序,例如:
- 分析平台,其中每个客户的数据需要隔离。
- 多租户 SaaS 应用程序,其中每个租户的数据需要独立管理。
最佳实践
- 避免在非租户相关的表上使用:对于那些在每个账户中都相同的模板表,建议不要使用 ActiveRecord Multi-Tenant。
- 处理部分记录的租户关联:如果表中只有部分记录与租户无关(例如,模板与实际对象在同一表中),建议将
tenant_id
设置为 0,并使用MultiTenant.with(0)
访问这些对象。
典型生态项目
ActiveRecord Multi-Tenant 通常与以下项目结合使用:
- Citus:一个用于 PostgreSQL 的扩展,支持分布式多租户数据库。
- Rails:Ruby on Rails 框架,ActiveRecord Multi-Tenant 是其默认 ORM 的一部分。
通过结合这些项目,你可以构建一个强大的多租户应用程序,实现数据的隔离和高效查询。