gpt4 book ai didi

ruby-on-rails - 我应该使用多个数据库吗?

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:53 25 4
gpt4 key购买 nike

我正准备使用 Ruby on Rails 创建一个应用程序,我想使用多个数据库,基本上是一个会计应用程序,每个用户都有多个公司。我想为每个公司创建一个数据库

我找到了这篇文章 http://programmerassist.com/article/302但我想阅读更多关于这个问题的想法。我必须在 MySQL 和 PosgreSQL 之间做出决定,哪个数据库可能更适合我的问题。

最佳答案

处理 Multi-Tenancy 应用有多种选择。

首先,您可以为您的表添加范围(如 Chad Birch 所建议的那样 - 使用 company_id)。对于大多数用例,这很好。如果您要处理安全/私密的数据(例如会计信息),您需要非常小心地进行测试以确保数据保持私密性。

您可以使用多个数据库运行您的系统。您可以有一个应用程序为每个客户端使用一个数据库,或者您实际上可以为每个客户端有一个单独的应用程序。为每个客户端运行一个数据库对 rails 中的 Cereal 有一点影响,但它是可行的。根据您拥有的客户端数量和负载预期,我实际上建议您查看运行单个应用程序。通过部署设置(capistrano、chef、puppet 等)的一些工作,您可以使这个过程非常简化。每个客户端都在一个完全独特的环境中运行,如果特定客户端负载很高,您可以将它们分拆到自己的服务器上。

如果使用 PostgreSQL,您可以使用模式做类似的事情。 PostgresQL schemas提供一种非常方便的方法来隔离来自不同客户端的数据。数据库包含一个或多个命名模式,这些模式又包含表。您需要为迁移和部署添加一些智能,但它确实运行良好。

在您的 Rails 应用程序中,您将过滤器附加到打开或关闭当前用户架构的请求。

类似于:

before_filter :set_app

def set_app
current_app = App.find_by_subdomain(...)
schema = current_app.schema

set_schema_path(schema)
end


def set_schema_path(schema)
connection = ActiveRecord::Base.connection
connection.execute("SET search_path TO #{schema}, #{connection.schema_search_path}")
end

def reset_schema_path
connection = ActiveRecord::Base.connection
connection.execute("SET search_path TO #{connection.schema_search_path}")
end

关于ruby-on-rails - 我应该使用多个数据库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2413439/

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