gpt4 book ai didi

ruby-on-rails - rails + Postgres : Multi-tenancy done right?

转载 作者:行者123 更新时间:2023-11-29 12:22:01 25 4
gpt4 key购买 nike

我打算使用 Rails 构建一个应用程序。它使用 Apartment 使用 Multi-Tenancy gem 和 PostgreSQL。该应用程序将有用户,每个用户都有一个帐户。这意味着每个用户都有自己的 PostgresSQL 模式;用户表在默认架构中。

每个用户在自己的架构中都有自己的客户列表。具有相同电子邮件的客户(本质上是同一客户)可以出现在多个模式中。我希望客户能够登录并查看与其关联的所有用户。我不能将客户表放在默认/公共(public)模式中,因为它与不在默认模式中的其他表相关。

我想我会做的是在公共(public)架构中的客户和用户之间创建一个链接表。该表将包含客户的电子邮件和用户的 ID。我的问题是我不明白这在 Rails 中的效果如何。我想要实现的是 customer.users

所以问题是:我应该如何解决这个问题?

最佳答案

我创建了这个库来帮助我们解决这个问题

https://github.com/Dandush03/pg_rls

目前最著名的实现是 Apartment Gem(来自 Influitive)、ActiveRecordMultiTenant(来自 Citus)和 rails 6.1 方式,DB sharding

在处理大量模式/数据库时,Apartment 和 rails 6.1 方法存在很多问题,主要是在您最常运行大规模迁移或必须更改表上的默认值时,这是因为您需要在每个租户上运行此迁移,这非常具有成本效益。从长远来看,Citus 的方法成本很高。

值得庆幸的是,PostgreSQL 在 pg V-9 上提供了一个很好的解决方案,但它有一些性能问题在 pg V-10 上得到了解决。这种方法允许您将特定表保留在“特殊 ID”后面,稍后可以使用 pg 新工具对其进行分区

我的方法主要集中在 PG 以及他们如何建议您实现 RLS,并且我的大部分查询都是使用 SQL 语句执行的,这在处理运行迁移时的性能问题时会有所帮助。我尝试将最好的 Rails 与最好的 pg 函数结合起来。

我的方法更好的地方是,当您开始运行您的特殊 pg 搜索功能时,不会有任何崩溃,因为所有数据都是安全的并且在同一个数据库中。您还将获得以 super 用户身份登录并获取统计信息的能力。

我可以继续,但我想我已经表达清楚了,如果你愿意,我鼓励你检查 gem(可能还​​有一些错误需要处理,就像现在它只处理从子域设置租户)但是它确实让我在正在进行的项目中的生活更轻松。如果我得到更多支持(例如),我会继续维护它并将其升级为更通用的工具

关于ruby-on-rails - rails + Postgres : Multi-tenancy done right?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16674551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com