gpt4 book ai didi

ruby-on-rails - Multi-Tenancy rails 应用程序 : what are the pros and cons of different techniques?

转载 作者:行者123 更新时间:2023-11-29 11:14:48 24 4
gpt4 key购买 nike

我最初是为一个客户编写 Ruby on Rails 应用程序的。现在,我正在对其进行更改,以便它可以用于不同的客户端。我的最终目标是某些用户(不是我)可以单击一个按钮并创建一个新项目。然后生成所有必要的更改(新模式、新表、代码处理),无需任何人编辑 database.yml 文件或添加新模式定义。我目前正在使用 SCOPED 访问权限。所以我有一个项目模型,其他关联模型有一个 project_id 列。

我看过其他关于 Rails 中的 Multi-Tenancy 应用程序的帖子。很多人似乎建议在 Postgres 中为每个新客户创建不同的模式。然而,对我来说,新客户在数据模型方面拥有不同的模式并没有多大用处。每个客户端都会有相同的表、行、列等。

我对每个客户的愿景是我的生产数据库首先有一个包含不同项目/客户的表。这些表中的每一个都链接到一组几乎相同但数据不同的表。换句话说,表格的表格。或者换句话说,第一个表将映射到具有相同结构的每个客户端的不同数据集。

我解释我的愿景的方式与 Postgres 实现不同“模式”的方式完全相似吗?它看起来像嵌套表格吗?或者 Postgres 是否必须查询数据库中的所有信息?我目前不使用 Postgres,但如果它适合设计,我愿意学习。如果您知道适合我需要的与 Rails 配合使用的数据库软件,请告诉我。

现在,我正在使用作用域来完成 Multi-Tenancy 应用程序,但感觉不具有可扩展性或干净。但是,如果我给非技术用户提供可填写的信息,它确实可以很容易地创建一个新项目。您知道多模式 Postgres 定义是否可以在用户单击按钮后自动运行吗?如果可能的话,我希望这由 Rails 处理,而不是由外部脚本处理? (请以任何一种方式提出建议)

最重要的是,您是否推荐任何插件或我应该为此任务采用不同的框架?我发现 Rails 在上述某些抽象情况下受到限制,这是我第一次遇到 Rails 缩放问题。

欢迎任何与 Multi-Tenancy 应用程序或我的情况相关的建议。也欢迎任何需要澄清的问题或其他建议。

谢谢,--戴夫

最佳答案

MSDN 有一个很好的introduction to multi-tenant data architecture .

另一方面,每个租户都有一个数据库(“不共享”)。 “Shared nothing”使灾难恢复变得非常简单,并且在租户之间具有最高程度的隔离。但它也具有最高的每个租户平均成本,并且它支持每台服务器最少的租户。

在频谱的另一端,您在每个共享表的每一行中存储一个租户 ID 号(“共享一切”)。 “共享所有内容”使灾难恢复变得困难——对于单个租户,您只需要恢复每个共享表中的一些行——而且它具有最低程度的隔离。 (格式错误的查询可能会暴露私有(private)数据。)但它的每个租户成本最低,并且每台服务器支持的租户数量最多。

My vision for each client is that my production database first has a table of different projects/clients. And each one of those tables links to a set of tables that are pretty much the same with different data. In other terms a table of tables. Or in other terms, the first table will map to a different set of data for each client that has the same structure.

听起来就像您在谈论每个租户一个模式。密切注意权限(SQL GRANTREVOKE 语句。和 ALTER DEFAULT PRIVILEGES 。)

关于ruby-on-rails - Multi-Tenancy rails 应用程序 : what are the pros and cons of different techniques?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7003024/

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