我即将使用 Ruby on Rails 创建一个应用程序,我想使用多个数据库,基本上是一个会计应用程序,每个用户都有多个公司。我想为每个公司创建一个数据库
我找到了这个帖子http://programmerassist.com/article/302但我想阅读更多关于这个问题的想法。
我必须在 MySQL 和 PosgreSQL 之间做出选择,哪个数据库更适合我的问题。
有多种选项可用于处理多租户应用程序。
首先,您可以向表中添加范围(按照 Chad Birch 的建议 - 使用 company_id)。对于大多数用例来说这都很好。如果您正在处理安全/私密的数据(例如会计信息),您需要非常小心地进行测试,以确保数据保持私密性。
您可以使用多个数据库来运行系统。您可以拥有一个为每个客户端使用数据库的应用程序,也可以为每个客户端拥有一个单独的应用程序。为每个客户端运行一个数据库会稍微影响 Rails 的性能,但这是可行的。根据您拥有的客户端数量和负载预期,我实际上建议看看运行单个应用程序。通过对部署设置(capistrano、chef、puppet 等)进行一些工作,您可以使其成为一个非常简化的过程。每个客户端都在完全独特的环境中运行,如果特定客户端负载较高,您可以将它们分派到自己的服务器上。
如果使用 PostgreSQL,您可以使用模式执行类似的操作。PostgresQL 模式提供一种非常方便的方法来将您的数据与不同的客户端隔离。数据库包含一个或多个命名模式,而这些模式又包含表。您需要在迁移和部署中添加一些智能功能,但它效果非常好。
在 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)